You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by th...@apache.org on 2020/11/28 22:19:08 UTC

[tapestry-5] branch master updated (bcde13e -> 5701b7b)

This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git.


    from bcde13e  Adding .metadata to .gitignore
     new f334b6a  TAP5-2627: putting all of beanmodel subproject into a single parent package
     new f70d1ab  TAP5-2627: putting all of beanmodel subproject into a single parent package
     new 5701b7b  TAP5-2641: avoiding split packages

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitignore                                         |    1 +
 .travis.yml                                        |    2 +-
 5.7_RELEASE_NOTES.md                               |   13 +
 beanmodel/build.gradle                             |    1 +
 .../internal/antlr/PropertyExpressionLexer.g       |  163 ++
 .../internal/antlr/PropertyExpressionParser.g      |  105 +
 .../internal/antlr/PropertyExpressionLexer.g       |  163 --
 .../internal/antlr/PropertyExpressionParser.g      |  105 -
 .../java/org/apache/tapestry5/PropertyConduit.java |   45 -
 .../org/apache/tapestry5/PropertyConduit2.java     |   40 -
 .../org/apache/tapestry5/beaneditor/BeanModel.java |  167 --
 .../beaneditor/BeanModelSourceBuilder.java         |  252 --
 .../apache/tapestry5/beaneditor/PropertyModel.java |   95 -
 .../org/apache/tapestry5/beanmodel/BeanModel.java  |  168 ++
 .../beanmodel/BeanModelSourceBuilder.java          |  252 ++
 .../apache/tapestry5/beanmodel/BeanModelUtils.java |  124 +
 .../tapestry5/beanmodel/PropertyConduit.java       |   45 +
 .../tapestry5/beanmodel/PropertyConduit2.java      |   40 +
 .../apache/tapestry5/beanmodel/PropertyModel.java  |   94 +
 .../internal/InternalPropertyConduit.java          |   37 +
 .../beanmodel/internal/antlr/BaseLexer.java        |   54 +
 .../beanmodel/internal/antlr/BaseParser.java       |   40 +
 .../beanmodel/internal/antlr/package-info.java     |   18 +
 .../internal/beanmodel/BeanModelImpl.java          |  289 ++
 .../internal/beanmodel/PropertyModelImpl.java      |  138 +
 .../internal/services/BeanModelSourceImpl.java     |  226 ++
 .../services/ClassPropertyAdapterImpl.java         |  257 ++
 .../services/CoercingPropertyConduitWrapper.java   |   67 +
 .../beanmodel/internal/services/Invariant.java     |   28 +
 .../internal/services/LiteralPropertyConduit.java  |   85 +
 .../services/PlasticClassListenerLogger.java       |   47 +
 .../internal/services/PropertyAccessImpl.java      |  234 ++
 .../internal/services/PropertyAdapterImpl.java     |  276 ++
 .../internal/services/PropertyConduitDelegate.java |   52 +
 .../services/PropertyConduitSourceImpl.java        | 1595 +++++++++++
 .../services/PropertyExpressionException.java      |   38 +
 .../apache/tapestry5/beanmodel/package-info.java   |   19 +
 .../beanmodel/services/BeanModelSource.java        |   68 +
 .../services/PlasticProxyFactoryImpl.java          |  295 +++
 .../beanmodel/services/PropertyConduitSource.java  |   39 +
 .../internal/InternalPropertyConduit.java          |   37 -
 .../apache/tapestry5/internal/antlr/BaseLexer.java |   54 -
 .../tapestry5/internal/antlr/BaseParser.java       |   40 -
 .../tapestry5/internal/antlr/package-info.java     |   18 -
 .../internal/beaneditor/BeanModelImpl.java         |  289 --
 .../internal/beaneditor/BeanModelUtils.java        |  120 -
 .../internal/beaneditor/PropertyModelImpl.java     |  139 -
 .../internal/services/BeanModelSourceImpl.java     |  222 --
 .../services/CoercingPropertyConduitWrapper.java   |   67 -
 .../tapestry5/internal/services/Invariant.java     |   28 -
 .../internal/services/LiteralPropertyConduit.java  |   85 -
 .../internal/services/PropertyConduitDelegate.java |   52 -
 .../services/PropertyConduitSourceImpl.java        | 1565 -----------
 .../services/PropertyExpressionException.java      |   38 -
 .../services/ClassPropertyAdapterImpl.java         |  256 --
 .../services/PlasticClassListenerLogger.java       |   47 -
 .../internal/services/PlasticProxyFactoryImpl.java |  293 ---
 .../ioc/internal/services/PropertyAccessImpl.java  |  234 --
 .../ioc/internal/services/PropertyAdapterImpl.java |  273 --
 .../apache/tapestry5/services/BeanModelSource.java |   68 -
 .../tapestry5/services/PropertyConduitSource.java  |   39 -
 build.gradle                                       |   12 +-
 .../tapestry5/commons/AnnotationProvider.java      |   33 +
 .../apache/tapestry5/commons/Configuration.java    |   51 +
 .../org/apache/tapestry5/commons/Locatable.java    |   27 +
 .../org/apache/tapestry5/commons/Location.java     |   38 +
 .../tapestry5/commons/MappedConfiguration.java     |   79 +
 .../apache/tapestry5/commons/MessageFormatter.java |   32 +
 .../org/apache/tapestry5/commons/Messages.java     |   61 +
 .../apache/tapestry5/commons/ObjectCreator.java    |   27 +
 .../apache/tapestry5/commons/ObjectLocator.java    |  137 +
 .../apache/tapestry5/commons/ObjectProvider.java   |   44 +
 .../tapestry5/commons/OrderedConfiguration.java    |   82 +
 .../org/apache/tapestry5/commons/Resource.java     |  108 +
 .../commons/internal/BasicDataTypeAnalyzers.java   |  138 +
 .../commons/internal/BasicTypeCoercions.java       |  342 +++
 .../commons/internal/NullAnnotationProvider.java   |   35 +
 .../AccessableObjectAnnotationProvider.java        |   46 +
 .../services/AnnotationDataTypeAnalyzer.java       |   32 +
 .../internal/services/AnnotationProviderChain.java |   59 +
 .../internal/services/CompoundCoercion.java        |   54 +
 .../internal/services/DefaultDataTypeAnalyzer.java |   60 +
 .../internal/services/GenericsResolverImpl.java    |  627 +++++
 .../commons/internal/services/ServiceMessages.java |   68 +
 .../commons/internal/services/StringInterner.java  |   43 +
 .../internal/services/StringInternerImpl.java      |   53 +
 .../commons/internal/services/StringLocation.java  |   65 +
 .../commons/internal/services/TypeCoercerImpl.java |  517 ++++
 .../commons/internal/util/GenericsUtils.java       |  134 +
 .../commons/internal/util/InheritanceSearch.java   |  158 ++
 .../internal/util/InternalCommonsUtils.java        |  381 +++
 .../commons/internal/util/LockSupport.java         |   89 +
 .../internal/util/MessageFormatterImpl.java        |   65 +
 .../commons/internal/util/MessagesImpl.java        |   79 +
 .../commons/internal/util/TapestryException.java   |   75 +
 .../commons/services/ClassPropertyAdapter.java     |   83 +
 .../tapestry5/commons/services/Coercion.java       |   31 +
 .../tapestry5/commons/services/CoercionTuple.java  |  145 +
 .../commons/services/DataTypeAnalyzer.java         |   45 +
 .../commons/services/GenericsResolver.java         |  159 ++
 .../commons/services/InvalidationEventHub.java     |   58 +
 .../commons/services/InvalidationListener.java     |   33 +
 .../commons/services/PlasticProxyFactory.java      |  174 ++
 .../tapestry5/commons/services/PropertyAccess.java |   75 +
 .../commons/services/PropertyAdapter.java          |  118 +
 .../tapestry5/commons/services/TypeCoercer.java    |   86 +
 .../tapestry5/commons/util/AbstractMessages.java   |   93 +
 .../tapestry5/commons/util/AvailableValues.java    |   86 +
 .../tapestry5/commons/util/CaseInsensitiveMap.java |  573 ++++
 .../tapestry5/commons/util/CollectionFactory.java  |  142 +
 .../tapestry5/commons/util/CommonsUtils.java       |   61 +
 .../tapestry5/commons/util/ExceptionUtils.java     |  115 +
 .../tapestry5/commons/util/IntegerRange.java       |  125 +
 .../apache/tapestry5/commons/util/MultiKey.java    |   86 +
 .../org/apache/tapestry5/commons/util/Stack.java   |  171 ++
 .../tapestry5/commons/util/StrategyRegistry.java   |  171 ++
 .../commons/util/StringToEnumCoercion.java         |   86 +
 .../tapestry5/commons/util/TimeInterval.java       |  192 ++
 .../commons/util/UnknownValueException.java        |   47 +
 .../services/AnnotationDataTypeAnalyzer.java       |   32 -
 .../internal/services/DefaultDataTypeAnalyzer.java |   61 -
 .../internal/services/GenericsResolverImpl.java    |  627 -----
 .../internal/services/StringInterner.java          |   43 -
 .../internal/services/StringInternerImpl.java      |   53 -
 .../tapestry5/internal/util/IntegerRange.java      |  125 -
 .../apache/tapestry5/internal/util/MultiKey.java   |   86 -
 .../apache/tapestry5/ioc/AnnotationProvider.java   |   33 -
 .../org/apache/tapestry5/ioc/Configuration.java    |   51 -
 .../java/org/apache/tapestry5/ioc/Locatable.java   |   27 -
 .../java/org/apache/tapestry5/ioc/Location.java    |   38 -
 .../apache/tapestry5/ioc/MappedConfiguration.java  |   79 -
 .../org/apache/tapestry5/ioc/MessageFormatter.java |   32 -
 .../java/org/apache/tapestry5/ioc/Messages.java    |   61 -
 .../org/apache/tapestry5/ioc/ObjectCreator.java    |   27 -
 .../org/apache/tapestry5/ioc/ObjectLocator.java    |  137 -
 .../apache/tapestry5/ioc/OrderedConfiguration.java |   82 -
 .../java/org/apache/tapestry5/ioc/Resource.java    |  108 -
 .../ioc/internal/BasicDataTypeAnalyzers.java       |  138 -
 .../tapestry5/ioc/internal/BasicTypeCoercions.java |  342 ---
 .../ioc/internal/NullAnnotationProvider.java       |   35 -
 .../AccessableObjectAnnotationProvider.java        |   46 -
 .../internal/services/AnnotationProviderChain.java |   59 -
 .../ioc/internal/services/CompoundCoercion.java    |   54 -
 .../ioc/internal/services/ServiceMessages.java     |   68 -
 .../ioc/internal/services/StringLocation.java      |   65 -
 .../ioc/internal/services/TypeCoercerImpl.java     |  511 ----
 .../ioc/internal/util/CollectionFactory.java       |  137 -
 .../tapestry5/ioc/internal/util/GenericsUtils.java |  134 -
 .../ioc/internal/util/InheritanceSearch.java       |  157 --
 .../ioc/internal/util/InternalCommonsUtils.java    |  388 ---
 .../tapestry5/ioc/internal/util/LockSupport.java   |   89 -
 .../ioc/internal/util/MessageFormatterImpl.java    |   65 -
 .../tapestry5/ioc/internal/util/MessagesImpl.java  |   74 -
 .../ioc/internal/util/TapestryException.java       |   75 -
 .../ioc/services/ClassPropertyAdapter.java         |   83 -
 .../apache/tapestry5/ioc/services/Coercion.java    |   31 -
 .../tapestry5/ioc/services/CoercionTuple.java      |  145 -
 .../ioc/services/PlasticProxyFactory.java          |  174 --
 .../tapestry5/ioc/services/PropertyAccess.java     |   75 -
 .../tapestry5/ioc/services/PropertyAdapter.java    |  119 -
 .../apache/tapestry5/ioc/services/TypeCoercer.java |   86 -
 .../tapestry5/ioc/util/AbstractMessages.java       |   94 -
 .../apache/tapestry5/ioc/util/AvailableValues.java |   87 -
 .../tapestry5/ioc/util/CaseInsensitiveMap.java     |  573 ----
 .../apache/tapestry5/ioc/util/ExceptionUtils.java  |  115 -
 .../java/org/apache/tapestry5/ioc/util/Stack.java  |  173 --
 .../tapestry5/ioc/util/StrategyRegistry.java       |  172 --
 .../apache/tapestry5/ioc/util/TimeInterval.java    |  193 --
 .../tapestry5/ioc/util/UnknownValueException.java  |   47 -
 .../tapestry5/services/DataTypeAnalyzer.java       |   46 -
 .../tapestry5/services/GenericsResolver.java       |  159 --
 .../tapestry5/services/InvalidationEventHub.java   |   58 -
 .../tapestry5/services/InvalidationListener.java   |   33 -
 .../tapestry5/util/StringToEnumCoercion.java       |   90 -
 .../internal/services/ServiceStrings.properties    |    0
 .../internal/GuavaGenericsResolver.java            |   64 +
 .../GuavaGenericsResolver.java                     |   63 -
 .../org.apache.tapestry5.services.GenericsResolver |    2 +-
 .../AbstractBeanModelSourceImplTest.java           |   20 +-
 .../GuavaBeanModelSourceImplTest.java              |    4 +-
 plastic/build.gradle                               |    1 -
 .../apache/tapestry5/internal/plastic/Cache.java   |    4 +-
 .../plastic/PlasticClassTransformation.java        |    2 +-
 .../src/main/java/services/AppModule.java          |    4 +-
 .../src/main/java/services/DevelopmentModule.java  |    2 +-
 .../src/main/java/services/QaModule.java           |    4 +-
 settings.gradle                                    |    4 +-
 .../beanvalidator/modules/BeanValidatorModule.java |    6 +-
 .../tapestry5/internal/beanvalidator/BaseCCD.java  |    4 +-
 .../internal/beanvalidator/BeanFieldValidator.java |    2 +-
 .../BeanFieldValidatorDefaultSource.java           |    4 +-
 .../ClientConstraintDescriptorImpl.java            |    4 +-
 .../org/example/testapp/services/AppModule.java    |    9 +-
 .../tapestry5/clojure/modules/ClojureModule.java   |    2 +-
 .../internal/clojure/ClojureBuilderImpl.java       |    4 +-
 .../clojure/tests/ClojureBuilderSpec.groovy        |    1 +
 tapestry-core/build.gradle                         |    7 +
 .../src/main/java/org/apache/tapestry5/Asset.java  |    4 +-
 .../BaseOptimizedSessionPersistedObject.java       |    4 +-
 .../main/java/org/apache/tapestry5/Binding.java    |    2 +-
 .../apache/tapestry5/BlockNotFoundException.java   |    4 +-
 .../org/apache/tapestry5/ComponentResources.java   |   12 +-
 .../apache/tapestry5/ComponentResourcesCommon.java |    3 +-
 .../java/org/apache/tapestry5/ContentType.java     |  215 --
 .../java/org/apache/tapestry5/CookieBuilder.java   |    2 +-
 .../java/org/apache/tapestry5/EventConstants.java  |    1 +
 .../java/org/apache/tapestry5/EventContext.java    |    2 +-
 .../tapestry5/ExceptionHandlerAssistant.java       |    1 +
 .../java/org/apache/tapestry5/FieldValidator.java  |    2 +-
 .../src/main/java/org/apache/tapestry5/Link.java   |  180 --
 .../java/org/apache/tapestry5/LinkSecurity.java    |   61 -
 .../java/org/apache/tapestry5/MarkupUtils.java     |    4 +-
 .../tapestry5/OptimizedSessionPersistedObject.java |   34 -
 .../java/org/apache/tapestry5/PageCallback.java    |    7 +-
 .../org/apache/tapestry5/PersistenceConstants.java |    2 +-
 .../org/apache/tapestry5/PropertyOverrides.java    |    2 +-
 .../java/org/apache/tapestry5/StreamResponse.java  |    4 +-
 .../java/org/apache/tapestry5/SymbolConstants.java |   62 +-
 .../org/apache/tapestry5/TapestryConstants.java    |    4 +-
 .../java/org/apache/tapestry5/TapestryFilter.java  |  167 +-
 .../main/java/org/apache/tapestry5/Translator.java |    2 +-
 .../apache/tapestry5/ValidationTrackerImpl.java    |    2 +-
 .../main/java/org/apache/tapestry5/Validator.java  |    2 +-
 .../java/org/apache/tapestry5/ValueEncoder.java    |    2 +-
 .../org/apache/tapestry5/ajax/MultiZoneUpdate.java |    2 +-
 .../org/apache/tapestry5/alerts/AlertStorage.java  |    6 +-
 .../annotations/ActivationRequestParameter.java    |    4 +-
 .../ImmutableSessionPersistedObject.java           |   36 -
 .../org/apache/tapestry5/annotations/Persist.java  |    2 +-
 .../apache/tapestry5/annotations/PublishEvent.java |    2 +-
 .../tapestry5/annotations/RequestParameter.java    |    2 +-
 .../tapestry5/annotations/SessionAttribute.java    |    3 +-
 .../apache/tapestry5/annotations/SessionState.java |    2 +-
 .../apache/tapestry5/beaneditor/package-info.java  |   19 -
 .../corelib/base/AbstractComponentEventLink.java   |    4 +-
 .../tapestry5/corelib/base/AbstractField.java      |    4 +-
 .../corelib/base/AbstractInternalPage.java         |    2 +-
 .../tapestry5/corelib/base/AbstractLink.java       |    5 +-
 .../corelib/base/AbstractPropertyOutput.java       |    7 +-
 .../tapestry5/corelib/base/AbstractTextField.java  |    2 +-
 .../tapestry5/corelib/components/ActionLink.java   |    2 +-
 .../tapestry5/corelib/components/AjaxFormLoop.java |   11 +-
 .../tapestry5/corelib/components/Alerts.java       |    4 +-
 .../tapestry5/corelib/components/BeanDisplay.java  |   14 +-
 .../tapestry5/corelib/components/BeanEditForm.java |   16 +-
 .../tapestry5/corelib/components/BeanEditor.java   |   14 +-
 .../tapestry5/corelib/components/Checklist.java    |    4 +-
 .../tapestry5/corelib/components/DateField.java    |    2 +-
 .../tapestry5/corelib/components/DevTool.java      |    8 +-
 .../tapestry5/corelib/components/Dynamic.java      |    4 +-
 .../tapestry5/corelib/components/Errors.java       |    2 +-
 .../tapestry5/corelib/components/EventLink.java    |    2 +-
 .../apache/tapestry5/corelib/components/Form.java  |   20 +-
 .../apache/tapestry5/corelib/components/Grid.java  |   22 +-
 .../tapestry5/corelib/components/GridColumns.java  |    6 +-
 .../tapestry5/corelib/components/GridPager.java    |    5 +-
 .../tapestry5/corelib/components/GridRows.java     |    2 +-
 .../tapestry5/corelib/components/Hidden.java       |    2 +-
 .../corelib/components/Html5DateField.java         |    2 +-
 .../apache/tapestry5/corelib/components/Label.java |    3 +-
 .../tapestry5/corelib/components/LinkSubmit.java   |    2 +-
 .../apache/tapestry5/corelib/components/Loop.java  |    2 +-
 .../tapestry5/corelib/components/PageLink.java     |    8 +-
 .../corelib/components/ProgressiveDisplay.java     |    1 +
 .../corelib/components/PropertyDisplay.java        |    2 +-
 .../corelib/components/PropertyEditor.java         |   18 +-
 .../tapestry5/corelib/components/RadioGroup.java   |    4 +-
 .../tapestry5/corelib/components/Select.java       |   12 +-
 .../tapestry5/corelib/components/Submit.java       |    2 +-
 .../apache/tapestry5/corelib/components/Tree.java  |    1 +
 .../apache/tapestry5/corelib/components/Zone.java  |    7 +-
 .../corelib/internal/FormSupportImpl.java          |    6 +-
 .../tapestry5/corelib/mixins/Autocomplete.java     |    3 +-
 .../tapestry5/corelib/mixins/ZoneRefresh.java      |    1 +
 .../corelib/pages/ComponentLibraries.java          |    4 +-
 .../tapestry5/corelib/pages/ExceptionReport.java   |   19 +-
 .../tapestry5/corelib/pages/PageCatalog.java       |   12 +-
 .../corelib/pages/PropertyEditBlocks.java          |    6 +-
 .../tapestry5/corelib/pages/ServiceStatus.java     |   10 +-
 .../tapestry5/corelib/pages/T5Dashboard.java       |    3 +-
 .../apache/tapestry5/dom/DefaultMarkupModel.java   |    4 +-
 .../java/org/apache/tapestry5/dom/Document.java    |    2 +-
 .../java/org/apache/tapestry5/dom/Element.java     |    4 +-
 .../org/apache/tapestry5/dom/Html5MarkupModel.java |    2 +-
 .../java/org/apache/tapestry5/dom/MapHolder.java   |    4 +-
 .../org/apache/tapestry5/grid/GridDataSource.java  |    2 +-
 .../java/org/apache/tapestry5/grid/GridModel.java  |    2 +-
 .../org/apache/tapestry5/grid/SortConstraint.java  |    4 +-
 .../internal/AbstractContributionDef.java          |   40 -
 .../internal/ContextResourceSymbolProvider.java    |    4 +-
 .../internal/DefaultValueLabelProvider.java        |    2 +-
 .../tapestry5/internal/EmptyEventContext.java      |    3 +-
 .../tapestry5/internal/InternalConstants.java      |   37 +-
 .../apache/tapestry5/internal/InternalSymbols.java |   14 -
 .../tapestry5/internal/PropertyOverridesImpl.java  |    2 +-
 .../internal/ServletContextSymbolProvider.java     |   44 -
 .../internal/SingleKeySymbolProvider.java          |   41 -
 .../tapestry5/internal/SyntheticModuleDef.java     |   85 -
 .../SyntheticSymbolSourceContributionDef.java      |   57 -
 .../tapestry5/internal/TapestryAppInitializer.java |  249 --
 .../tapestry5/internal/TapestryInternalUtils.java  |   24 +-
 .../internal/alerts/AlertManagerImpl.java          |    2 +-
 .../internal/beaneditor/EnvironmentMessages.java   |    2 +-
 .../beaneditor/MessagesConstraintGenerator.java    |    4 +-
 .../PrimitiveFieldConstraintGenerator.java         |    2 +-
 .../ValidateAnnotationConstraintGenerator.java     |    2 +-
 .../internal/bindings/AbstractBinding.java         |    4 +-
 .../tapestry5/internal/bindings/AssetBinding.java  |    2 +-
 .../internal/bindings/AssetBindingFactory.java     |    2 +-
 .../tapestry5/internal/bindings/BlockBinding.java  |    2 +-
 .../internal/bindings/BlockBindingFactory.java     |    2 +-
 .../internal/bindings/ComponentBinding.java        |    2 +-
 .../internal/bindings/ComponentBindingFactory.java |    2 +-
 .../internal/bindings/ContextBindingFactory.java   |    2 +-
 .../internal/bindings/InvariantBinding.java        |    2 +-
 .../internal/bindings/LiteralBinding.java          |    4 +-
 .../internal/bindings/LiteralBindingFactory.java   |    2 +-
 .../internal/bindings/MessageBindingFactory.java   |    2 +-
 .../bindings/NullFieldStrategyBindingFactory.java  |    2 +-
 .../tapestry5/internal/bindings/PropBinding.java   |   12 +-
 .../internal/bindings/PropBindingFactory.java      |    8 +-
 .../internal/bindings/RenderVariableBinding.java   |    2 +-
 .../bindings/RenderVariableBindingFactory.java     |    2 +-
 .../internal/bindings/SymbolBindingFactory.java    |    2 +-
 .../internal/bindings/TranslateBindingFactory.java |    4 +-
 .../internal/bindings/ValidateBindingFactory.java  |    6 +-
 .../dynamic/DynamicTemplateParserImpl.java         |    8 +-
 .../internal/dynamic/DynamicTemplateSaxParser.java |   10 +-
 .../internal/event/InvalidationEventHubImpl.java   |    8 +-
 .../internal/grid/CollectionGridDataSource.java    |    4 +-
 .../internal/gzip/BufferedGZipOutputStream.java    |  143 -
 .../internal/gzip/GZIPEnabledResponse.java         |   71 -
 .../apache/tapestry5/internal/gzip/GZipFilter.java |   61 -
 .../internal/model/MutableComponentModelImpl.java  |    6 +-
 .../model/MutableEmbeddedComponentModelImpl.java   |    4 +-
 .../internal/pageload/AssemblerContext.java        |    2 +-
 .../internal/pageload/ComponentAssembler.java      |    4 +-
 .../internal/pageload/ComponentAssemblerImpl.java  |   10 +-
 .../pageload/DefaultComponentResourceLocator.java  |    2 +-
 .../pageload/EmbeddedComponentAssembler.java       |    2 +-
 .../pageload/EmbeddedComponentAssemblerImpl.java   |    6 +-
 .../tapestry5/internal/pageload/PageAssembly.java  |    8 +-
 .../internal/pageload/PageLoaderImpl.java          |   30 +-
 .../internal/pageload/PagePreloaderImpl.java       |    4 +-
 .../tapestry5/internal/parser/AttributeToken.java  |    2 +-
 .../tapestry5/internal/parser/BlockToken.java      |    2 +-
 .../tapestry5/internal/parser/BodyToken.java       |    2 +-
 .../tapestry5/internal/parser/CDATAToken.java      |    2 +-
 .../tapestry5/internal/parser/CommentToken.java    |    2 +-
 .../internal/parser/ComponentTemplate.java         |    6 +-
 .../internal/parser/ComponentTemplateImpl.java     |   10 +-
 .../apache/tapestry5/internal/parser/DTDToken.java |    2 +-
 .../parser/DefineNamespacePrefixToken.java         |    2 +-
 .../tapestry5/internal/parser/EndElementToken.java |    2 +-
 .../tapestry5/internal/parser/ExpansionToken.java  |    2 +-
 .../internal/parser/ExtensionPointToken.java       |    2 +-
 .../tapestry5/internal/parser/ParameterToken.java  |    2 +-
 .../internal/parser/StartComponentToken.java       |    2 +-
 .../internal/parser/StartElementToken.java         |    2 +-
 .../tapestry5/internal/parser/TemplateToken.java   |    2 +-
 .../tapestry5/internal/parser/TextToken.java       |    2 +-
 .../renderers/AvailableValuesRenderer.java         |    2 +-
 .../renderers/ComponentResourcesRenderer.java      |    2 +-
 .../internal/renderers/LocationRenderer.java       |    6 +-
 .../internal/renderers/RequestRenderer.java        |   10 +-
 .../internal/services/AbstractAssetFactory.java    |    6 +-
 .../AbstractSessionPersistentFieldStrategy.java    |   10 +-
 .../services/AjaxComponentEventRequestHandler.java |    4 +-
 .../tapestry5/internal/services/AjaxFilter.java    |    9 +-
 .../AjaxLinkComponentEventResultProcessor.java     |    4 +-
 .../AjaxPageNameComponentEventResultProcessor.java |    4 +-
 .../services/AjaxPartialResponseRendererImpl.java  |    9 +-
 .../internal/services/ApplicationGlobalsImpl.java  |   47 -
 .../ApplicationMessageCatalogObjectProvider.java   |   10 +-
 .../ApplicationStackTraceElementAnalyzer.java      |    4 +-
 .../services/ApplicationStateManagerImpl.java      |    4 +-
 .../internal/services/ArrayEventContext.java       |    2 +-
 .../internal/services/AssetDispatcher.java         |   10 +-
 .../internal/services/AssetInjectionProvider.java  |    2 +-
 .../internal/services/AssetObjectProvider.java     |    8 +-
 .../internal/services/AssetSourceImpl.java         |   10 +-
 .../services/AttributeExpansionBinding.java        |    2 +-
 .../internal/services/BaseURLSourceImpl.java       |   86 -
 .../services/BeanBlockOverrideSourceImpl.java      |    2 +-
 .../internal/services/BindingSourceImpl.java       |    7 +-
 .../internal/services/BlockInjectionProvider.java  |    2 +-
 .../internal/services/CheckForUpdatesFilter.java   |   11 +-
 .../services/ClasspathAssetAliasManagerImpl.java   |    8 +-
 .../internal/services/ClasspathAssetFactory.java   |    4 +-
 .../services/ClientBehaviorSupportImpl.java        |    2 +-
 .../internal/services/ClientDataEncoderImpl.java   |    4 +-
 .../services/ClientPersistentFieldStorage.java     |    2 +-
 .../services/ClientPersistentFieldStorageImpl.java |   11 +-
 .../services/ClientPersistentFieldStrategy.java    |    9 +-
 .../internal/services/ClusteredSessionImpl.java    |  106 -
 .../services/CommonResourcesInjectionProvider.java |    6 +-
 .../internal/services/ComponentClassCacheImpl.java |   14 +-
 .../services/ComponentClassResolverImpl.java       |    8 +-
 .../services/ComponentDefaultProviderImpl.java     |    4 +-
 .../services/ComponentEventDispatcher.java         |    8 +-
 .../services/ComponentEventLinkEncoderImpl.java    |   19 +-
 .../services/ComponentEventRequestHandlerImpl.java |   10 +-
 .../services/ComponentInstantiatorSource.java      |    4 +-
 .../services/ComponentInstantiatorSourceImpl.java  |   46 +-
 .../services/ComponentMessagesSourceImpl.java      |   12 +-
 .../ComponentRequestHandlerTerminator.java         |   10 +-
 .../internal/services/ComponentSourceImpl.java     |    2 +-
 .../internal/services/ComponentTemplateSource.java |    2 +-
 .../services/ComponentTemplateSourceImpl.java      |   18 +-
 .../internal/services/ContextAssetFactory.java     |    6 +-
 .../tapestry5/internal/services/ContextImpl.java   |  110 -
 .../internal/services/ContextPathEncoderImpl.java  |    2 +-
 .../internal/services/ContextResource.java         |    4 +-
 .../tapestry5/internal/services/CookiesImpl.java   |    8 +-
 .../services/DefaultInjectionProvider.java         |    4 +-
 .../services/DefaultRequestExceptionHandler.java   |   13 +-
 .../DefaultSessionPersistedObjectAnalyzer.java     |   43 -
 .../services/DeferredResponseRenderer.java         |    7 +-
 .../internal/services/DocumentLinkerImpl.java      |    2 +-
 .../services/EndOfRequestEventHubImpl.java         |    4 +-
 .../internal/services/EnumValueEncoderFactory.java |    4 +-
 .../internal/services/EnumValueLabelProvider.java  |    2 +-
 .../internal/services/EnvironmentImpl.java         |    6 +-
 .../services/EnvironmentalShadowBuilderImpl.java   |    2 +-
 .../internal/services/ExternalUrlAssetFactory.java |    4 +-
 .../internal/services/FieldTranslatorImpl.java     |    2 +-
 .../services/FieldTranslatorSourceImpl.java        |    6 +-
 .../services/FieldValidationSupportImpl.java       |    6 +-
 .../services/FieldValidatorDefaultSourceImpl.java  |    7 +-
 .../internal/services/FieldValidatorImpl.java      |    2 +-
 .../services/FieldValidatorSourceImpl.java         |   12 +-
 .../services/FlashPersistentFieldStrategy.java     |    4 +-
 .../services/FormControlNameManagerImpl.java       |    2 +-
 .../services/GenericValueEncoderFactory.java       |    2 +-
 .../tapestry5/internal/services/HeartbeatImpl.java |    6 +-
 .../HttpErrorComponentEventResultProcessor.java    |    2 +-
 .../internal/services/IgnoredPathsFilter.java      |    4 +-
 .../InternalComponentInvalidationEventHub.java     |    4 +-
 .../InternalComponentInvalidationEventHubImpl.java |    4 +-
 .../services/JSONArrayEventResultProcessor.java    |    7 +-
 .../internal/services/LinkDecorationListener.java  |    2 +-
 .../tapestry5/internal/services/LinkImpl.java      |    8 +-
 .../tapestry5/internal/services/LinkSource.java    |    4 +-
 .../internal/services/LinkSourceImpl.java          |    8 +-
 .../internal/services/LocalizationSetterImpl.java  |    4 +-
 .../tapestry5/internal/services/MapMessages.java   |   11 +-
 .../internal/services/MarkupWriterFactoryImpl.java |    2 +-
 .../internal/services/MessagesBundle.java          |    4 +-
 .../internal/services/MessagesSource.java          |    6 +-
 .../internal/services/MessagesSourceImpl.java      |   10 +-
 .../internal/services/MetaDataLocatorImpl.java     |    8 +-
 .../internal/services/ModuleInitsManager.java      |    2 +-
 .../services/NullFieldStrategySourceImpl.java      |    4 +-
 .../ObjectComponentEventResultProcessor.java       |    4 +-
 .../OptimizedSessionPersistedObjectAnalyzer.java   |   26 -
 .../PageActivationContextCollectorImpl.java        |   10 +-
 .../internal/services/PageContentTypeAnalyzer.java |    4 +-
 .../services/PageContentTypeAnalyzerImpl.java      |    6 +-
 .../internal/services/PageElementFactory.java      |    2 +-
 .../internal/services/PageElementFactoryImpl.java  |   10 +-
 .../PageNameComponentEventResultProcessor.java     |    2 +-
 .../internal/services/PageNameMetaInjector.java    |    2 +-
 .../internal/services/PageRenderDispatcher.java    |    8 +-
 .../services/PageRenderLinkSourceImpl.java         |    2 +-
 .../internal/services/PageRenderQueueImpl.java     |    4 +-
 .../services/PageRenderRequestHandlerImpl.java     |    7 +-
 .../services/PageResponseRendererImpl.java         |    6 +-
 .../tapestry5/internal/services/PageSource.java    |    2 +-
 .../internal/services/PageSourceImpl.java          |    6 +-
 .../services/PartialTemplateRendererImpl.java      |    2 +-
 .../internal/services/PathConstructorImpl.java     |    3 +-
 .../services/PersistentFieldBundleImpl.java        |    2 +-
 .../services/PersistentFieldManagerImpl.java       |    6 +-
 .../internal/services/PersistentLocaleImpl.java    |    2 +-
 .../ProductionModeUnknownComponentFilter.java      |    9 +-
 .../services/PropertyValueLabelProvider.java       |    6 +-
 .../internal/services/ReloadHelperImpl.java        |    6 +-
 .../internal/services/RenderQueueException.java    |    2 +-
 .../internal/services/RenderQueueImpl.java         |    6 +-
 .../internal/services/RequestErrorFilter.java      |   11 +-
 .../internal/services/RequestGlobalsImpl.java      |   84 -
 .../tapestry5/internal/services/RequestImpl.java   |  229 --
 .../internal/services/RequestOperationTracker.java |    7 +-
 .../internal/services/RequestPageCacheImpl.java    |    6 +-
 .../internal/services/RequestSecurityManager.java  |    4 +-
 .../services/RequestSecurityManagerImpl.java       |   12 +-
 .../internal/services/ResourceDigestManager.java   |    4 +-
 .../services/ResourceDigestManagerImpl.java        |    4 +-
 .../internal/services/ResourceStreamer.java        |    4 +-
 .../internal/services/ResourceStreamerImpl.java    |   12 +-
 .../services/ResponseCompressionAnalyzerImpl.java  |   83 -
 .../tapestry5/internal/services/ResponseImpl.java  |  135 -
 .../internal/services/ResponseRendererImpl.java    |    2 +-
 .../services/RestoreDirtySessionObjects.java       |    6 +-
 .../internal/services/RootPathDispatcher.java      |    9 +-
 .../internal/services/SaxTemplateParser.java       |   10 +-
 .../internal/services/SelectModelFactoryImpl.java  |    4 +-
 .../services/ServiceAnnotationObjectProvider.java  |    6 +-
 .../services/ServiceInjectionProvider.java         |    2 +-
 ...SessionApplicationStatePersistenceStrategy.java |    4 +-
 .../tapestry5/internal/services/SessionImpl.java   |  122 -
 .../tapestry5/internal/services/SessionLock.java   |   36 -
 .../services/SessionPersistentFieldStrategy.java   |    4 +-
 .../internal/services/StaticFilesFilter.java       |   10 +-
 .../services/StreamPageContentResultProcessor.java |   11 +-
 .../services/StreamResponseResultProcessor.java    |    2 +-
 .../internal/services/TapestrySessionFactory.java  |   29 -
 .../services/TapestrySessionFactoryImpl.java       |  184 --
 .../internal/services/TemplateParser.java          |    2 +-
 .../internal/services/TemplateParserImpl.java      |    2 +-
 .../internal/services/TranslatorSourceImpl.java    |   12 +-
 .../services/TypeCoercedValueEncoderFactory.java   |    4 +-
 .../tapestry5/internal/services/UrlAsset.java      |    2 +-
 .../tapestry5/internal/services/UrlResource.java   |    2 +-
 .../ValidationConstraintGeneratorImpl.java         |    4 +-
 .../internal/services/ValueEncoderSourceImpl.java  |   10 +-
 .../tapestry5/internal/services/XMLToken.java      |    2 +-
 .../internal/services/XMLTokenStream.java          |    8 +-
 .../services/ajax/AjaxFormUpdateFilter.java        |    2 +-
 .../services/ajax/AjaxResponseRendererImpl.java    |    4 +-
 .../services/ajax/JavaScriptSupportImpl.java       |    2 +-
 .../ajax/MultiZoneUpdateEventResultProcessor.java  |    4 +-
 .../assets/AssetChecksumGeneratorImpl.java         |    4 +-
 .../services/assets/AssetPathConstructorImpl.java  |    4 +-
 .../internal/services/assets/CSSURLRewriter.java   |    4 +-
 .../internal/services/assets/ChecksumPath.java     |    2 +-
 .../assets/ClasspathAssetRequestHandler.java       |    6 +-
 .../services/assets/CompressionAnalyzerImpl.java   |    2 +-
 .../services/assets/ContentTypeAnalyzerImpl.java   |    4 +-
 .../assets/ContextAssetRequestHandler.java         |    6 +-
 .../internal/services/assets/DelegatingSRS.java    |    4 +-
 .../assets/JavaScriptStackAssemblerImpl.java       |    6 +-
 .../assets/JavaScriptStackMinimizeDisabler.java    |    4 +-
 .../services/assets/ResourceChangeTracker.java     |    8 +-
 .../services/assets/ResourceChangeTrackerImpl.java |   10 +-
 .../services/assets/SRSCachingInterceptor.java     |    4 +-
 .../services/assets/SRSCompressingInterceptor.java |    2 +-
 .../services/assets/SRSMinimizingInterceptor.java  |    2 +-
 .../services/assets/StackAssetRequestHandler.java  |    4 +-
 .../services/assets/StreamableResourceImpl.java    |    4 +-
 .../assets/StreamableResourceSourceImpl.java       |    7 +-
 .../services/assets/UTF8ForTextAssets.java         |    4 +-
 .../compatibility/DeprecationWarningImpl.java      |    6 +-
 .../services/dashboard/DashboardManagerImpl.java   |    2 +-
 .../exceptions/ExceptionReportWriterImpl.java      |   12 +-
 .../services/exceptions/ExceptionReporterImpl.java |    2 +-
 .../javascript/ConfigureHTMLElementFilter.java     |    4 +-
 .../JavaScriptStackPathConstructorImpl.java        |    6 +-
 .../javascript/JavaScriptStackSourceImpl.java      |    6 +-
 .../services/javascript/ModuleDispatcher.java      |   10 +-
 .../services/javascript/ModuleManagerImpl.java     |   11 +-
 .../linktransform/LinkTransformerImpl.java         |    4 +-
 .../linktransform/LinkTransformerInterceptor.java  |    4 +-
 .../ClientLocalizationMessageResource.java         |    4 +-
 .../messages/PropertiesFileParserImpl.java         |    4 +-
 .../services/security/ClientWhitelistImpl.java     |    2 +-
 .../internal/services/security/LocalhostOnly.java  |    2 +-
 .../services/templates/DefaultTemplateLocator.java |    2 +-
 .../services/templates/PageTemplateLocator.java    |    2 +-
 .../tapestry5/internal/structure/BlockImpl.java    |    4 +-
 .../internal/structure/ComponentPageElement.java   |    2 +-
 .../structure/ComponentPageElementImpl.java        |   15 +-
 .../structure/ComponentPageElementResources.java   |    8 +-
 .../ComponentPageElementResourcesImpl.java         |   18 +-
 .../ComponentPageElementResourcesSourceImpl.java   |    9 +-
 .../internal/structure/ExpansionPageElement.java   |    2 +-
 .../structure/InternalComponentResourcesImpl.java  |   17 +-
 .../apache/tapestry5/internal/structure/Page.java  |    4 +-
 .../tapestry5/internal/structure/PageImpl.java     |    6 +-
 .../structure/RenderPhaseEventHandler.java         |    2 +-
 .../internal/structure/StructureMessages.java      |    6 +-
 .../internal/test/EndOfRequestCleanupFilter.java   |   10 +-
 .../tapestry5/internal/test/PageTesterContext.java |    2 +-
 .../tapestry5/internal/test/PageTesterModule.java  |   18 +-
 .../tapestry5/internal/test/PageTesterSession.java |    7 +-
 .../internal/test/TestableCookieSinkSource.java    |    2 +-
 .../tapestry5/internal/test/TestableRequest.java   |    2 +-
 .../internal/test/TestableRequestImpl.java         |    8 +-
 .../tapestry5/internal/test/TestableResponse.java  |    6 +-
 .../internal/test/TestableResponseImpl.java        |    4 +-
 .../ActivationRequestParameterWorker.java          |    6 +-
 .../internal/transform/BindParameterWorker.java    |   12 +-
 .../internal/transform/ComponentWorker.java        |   12 +-
 .../internal/transform/InjectComponentWorker.java  |    2 +-
 .../internal/transform/InjectNamedProvider.java    |    2 +-
 .../internal/transform/InjectPageWorker.java       |    2 +-
 .../internal/transform/InjectServiceWorker.java    |    2 +-
 .../tapestry5/internal/transform/InjectWorker.java |    4 +-
 .../internal/transform/OnEventWorker.java          |   10 +-
 .../transform/PageActivationContextWorker.java     |    2 +-
 .../internal/transform/ParameterConduit.java       |    2 +-
 .../internal/transform/ParameterWorker.java        |    6 +-
 .../transform/RenderPhaseMethodWorker.java         |    2 +-
 .../internal/transform/SessionAttributeWorker.java |    4 +-
 .../translator/NumericTranslatorSupportImpl.java   |    4 +-
 .../internal/util/DelegatingSymbolProvider.java    |   47 -
 .../org/apache/tapestry5/internal/util/Holder.java |    2 +-
 .../tapestry5/internal/util/MacOutputStream.java   |    2 +-
 .../internal/util/MessageCatalogResource.java      |    2 +-
 .../apache/tapestry5/internal/util/NamedSet.java   |    6 +-
 .../internal/util/RecomputableSupport.java         |    2 +-
 .../tapestry5/internal/util/VirtualResource.java   |    6 +-
 .../org/apache/tapestry5/model/ComponentModel.java |    2 +-
 .../tapestry5/model/EmbeddedComponentModel.java    |    2 +-
 .../tapestry5/model/MutableComponentModel.java     |    2 +-
 .../org/apache/tapestry5/modules/AssetsModule.java |   43 +-
 .../apache/tapestry5/modules/Bootstrap4Module.java |    2 +-
 .../apache/tapestry5/modules/DashboardModule.java  |    2 +-
 .../apache/tapestry5/modules/InternalModule.java   |   63 +-
 .../apache/tapestry5/modules/JavaScriptModule.java |   10 +-
 .../tapestry5/modules/NoBootstrapModule.java       |    2 +-
 .../apache/tapestry5/modules/PageLoadModule.java   |    3 +-
 .../apache/tapestry5/modules/TapestryModule.java   |  683 +++--
 .../tapestry5/runtime/ComponentEventException.java |    4 +-
 .../tapestry5/services/ApplicationGlobals.java     |   33 -
 .../tapestry5/services/ApplicationInitializer.java |   28 -
 .../services/ApplicationInitializerFilter.java     |   25 -
 .../services/ApplicationStateCreator.java          |    2 +-
 .../services/ApplicationStateManager.java          |    2 +-
 .../apache/tapestry5/services/AssetFactory.java    |    2 +-
 .../tapestry5/services/AssetRequestDispatcher.java |    2 +-
 .../org/apache/tapestry5/services/AssetSource.java |    4 +-
 .../apache/tapestry5/services/BaseURLSource.java   |   51 -
 .../apache/tapestry5/services/BeanBlockSource.java |    4 +-
 .../apache/tapestry5/services/BeanEditContext.java |    2 +-
 .../apache/tapestry5/services/BindingFactory.java  |    2 +-
 .../apache/tapestry5/services/BindingSource.java   |    2 +-
 .../services/ClasspathAssetAliasManager.java       |    4 +-
 .../tapestry5/services/ClientBehaviorSupport.java  |    2 +-
 .../tapestry5/services/ComponentClassResolver.java |    8 +-
 .../services/ComponentEventLinkEncoder.java        |   11 +-
 .../services/ComponentEventResultProcessor.java    |    4 +-
 .../tapestry5/services/ComponentMessages.java      |    2 +-
 .../apache/tapestry5/services/ComponentSource.java |    2 +
 .../tapestry5/services/ComponentTemplates.java     |    2 +-
 .../org/apache/tapestry5/services/Context.java     |   82 -
 .../tapestry5/services/ContextValueEncoder.java    |    2 +-
 .../org/apache/tapestry5/services/Cookies.java     |    3 +-
 .../tapestry5/services/DelegatingRequest.java      |    3 +
 .../org/apache/tapestry5/services/Dispatcher.java  |   37 -
 .../tapestry5/services/FieldTranslatorSource.java  |    6 +-
 .../services/FieldValidatorDefaultSource.java      |    4 +-
 .../tapestry5/services/FieldValidatorSource.java   |    2 +-
 .../org/apache/tapestry5/services/FormSupport.java |    2 +-
 .../services/HttpServletRequestFilter.java         |   35 -
 .../services/HttpServletRequestHandler.java        |   35 -
 .../services/InitializeActivePageName.java         |    2 +
 .../apache/tapestry5/services/LinkCreationHub.java |    2 +-
 .../tapestry5/services/LinkCreationListener.java   |    2 +-
 .../tapestry5/services/LinkCreationListener2.java  |    2 +-
 .../tapestry5/services/MarkupWriterFactory.java    |    2 +-
 .../tapestry5/services/PageRenderLinkSource.java   |    2 +-
 .../services/PartialTemplateRenderer.java          |    2 +-
 .../apache/tapestry5/services/PathConstructor.java |    4 +-
 .../tapestry5/services/PropertyEditContext.java    |    4 +-
 .../tapestry5/services/PropertyOutputContext.java  |    2 +-
 .../org/apache/tapestry5/services/Request.java     |  215 --
 .../apache/tapestry5/services/RequestFilter.java   |   30 -
 .../apache/tapestry5/services/RequestGlobals.java  |   71 -
 .../apache/tapestry5/services/RequestHandler.java  |   33 -
 .../services/ResourceDigestGenerator.java          |    2 +-
 .../org/apache/tapestry5/services/Response.java    |  182 --
 .../services/ResponseCompressionAnalyzer.java      |   44 -
 .../tapestry5/services/ResponseRenderer.java       |    4 +-
 .../services/ServletApplicationInitializer.java    |   29 -
 .../ServletApplicationInitializerFilter.java       |   30 -
 .../org/apache/tapestry5/services/Session.java     |   95 -
 .../services/SessionPersistedObjectAnalyzer.java   |   47 -
 .../tapestry5/services/StreamPageContent.java      |    2 +-
 .../apache/tapestry5/services/TransformUtils.java  |    2 +-
 .../tapestry5/services/TranslatorSource.java       |    2 +-
 .../services/ValidationConstraintGenerator.java    |    4 +-
 .../services/ajax/AjaxResponseRenderer.java        |    2 +-
 .../services/assets/AssetChecksumGenerator.java    |    6 +-
 .../services/assets/AssetPathConstructor.java      |    2 +-
 .../services/assets/AssetRequestHandler.java       |    4 +-
 .../services/assets/CompressionAnalyzer.java       |   39 -
 .../services/assets/CompressionStatus.java         |    2 +-
 .../services/assets/ContentTypeAnalyzer.java       |    4 +-
 .../services/assets/ResourceDependencies.java      |    2 +-
 .../services/assets/ResourceTransformer.java       |    4 +-
 .../services/assets/ResponseCustomizer.java        |    4 +-
 .../services/assets/StreamableResource.java        |    4 +-
 .../assets/StreamableResourceProcessing.java       |    2 +-
 .../services/assets/StreamableResourceSource.java  |    4 +-
 .../services/dynamic/DynamicTemplateParser.java    |    2 +-
 .../tapestry5/services/javascript/AMDWrapper.java  |    2 +-
 .../javascript/JavaScriptModuleConfiguration.java  |    4 +-
 .../services/javascript/JavaScriptStackSource.java |    4 +-
 .../services/javascript/ModuleManager.java         |    2 +-
 .../ComponentEventLinkTransformer.java             |    4 +-
 .../linktransform/PageRenderLinkTransformer.java   |    4 +-
 .../services/messages/ComponentMessagesSource.java |    6 +-
 .../services/messages/PropertiesFileParser.java    |    6 +-
 .../pageload/ComponentRequestSelectorAnalyzer.java |    2 +-
 .../pageload/ComponentResourceLocator.java         |    2 +-
 .../pageload/ComponentResourceSelector.java        |    4 +-
 .../services/security/WhitelistAnalyzer.java       |    2 +-
 .../templates/ComponentTemplateLocator.java        |    2 +-
 .../services/transform/InjectionProvider2.java     |    2 +-
 .../java/org/apache/tapestry5/test/PageTester.java |   18 +-
 .../apache/tapestry5/test/TapestryTestCase.java    |   45 +-
 .../tapestry5/tree/DefaultTreeExpansionModel.java  |    4 +-
 .../apache/tapestry5/tree/DefaultTreeModel.java    |    4 +-
 .../tapestry5/tree/DefaultTreeSelectionModel.java  |    2 +-
 .../org/apache/tapestry5/util/EnumSelectModel.java |    4 +-
 .../apache/tapestry5/util/EnumValueEncoder.java    |    2 +-
 .../apache/tapestry5/util/PublicUtilMessages.java  |    4 +-
 .../org/apache/tapestry5/util/ResponseWrapper.java |    6 +-
 .../apache/tapestry5/util/TextStreamResponse.java  |    6 +-
 .../tapestry5/validator/CheckboxValidator.java     |    2 +-
 .../org/apache/tapestry5/validator/Checked.java    |    2 +-
 .../java/org/apache/tapestry5/validator/Email.java |    2 +-
 .../java/org/apache/tapestry5/validator/Max.java   |    2 +-
 .../org/apache/tapestry5/validator/MaxLength.java  |    2 +-
 .../java/org/apache/tapestry5/validator/Min.java   |    2 +-
 .../org/apache/tapestry5/validator/MinLength.java  |    2 +-
 .../java/org/apache/tapestry5/validator/None.java  |    2 +-
 .../org/apache/tapestry5/validator/Regexp.java     |    2 +-
 .../org/apache/tapestry5/validator/Required.java   |    2 +-
 .../corelib/components/PageLinkTest.groovy         |    2 +-
 .../app1/pages/DateFieldValidationDemo.groovy      |    1 -
 .../integration/app1/pages/ZoneFormDemo.groovy     |    2 +-
 .../integration/app5/components/Layout.groovy      |    4 +-
 .../integration/app5/pages/Error404.groovy         |    8 +-
 .../integration/app5/services/AppModule.groovy     |    6 +-
 .../appfolder/services/AppModule.groovy            |    2 +-
 .../integration/locallib/alpha/pages/Logo.groovy   |    1 -
 .../symbolparam/components/Layout.groovy           |    4 +-
 .../symbolparam/services/AppModule.groovy          |    2 +-
 .../services/ClientDataEncoderImplTest.groovy      |    2 +-
 .../services/ComponentClassResolverImplTest.groovy |    8 +-
 .../ResponseCompressionAnalyzerTest.groovy         |    9 +-
 .../assets/AssetPathConstructorImplTest.groovy     |    6 +-
 .../services/assets/CSSURLRewriterTests.groovy     |    2 +-
 .../services/assets/ModuleReaderSpec.groovy        |   10 +-
 .../ComponentPageElementResourcesImplTest.groovy   |    6 +-
 .../services/javascript/AMDWrapperTest.groovy      |    2 +-
 .../javascript/ModuleDispatcherTests.groovy        |    6 +-
 .../tapestry5/corelib/base/AbstractLinkTest.java   |    2 +-
 .../corelib/base/AbstractPropertyOutputTest.java   |    8 +-
 .../corelib/components/BeanEditorTest.java         |   10 +-
 .../corelib/components/PropertyEditorTest.java     |    8 +-
 .../tapestry5/corelib/components/SelectTest.java   |    8 +-
 .../tapestry5/corelib/components/SubmitTest.java   |    4 +-
 .../java/org/apache/tapestry5/dom/DOMTest.java     |    2 +-
 .../activationctx/services/AppModule.java          |    5 +-
 .../activationctx2/services/AppModule.java         |    5 +-
 .../integration/app1/CoreBehaviorsTests.java       |    6 +-
 .../apache/tapestry5/integration/app1/Stuff.java   |    2 +-
 .../app1/base/BaseEventHandlerDemo.java            |    2 +-
 .../integration/app1/base/GenericEditor.java       |    4 +-
 .../base/OverrideEventHandlerDemoBaseClass.java    |    2 +-
 .../integration/app1/components/Border.java        |    2 +-
 .../integration/app1/components/Count.java         |    2 +-
 .../integration/app1/data/RegistrationData.java    |    2 +-
 .../app1/mixins/TextOnlyOnDisabled.java            |    2 +-
 .../integration/app1/pages/ActionViaLinkDemo.java  |    2 +-
 .../app1/pages/AddedGridColumnsDemo.java           |    6 +-
 .../integration/app1/pages/AjaxRadioDemo.java      |    2 +-
 .../integration/app1/pages/AtInjectDemo.java       |    2 +-
 .../integration/app1/pages/AutocompleteDemo.java   |    2 +-
 .../integration/app1/pages/BlockDemo.java          |    2 +-
 .../integration/app1/pages/ChecklistDemo.java      |    2 +-
 .../integration/app1/pages/ClassLoaderInspect.java |    2 +-
 .../app1/pages/ClientPersistenceDemo.java          |    4 +-
 .../app1/pages/DateFieldAjaxFormLoop.java          |    2 +-
 .../integration/app1/pages/DateFieldDemo.java      |    2 +-
 .../app1/pages/DecorateComponentEventLinkDemo.java |    2 +-
 .../app1/pages/DecoratePageRenderLinkDemo.java     |    2 +-
 .../integration/app1/pages/EmptyGrid.java          |    8 +-
 .../integration/app1/pages/FormInjectorDemo.java   |    2 +-
 .../integration/app1/pages/FormLinkParameters.java |    2 +-
 .../integration/app1/pages/GridInLoopDemo.java     |    6 +-
 .../integration/app1/pages/GridSetDemo.java        |    2 +-
 .../integration/app1/pages/Html5DateFieldDemo.java |    2 +-
 .../tapestry5/integration/app1/pages/Index.java    |    4 +-
 .../integration/app1/pages/InjectDemo.java         |    2 +-
 .../app1/pages/LinkQueryParameters.java            |    4 +-
 .../integration/app1/pages/Localization.java       |    4 +-
 .../app1/pages/MultiZoneUpdateInsideForm.java      |    2 +-
 .../integration/app1/pages/OnActivateRedirect.java |    2 +-
 .../pages/OverrideDateFieldMessageCatalogDemo.java |    2 +-
 .../integration/app1/pages/PaletteDemo.java        |    2 +-
 .../integration/app1/pages/RadioDemo.java          |    2 +-
 .../app1/pages/RequestParameterDemo.java           |    2 +-
 .../integration/app1/pages/SelectZoneDemo.java     |    4 +-
 .../app1/pages/SessionAttributeDemo.java           |    2 +-
 .../app1/pages/SimpleTrackGridDemo.java            |    6 +-
 .../integration/app1/pages/TreeSelectionDemo.java  |    4 +-
 .../integration/app1/services/AppModule.java       |   23 +-
 .../app1/services/EnableJQueryModule.java          |    2 +-
 .../app1/services/MessageAccessImpl.java           |    2 +-
 .../app1/services/MusicLibraryParser.java          |    4 +-
 .../app1/services/ToDoDatabaseImpl.java            |    5 +-
 .../app2/pages/TestPageForHttpHeaders.java         |    2 +-
 .../integration/app2/services/LocaleAppModule.java |    2 +-
 .../integration/app3/services/AppModule.java       |   13 +-
 .../cluster/data/ImmutableByAnnotation.java        |    2 +-
 .../integration/cluster/services/AppModule.java    |    4 +-
 .../services/AppComponentEventLinkTransformer.java |    6 +-
 .../integration/linktrans/services/AppModule.java  |    7 +-
 .../services/AppPageRenderLinkTransformer.java     |    6 +-
 .../tapestry5/integration/pagelevel/FormTest.java  |    2 +-
 .../integration/pagelevel/SubmitTest.java          |    2 +-
 .../integration/pagetester/PageTesterTest.java     |    4 +-
 .../integration/reload/services/AppModule.java     |    5 +-
 .../ContextResourceSymbolProviderTest.java         |    2 +-
 .../org/apache/tapestry5/internal/DataBean.java    |    2 +-
 .../internal/PropertyOverridesImplTest.java        |    2 +-
 .../tapestry5/internal/ResponseImplTest.java       |    4 +-
 .../internal/ServletContextSymbolProviderTest.java |    3 +-
 .../internal/SingleKeySymbolProviderTest.java      |    1 +
 .../internal/TapestryAppInitializerTest.java       |    1 +
 .../internal/TapestryInternalUtilsTest.java        |   10 +-
 .../internal/beaneditor/BeanModelUtilsTest.java    |    5 +-
 .../MessagesAnnotationConstraintGeneratorTest.java |    2 +-
 .../ValidateAnnotationConstraintGeneratorTest.java |    2 +-
 .../internal/bindings/BindingFactoryTest.java      |    6 +-
 .../internal/bindings/PropBindingFactoryTest.java  |    6 +-
 .../bindings/ValidateBindingFactoryTest.java       |    8 +-
 .../grid/CollectionGridDataSourceTest.java         |    8 +-
 .../model/MutableComponentModelImplTest.java       |    4 +-
 .../services/AbstractBeanModelSourceImplTest.java  |   15 +-
 .../services/AddTransformPagesToCISModule.java     |    4 +-
 .../services/AnnotationDataTypeAnalyzerTest.java   |    5 +-
 .../services/ApplicationStateManagerImplTest.java  |    9 +-
 ...tionStatePersistenceStrategySourceImplTest.java |    3 +-
 .../internal/services/AssetObjectProviderTest.java |    8 +-
 .../internal/services/AssetSourceImplTest.java     |    2 +-
 .../internal/services/BaseURLSourceImplTest.java   |    5 +-
 .../internal/services/BeanBlockSourceImplTest.java |   13 +-
 .../services/BeanModelSourceBuilderTest.java       |    4 +-
 .../internal/services/BeanModelSourceImplTest.java |    2 +-
 .../internal/services/BindingSourceImplTest.java   |   10 +-
 .../ClasspathAssetAliasManagerImplTest.java        |    6 +-
 .../ClientPersistentFieldStorageImplTest.java      |   10 +-
 .../services/ComponentDefaultProviderImplTest.java |    8 +-
 .../services/ComponentEventDispatcherTest.java     |   12 +-
 .../ComponentEventLinkEncoderImplTest.java         |   17 +-
 .../ComponentInstantiatorSourceImplTest.java       |    2 +-
 .../services/ComponentMessagesSourceImplTest.java  |    4 +-
 .../internal/services/ComponentSourceImplTest.java |    2 +-
 .../services/ComponentTemplateSourceImplTest.java  |    4 +-
 .../internal/services/ContextImplTest.java         |    5 +-
 .../internal/services/ContextResourceTest.java     |    4 +-
 .../internal/services/CookiesImplTest.java         |    2 +-
 .../DefaultRequestExceptionHandlerTest.java        |    8 +-
 .../services/EndOfRequestEventHubImplTest.java     |    4 +-
 .../internal/services/EnvironmentImplTest.java     |    6 +-
 .../EnvironmentalShadowBuilderImplTest.java        |    2 +-
 .../internal/services/EventContextTests.java       |    2 +-
 .../services/FieldTranslatorSourceImplTest.java    |    6 +-
 .../services/FieldValidationSupportImplTest.java   |    4 +-
 .../FieldValidatorDefaultSourceImplTest.java       |    4 +-
 .../internal/services/FieldValidatorImplTest.java  |    2 +-
 .../services/FieldValidatorSourceImplTest.java     |    8 +-
 .../services/FlashPersistentFieldStrategyTest.java |    4 +-
 .../services/ForceDevelopmentModeModule.java       |    9 +-
 .../internal/services/IgnoredPathsFilterTest.java  |    6 +-
 .../JSONArrayEventResultProcessorTest.java         |    2 +-
 .../tapestry5/internal/services/LinkImplTest.java  |    8 +-
 .../internal/services/LinkSourceImplTest.java      |   14 +-
 .../services/LocalizationSetterImplTest.java       |    6 +-
 .../internal/services/MetaDataLocatorImplTest.java |    8 +-
 .../services/NullFieldStrategySourceImplTest.java  |    4 +-
 .../PageActivationContextCollectorImplTest.java    |    2 +-
 .../services/PageElementFactoryImplTest.java       |    6 +-
 .../services/PageRenderLinkSourceImplTest.java     |    2 +-
 .../services/PageRenderRequestHandlerImplTest.java |    2 +-
 .../services/PersistentFieldManagerImplTest.java   |    8 +-
 .../services/PersistentLocaleImplTest.java         |    2 +-
 .../services/PropertyConduitSourceImplTest.java    |   13 +-
 .../internal/services/RequestImplTest.java         |   10 +-
 .../services/RequestSecurityManagerImplTest.java   |   11 +-
 .../services/ResponseRendererImplTest.java         |    4 +-
 .../ServiceAnnotationObjectProviderTest.java       |    6 +-
 ...ionApplicationStatePersistenceStrategyTest.java |    4 +-
 .../internal/services/SessionImplTest.java         |    7 +-
 .../SessionPersistentFieldStrategyTest.java        |    4 +-
 .../internal/services/StaticFilesFilterTest.java   |    7 +-
 .../internal/services/TemplateParserImplTest.java  |   10 +-
 .../TranslatorAlternatesSourceImplTest.java        |    2 +-
 .../services/TranslatorSourceImplTest.java         |    4 +-
 .../internal/services/XMLTokenStreamTests.java     |    4 +-
 .../assets/ContextAssetRequestHandlerTest.java     |    2 +-
 .../messages/PropertiesFileParserImplTest.java     |    2 +-
 .../internal/structure/BlockImplTest.java          |    4 +-
 .../structure/ExpansionPageElementImplTest.java    |    2 +-
 .../InternalComponentResourcesImplTest.java        |    2 +-
 .../internal/test/InternalBaseTestCase.java        |   35 +-
 .../tapestry5/internal/util/IntegerRangeTest.java  |    1 +
 .../tapestry5/internal/util/MultiKeyTest.java      |    1 +
 .../org/apache/tapestry5/root/ContentTypeTest.java |    4 +-
 .../apache/tapestry5/root/PageCallbackTest.java    |    4 +-
 .../tapestry5/services/LibraryMappingTest.java     |    2 +-
 .../apache/tapestry5/util/EnumSelectModelTest.java |    2 +-
 .../tapestry5/util/EnumValueEncoderTest.java       |   12 +-
 .../org/apache/tapestry5/validator/EmailTest.java  |    2 +-
 .../apache/tapestry5/validator/MaxLengthTest.java  |    2 +-
 .../org/apache/tapestry5/validator/MaxTest.java    |    2 +-
 .../apache/tapestry5/validator/MinLengthTest.java  |    2 +-
 .../org/apache/tapestry5/validator/MinTest.java    |    2 +-
 .../org/apache/tapestry5/validator/RegexpTest.java |    2 +-
 .../apache/tapestry5/validator/RequiredTest.java   |    2 +-
 .../main/java/org/apache/tapestry5/func/Tuple.java |    4 +-
 .../java/org/apache/tapestry5/func/ZippedFlow.java |    4 +-
 tapestry-hibernate-core/build.gradle               |    8 +-
 .../internal/DefaultHibernateConfigurer.java       |   41 +
 .../internal/HibernateSessionManagerImpl.java      |   73 +
 .../internal/HibernateSessionSourceImpl.java       |   86 +
 .../internal/HibernateTransactionAdvisorImpl.java  |   72 +
 .../HibernateTransactionDecoratorImpl.java         |   51 +
 .../internal/PackageNameHibernateConfigurer.java   |   62 +
 .../hibernate/modules/HibernateCoreModule.java     |    6 +-
 .../hibernate/DefaultHibernateConfigurer.java      |   41 -
 .../hibernate/HibernateSessionManagerImpl.java     |   73 -
 .../hibernate/HibernateSessionSourceImpl.java      |   86 -
 .../hibernate/HibernateTransactionAdvisorImpl.java |   72 -
 .../HibernateTransactionDecoratorImpl.java         |   51 -
 .../hibernate/PackageNameHibernateConfigurer.java  |   62 -
 .../DefaultHibernateConfigurerFilterTest.java      |    3 +-
 .../hibernate/HibernateSessionSourceImplTest.java  |    7 +-
 .../HibernateTransactionDecoratorImplTest.java     |    4 +-
 tapestry-hibernate/build.gradle                    |    2 +-
 .../corelib/pages/HibernateStatistics.java         |   89 -
 .../hibernate/HibernateGridDataSource.java         |  142 -
 .../hibernate/HibernatePersistenceConstants.java   |   33 -
 .../hibernate/modules/HibernateModule.java         |  191 --
 .../hibernate/web/HibernateGridDataSource.java     |  142 +
 .../web/HibernatePersistenceConstants.java         |   33 +
 .../hibernate/web/internal/CommitAfterWorker.java  |   81 +
 .../EntityApplicationStatePersistenceStrategy.java |   78 +
 .../internal/EntityPersistentFieldStrategy.java    |   71 +
 .../web/internal/HibernateEntityValueEncoder.java  |  102 +
 .../hibernate/web/internal/PersistedEntity.java    |   62 +
 .../web/internal/PersistedTransientEntity.java     |   41 +
 .../hibernate/web/internal/SessionRestorable.java  |   30 +
 .../hibernate/web/internal/package-info.java       |   18 +
 .../hibernate/web/modules/HibernateModule.java     |  199 ++
 .../hibernate/web/pages/HibernateStatistics.java   |   89 +
 .../internal/hibernate/CommitAfterWorker.java      |   81 -
 .../EntityApplicationStatePersistenceStrategy.java |   78 -
 .../hibernate/EntityPersistentFieldStrategy.java   |   71 -
 .../hibernate/HibernateEntityValueEncoder.java     |  102 -
 .../internal/hibernate/PersistedEntity.java        |   62 -
 .../hibernate/PersistedTransientEntity.java        |   41 -
 .../internal/hibernate/SessionRestorable.java      |   30 -
 .../tapestry5/internal/hibernate/package-info.java |   18 -
 .../web}/pages/HibernateStatistics.properties      |    0
 .../web}/pages/HibernateStatistics.tml             |    0
 .../TapestryHibernateIntegrationTests.java         |  167 --
 .../TapestryHibernateIntegrationTests.java         |  167 ++
 .../EntityPersistentFieldStrategyTest.java         |   98 +
 .../internal/HibernateEntityValueEncoderTest.java  |  124 +
 .../hibernate/web/internal/SampleEntity.java       |   38 +
 .../EntityPersistentFieldStrategyTest.java         |   96 -
 .../hibernate/HibernateEntityValueEncoderTest.java |  123 -
 .../tapestry5/internal/hibernate/SampleEntity.java |   38 -
 .../test/java/org/example/app0/pages/GridDemo.java |    2 +-
 .../java/org/example/app0/pages/SSOEntity.java     |    4 +-
 .../java/org/example/app0/services/AppModule.java  |   12 +-
 tapestry-http/build.gradle                         |   31 +
 .../tapestry-core/project.properties               |    0
 .../org/apache/tapestry5/http/ContentType.java     |  215 ++
 .../main/java/org/apache/tapestry5/http/Link.java  |  180 ++
 .../org/apache/tapestry5/http/LinkSecurity.java    |   61 +
 .../http/OptimizedSessionPersistedObject.java      |   34 +
 .../org/apache/tapestry5/http/TapestryFilter.java  |  217 ++
 .../tapestry5/http/TapestryHttpConstants.java      |   30 +
 .../http/TapestryHttpSymbolConstants.java          |  136 +
 .../http/internal/AbstractContributionDef.java     |   42 +
 .../internal/ServletContextSymbolProvider.java     |   44 +
 .../http/internal/SingleKeySymbolProvider.java     |   41 +
 .../http/internal/SyntheticModuleDef.java          |   85 +
 .../SyntheticSymbolSourceContributionDef.java      |   57 +
 .../http/internal/TapestryAppInitializer.java      |  272 ++
 .../internal/TapestryHttpInternalConstants.java    |   45 +
 .../http/internal/TapestryHttpInternalSymbols.java |   30 +
 .../internal/gzip/BufferedGZipOutputStream.java    |  146 ++
 .../http/internal/gzip/GZIPEnabledResponse.java    |   72 +
 .../tapestry5/http/internal/gzip/GZipFilter.java   |   62 +
 .../internal/services/ApplicationGlobalsImpl.java  |   47 +
 .../http/internal/services/BaseURLSourceImpl.java  |   86 +
 .../internal/services/ClusteredSessionImpl.java    |  106 +
 .../http/internal/services/ContextImpl.java        |  110 +
 .../DefaultSessionPersistedObjectAnalyzer.java     |   43 +
 .../OptimizedSessionPersistedObjectAnalyzer.java   |   26 +
 .../http/internal/services/RequestGlobalsImpl.java |   84 +
 .../http/internal/services/RequestImpl.java        |  259 ++
 .../services/ResponseCompressionAnalyzerImpl.java  |   83 +
 .../http/internal/services/ResponseImpl.java       |  135 +
 .../http/internal/services/SessionImpl.java        |  122 +
 .../http/internal/services/SessionLock.java        |   36 +
 .../internal/services/TapestrySessionFactory.java  |   29 +
 .../services/TapestrySessionFactoryImpl.java       |  185 ++
 .../internal/util/DelegatingSymbolProvider.java    |   47 +
 .../tapestry5/http/modules/TapestryHttpModule.java |  411 +++
 .../http/services/ApplicationGlobals.java          |   31 +
 .../http/services/ApplicationInitializer.java      |   29 +
 .../services/ApplicationInitializerFilter.java     |   23 +
 .../tapestry5/http/services/BaseURLSource.java     |   51 +
 .../http/services/CompressionAnalyzer.java         |   39 +
 .../apache/tapestry5/http/services/Context.java    |   82 +
 .../apache/tapestry5/http/services/Dispatcher.java |   39 +
 .../http/services/HttpServletRequestFilter.java    |   36 +
 .../http/services/HttpServletRequestHandler.java   |   36 +
 .../apache/tapestry5/http/services/Request.java    |  218 ++
 .../tapestry5/http/services/RequestFilter.java     |   30 +
 .../tapestry5/http/services/RequestGlobals.java    |   68 +
 .../tapestry5/http/services/RequestHandler.java    |   33 +
 .../apache/tapestry5/http/services/Response.java   |  182 ++
 .../http/services/ResponseCompressionAnalyzer.java |   43 +
 .../services/ServletApplicationInitializer.java    |   29 +
 .../ServletApplicationInitializerFilter.java       |   30 +
 .../apache/tapestry5/http/services/Session.java    |   95 +
 .../services/SessionPersistedObjectAnalyzer.java   |   47 +
 .../http/test/TapestryHttpIntegrationTests.java    |   33 +
 .../apache/tapestry5/http/test/TestDispatcher.java |   38 +
 .../http/test/TestHttpServletRequestFilter.java    |   25 +
 .../tapestry5/http/test/TestRequestFilter.java     |   24 +
 .../tapestry5/http/test/services/AppModule.java    |   35 +
 tapestry-http/src/test/webapp/WEB-INF/web.xml      |   35 +
 tapestry-http/src/test/webapp/index.html           |    7 +
 tapestry-http/src/test/webapp/longfile.txt         | 2768 ++++++++++++++++++++
 .../t5internal/modules/InternalTestModule.java     |    2 +-
 .../tapestry5/jcache/internal/CacheLookupUtil.java |    4 +-
 .../tapestry5/jcache/module/JCacheModule.java      |    2 +-
 .../apache/tapestry5/ioc/junit/MapModuleDef.java   |    2 +-
 tapestry-ioc/build.gradle                          |    1 +
 .../org/apache/tapestry5/ioc/AnnotationAccess.java |    2 +
 .../org/apache/tapestry5/ioc/BaseLocatable.java    |    5 +-
 .../java/org/apache/tapestry5/ioc/IOCSymbols.java  |    2 +-
 .../org/apache/tapestry5/ioc/IOCUtilities.java     |    4 +-
 .../org/apache/tapestry5/ioc/ObjectProvider.java   |   44 -
 .../org/apache/tapestry5/ioc/OrderConstraint.java  |    2 +
 .../tapestry5/ioc/OrderConstraintBuilder.java      |    2 +
 .../java/org/apache/tapestry5/ioc/Orderable.java   |    2 +-
 .../java/org/apache/tapestry5/ioc/Registry.java    |    1 +
 .../org/apache/tapestry5/ioc/RegistryBuilder.java  |   15 +-
 .../java/org/apache/tapestry5/ioc/ReloadAware.java |    3 +-
 .../org/apache/tapestry5/ioc/ServiceLifecycle.java |    2 +
 .../org/apache/tapestry5/ioc/ServiceResources.java |    3 +-
 .../apache/tapestry5/ioc/annotations/Marker.java   |   48 -
 .../apache/tapestry5/ioc/annotations/Scope.java    |   51 -
 .../apache/tapestry5/ioc/def/ContributionDef.java  |    4 +-
 .../org/apache/tapestry5/ioc/def/ServiceDef.java   |    2 +-
 .../org/apache/tapestry5/ioc/def/StartupDef.java   |    2 +-
 .../ioc/internal/AbstractConfigurationImpl.java    |    2 +-
 .../AbstractMethodInvokingInstrumenter.java        |    9 +-
 .../internal/AbstractReloadableObjectCreator.java  |   10 +-
 .../ioc/internal/AbstractServiceCreator.java       |    8 +-
 .../ioc/internal/AbstractServiceInstrumenter.java  |    4 +-
 .../tapestry5/ioc/internal/AdvisorDefImpl.java     |    2 +-
 .../ioc/internal/AdvisorStackBuilder.java          |    2 +-
 .../ioc/internal/AnnotationAccessImpl.java         |    2 +-
 .../tapestry5/ioc/internal/ConfigurationType.java  |    6 +-
 .../ioc/internal/ConstructorServiceCreator.java    |    2 +-
 .../ioc/internal/ContributionDefImpl.java          |   14 +-
 .../tapestry5/ioc/internal/DecoratorDefImpl.java   |    2 +-
 .../ioc/internal/DefaultModuleDefImpl.java         |   11 +-
 .../apache/tapestry5/ioc/internal/IOCMessages.java |    6 +-
 .../ioc/internal/InterceptorStackBuilder.java      |    2 +-
 .../tapestry5/ioc/internal/InternalRegistry.java   |    9 +-
 .../internal/LifecycleWrappedServiceCreator.java   |    2 +-
 .../apache/tapestry5/ioc/internal/ModuleImpl.java  |   20 +-
 .../ioc/internal/ObjectCreatorSource.java          |    2 +-
 .../tapestry5/ioc/internal/ObjectLocatorImpl.java  |    6 +-
 .../tapestry5/ioc/internal/OperationException.java |    2 +-
 .../ioc/internal/OperationTrackerImpl.java         |    6 +-
 .../internal/OperationTrackingObjectCreator.java   |    2 +-
 .../ioc/internal/OrderedConfigurationOverride.java |    2 +-
 .../RecursiveServiceCreationCheckWrapper.java      |    4 +-
 .../tapestry5/ioc/internal/RegistryImpl.java       |   47 +-
 .../tapestry5/ioc/internal/RegistryWrapper.java    |    4 +-
 .../ioc/internal/ReloadableObjectCreator.java      |    4 +-
 .../internal/ReloadableObjectCreatorSource.java    |    6 +-
 ...loadableServiceImplementationObjectCreator.java |    4 +-
 .../ioc/internal/ServiceActivityTrackerImpl.java   |    3 +-
 .../tapestry5/ioc/internal/ServiceAdvisorImpl.java |    4 +-
 .../tapestry5/ioc/internal/ServiceBinderImpl.java  |   11 +-
 .../ioc/internal/ServiceBuilderMethodInvoker.java  |    4 +-
 .../ioc/internal/ServiceDecoratorImpl.java         |    4 +-
 .../tapestry5/ioc/internal/ServiceDefImpl.java     |    6 +-
 .../ioc/internal/ServiceResourcesImpl.java         |    6 +-
 .../ioc/internal/SingletonServiceLifecycle.java    |    4 +-
 .../tapestry5/ioc/internal/StartupDefImpl.java     |    6 +-
 .../tapestry5/ioc/internal/TypeCoercerProxy.java   |    2 +-
 .../ioc/internal/TypeCoercerProxyImpl.java         |    4 +-
 .../internal/ValidatingConfigurationWrapper.java   |    6 +-
 .../ValidatingMappedConfigurationWrapper.java      |   10 +-
 .../ValidatingOrderedConfigurationWrapper.java     |    8 +-
 .../services/AbtractAspectInterceptorBuilder.java  |    2 +-
 .../ioc/internal/services/AspectDecoratorImpl.java |    2 +-
 .../services/AspectInterceptorBuilderImpl.java     |    5 +-
 .../internal/services/AutobuildObjectProvider.java |    8 +-
 .../ioc/internal/services/BridgeBuilder.java       |    4 +-
 .../internal/services/CachingObjectCreator.java    |    8 +-
 .../ioc/internal/services/ChainBuilderImpl.java    |    2 +-
 .../services/ClasspathResourceSymbolProvider.java  |    2 +-
 .../internal/services/ClasspathScannerImpl.java    |    4 +-
 .../services/DefaultImplementationBuilderImpl.java |    4 +-
 .../internal/services/ExceptionAnalyzerImpl.java   |    9 +-
 .../internal/services/ExceptionTrackerImpl.java    |    2 +-
 .../internal/services/JustInTimeObjectCreator.java |    3 +-
 .../ioc/internal/services/LazyAdvisorImpl.java     |    2 +-
 .../services/MasterObjectProviderImpl.java         |    6 +-
 .../ioc/internal/services/MethodIterator.java      |    6 +-
 .../internal/services/ParallelExecutorImpl.java    |    2 +-
 .../services/PerThreadServiceLifecycle.java        |    4 +-
 .../internal/services/PerthreadManagerImpl.java    |    4 +-
 .../ioc/internal/services/PipelineBuilderImpl.java |    2 +-
 .../services/PropertyShadowBuilderImpl.java        |    5 +-
 .../internal/services/RegistryShutdownHubImpl.java |    5 +-
 .../ioc/internal/services/RegistryStartup.java     |    2 +-
 .../internal/services/ResourceSymbolProvider.java  |    6 +-
 .../ioc/internal/services/ServiceOverrideImpl.java |    6 +-
 .../internal/services/StaticObjectProvider.java    |    6 +-
 .../ioc/internal/services/StrategyBuilderImpl.java |    4 +-
 .../internal/services/SymbolObjectProvider.java    |    8 +-
 .../ioc/internal/services/SymbolSourceImpl.java    |    6 +-
 .../internal/services/SystemEnvSymbolProvider.java |    2 +-
 .../ioc/internal/services/ThunkCreatorImpl.java    |    6 +-
 .../internal/services/UpdateListenerHubImpl.java   |    6 +-
 .../ioc/internal/services/ValueObjectProvider.java |    8 +-
 .../services/cron/PeriodicExecutorImpl.java        |    2 +-
 .../ioc/internal/util/AbstractResource.java        |    4 +-
 .../ioc/internal/util/ClasspathResource.java       |    4 +-
 .../ioc/internal/util/ConstructionPlan.java        |    3 +-
 .../ioc/internal/util/ConstructorInvoker.java      |    4 +-
 .../ioc/internal/util/DependencyNode.java          |    4 +-
 .../ioc/internal/util/IdToDependencyNode.java      |    4 +-
 .../tapestry5/ioc/internal/util/InternalUtils.java |   25 +-
 .../tapestry5/ioc/internal/util/LocationImpl.java  |    8 +-
 .../tapestry5/ioc/internal/util/MethodInvoker.java |    4 +-
 .../tapestry5/ioc/internal/util/OneShotLock.java   |    2 +
 .../tapestry5/ioc/internal/util/Orderer.java       |    6 +-
 .../ioc/internal/util/URLChangeTracker.java        |    1 +
 .../tapestry5/ioc/internal/util/UtilMessages.java  |    3 +-
 .../tapestry5/ioc/modules/TapestryIOCModule.java   |   84 +-
 .../ioc/services/MasterObjectProvider.java         |    8 +-
 .../tapestry5/ioc/services/PerthreadManager.java   |    2 +-
 .../tapestry5/ioc/services/ServiceOverride.java    |    2 +-
 .../tapestry5/ioc/services/StrategyBuilder.java    |    4 +-
 .../tapestry5/ioc/services/ThunkCreator.java       |    4 +-
 .../tapestry5/ioc/services/UpdateListener.java     |   30 +
 .../tapestry5/ioc/services/UpdateListenerHub.java  |   49 +
 .../org/apache/tapestry5/ioc/test/IOCTestCase.java |   18 +-
 .../org/apache/tapestry5/ioc/util/IdAllocator.java |    2 +-
 .../apache/tapestry5/services/UpdateListener.java  |   30 -
 .../tapestry5/services/UpdateListenerHub.java      |   49 -
 .../src/test/groovy/ioc/specs/AdvisorsSpec.groovy  |   14 +-
 .../specs/AspectInterceptorBuilderImplSpec.groovy  |    3 +-
 .../src/test/groovy/ioc/specs/AutobuildSpec.groovy |   20 +-
 .../test/groovy/ioc/specs/BaseLocatableSpec.groovy |    5 +-
 .../test/groovy/ioc/specs/BridgeBuilderSpec.groovy |   15 +-
 .../groovy/ioc/specs/CaseInsensitiveMapSpec.groovy |    3 +-
 .../ioc/specs/ClassNameLocatorImplSpec.groovy      |    4 +-
 .../groovy/ioc/specs/ConcurrentBarrierSpec.groovy  |    5 +-
 .../groovy/ioc/specs/ConfigurationsSpec.groovy     |   51 +-
 .../ioc/specs/ContributionDefImplSpec.groovy       |   16 +-
 .../test/groovy/ioc/specs/DecoratorsSpec.groovy    |   16 +-
 .../ioc/specs/DefaultModuleDefImplSpec.groovy      |   53 +-
 .../src/test/groovy/ioc/specs/EagerLoadSpec.groovy |    2 +-
 .../ioc/specs/ExceptionAnalyzerImplSpec.groovy     |    4 +-
 .../groovy/ioc/specs/ExceptionUtilsSpec.groovy     |    9 +-
 .../ioc/specs/FilterMethodAnalyzerSpec.groovy      |    5 +-
 .../groovy/ioc/specs/GeneralIntegrationSpec.groovy |    8 +-
 .../test/groovy/ioc/specs/GenericUtilsSpec.groovy  |    9 +-
 .../groovy/ioc/specs/InheritanceSearchSpec.groovy  |    9 +-
 .../src/test/groovy/ioc/specs/InjectionSpec.groovy |   18 +-
 .../test/groovy/ioc/specs/InternalUtilsSpec.groovy |   26 +-
 .../ioc/specs/JustInTimeObjectCreatorSpec.groovy   |    2 +-
 .../groovy/ioc/specs/LazyAdvisorImplSpec.groovy    |    6 +-
 .../ioc/specs/LoggingDecoratorImplSpec.groovy      |    4 +-
 .../ioc/specs/MasterObjectProviderImplSpec.groovy  |    7 +-
 .../ioc/specs/MessageFormatterImplSpec.groovy      |    3 +-
 .../test/groovy/ioc/specs/MessagesImplSpec.groovy  |    7 +-
 .../specs/MethodInvocationGetAnnotationSpec.groovy |   12 +-
 .../test/groovy/ioc/specs/ModuleImplSpec.groovy    |   14 +-
 .../ioc/specs/ModuleInstantiationSpec.groovy       |    4 +-
 .../ioc/specs/NonParallelExecutorSpec.groovy       |    3 +-
 .../test/groovy/ioc/specs/OneShotLockSpec.groovy   |    4 +-
 .../groovy/ioc/specs/OperationAdvisorSpec.groovy   |    5 +-
 .../groovy/ioc/specs/OperationTrackerSpec.groovy   |   10 -
 .../groovy/ioc/specs/ParallelExecutorSpec.groovy   |    7 +-
 .../groovy/ioc/specs/PerThreadScopeSpec.groovy     |    6 +-
 .../ioc/specs/PipelineBuilderImplSpec.groovy       |    5 +-
 .../groovy/ioc/specs/PropertyAccessImplSpec.groovy |   20 +-
 ...RecursiveServiceCreationCheckWrapperSpec.groovy |    2 +-
 .../groovy/ioc/specs/RegistryBuilderSpec.groovy    |   11 +-
 ...RegistryConstructionAndRuntimeErrorsSpec.groovy |   17 +-
 .../src/test/groovy/ioc/specs/RegistrySpec.groovy  |   20 +-
 .../groovy/ioc/specs/RegistryStartupSpec.groovy    |    3 +-
 .../src/test/groovy/ioc/specs/ReloadSpec.groovy    |    3 +-
 .../ioc/specs/ResourceSymbolProviderSpec.groovy    |    3 +-
 .../ioc/specs/ServiceActivityScoreboardSpec.groovy |    9 +-
 .../test/groovy/ioc/specs/ServiceBinderSpec.groovy |    4 +-
 .../specs/ServiceBuilderMethodInvokerSpec.groovy   |   10 +-
 .../ioc/specs/ServiceCreatorGenericsSpec.groovy    |   11 +-
 .../test/groovy/ioc/specs/ServiceLookupSpec.groovy |   17 +-
 .../test/groovy/ioc/specs/ServiceProxySpec.groovy  |   12 +-
 .../ioc/specs/SingletonServiceLifecycleSpec.groovy |    3 +-
 .../src/test/groovy/ioc/specs/StackSpec.groovy     |    2 +-
 .../groovy/ioc/specs/StrategyRegistrySpec.groovy   |    5 +-
 .../ioc/specs/StringToEnumCoercionSpec.groovy      |    5 +-
 .../src/test/groovy/ioc/specs/TestBaseSpec.groovy  |    5 +-
 .../test/groovy/ioc/specs/TimeIntervalSpec.groovy  |    3 +-
 .../test/groovy/ioc/specs/TypeCoercerSpec.groovy   |    4 +-
 .../ioc/specs/UpdateListenerHubImplSpec.groovy     |    5 +-
 .../ValidatingConfigurationWrapperSpec.groovy      |    5 +-
 ...ValidatingMappedConfigurationWrapperSpec.groovy |   10 +-
 ...alidatingOrderedConfigurationWrapperSpec.groovy |    5 +-
 .../ioc/specs/ValueObjectProviderSpec.groovy       |    9 +-
 .../test/java/com/example/ExtraRunnableModule.java |    2 +-
 .../org/apache/tapestry5/ioc/AdviceDemoModule.java |   71 -
 .../AdviceMethodMissingAdvisorParameterModule.java |   26 -
 .../tapestry5/ioc/AutobuildInjectionModule.java    |   30 -
 .../org/apache/tapestry5/ioc/AutobuildModule.java  |   23 -
 .../org/apache/tapestry5/ioc/BarneyModule.java     |  118 -
 .../java/org/apache/tapestry5/ioc/BlueMarker.java  |   33 -
 .../ioc/CaseInsensitiveContributeMethodModule.java |   23 -
 .../ioc/CatchAllServiceConfigurationListener.java  |   68 -
 .../ioc/ConcreteServiceBuilderModule.java          |   26 -
 .../tapestry5/ioc/ConfigurationOverrideModule.java |   30 -
 .../tapestry5/ioc/ContributeByClassModule.java     |   75 -
 .../ioc/ContributedValueCoercionModule.java        |   31 -
 .../tapestry5/ioc/ContributionOrderModule.java     |   34 -
 .../tapestry5/ioc/ContributionOrderModule2.java    |   34 -
 .../tapestry5/ioc/ContributionOrderModule3.java    |   34 -
 .../tapestry5/ioc/ContributionOrderModule4.java    |   34 -
 .../tapestry5/ioc/ConventionFailureModule.java     |    9 -
 .../org/apache/tapestry5/ioc/ConventionModule.java |    9 -
 .../ConventionModuleImplementationNotFound.java    |    9 -
 .../apache/tapestry5/ioc/CountingGreeterImpl.java  |   30 -
 .../org/apache/tapestry5/ioc/CyclicMOPModule.java  |   49 -
 .../org/apache/tapestry5/ioc/DecoratorList.java    |   27 -
 .../apache/tapestry5/ioc/DefaultMethodService.java |   13 -
 .../ioc/DuplicateConfigurationOverrideModule.java  |   29 -
 .../apache/tapestry5/ioc/DuplicateFredModule.java  |   23 -
 .../tapestry5/ioc/DuplicateServiceTypeModule.java  |   29 -
 .../org/apache/tapestry5/ioc/EagerLoadModule.java  |   33 -
 .../org/apache/tapestry5/ioc/EagerLoadService.java |   20 -
 .../apache/tapestry5/ioc/EagerLoadServiceImpl.java |   26 -
 .../tapestry5/ioc/EagerProxyReloadModule.java      |   25 -
 .../apache/tapestry5/ioc/ExtraMethodsModule.java   |   33 -
 .../tapestry5/ioc/FailInConstructorRunnable.java   |   29 -
 .../ioc/FailedConfigurationOverrideModule.java     |   24 -
 .../ioc/FieldResourceInjectionModule.java          |   31 -
 .../apache/tapestry5/ioc/FieldResourceService.java |   24 -
 .../tapestry5/ioc/FieldResourceServiceImpl.java    |   47 -
 .../java/org/apache/tapestry5/ioc/FredModule.java  |  149 --
 .../java/org/apache/tapestry5/ioc/GreenMarker.java |   33 -
 .../java/org/apache/tapestry5/ioc/Greeter.java     |   20 -
 .../org/apache/tapestry5/ioc/GreeterModule.java    |  105 -
 .../org/apache/tapestry5/ioc/GreeterModule2.java   |   45 -
 .../ioc/GreeterServiceOverrideModule.java          |   42 -
 .../org/apache/tapestry5/ioc/HelterModule.java     |   25 -
 .../apache/tapestry5/ioc/IndirectResources.java    |   40 -
 .../java/org/apache/tapestry5/ioc/Indirection.java |   23 -
 .../org/apache/tapestry5/ioc/InjectionCheck.java   |   24 -
 .../apache/tapestry5/ioc/InjectionCheckImpl.java   |   46 -
 .../apache/tapestry5/ioc/InjectionCheckModule.java |   35 -
 .../java/org/apache/tapestry5/ioc/IntHolder.java   |   20 -
 .../org/apache/tapestry5/ioc/IntHolderImpl.java    |   32 -
 .../tapestry5/ioc/IntegrationTestFixture.java      |    9 -
 .../tapestry5/ioc/InvalidContributeDefModule.java  |   26 -
 .../tapestry5/ioc/InvalidContributeDefModule2.java |   55 -
 .../tapestry5/ioc/InvalidContributeDefModule3.java |   48 -
 .../java/org/apache/tapestry5/ioc/LocalModule.java |   49 -
 .../org/apache/tapestry5/ioc/MarkerModule.java     |   37 -
 .../org/apache/tapestry5/ioc/MasterModule.java     |   26 -
 .../org/apache/tapestry5/ioc/NameListHolder.java   |   27 -
 .../org/apache/tapestry5/ioc/NameListHolder2.java  |   27 -
 .../NoImplementationClassForSimpleIdModule.java    |   30 -
 .../tapestry5/ioc/NonProxiedServiceModule.java     |   23 -
 .../tapestry5/ioc/NonVoidAdvisorMethodModule.java  |   23 -
 .../tapestry5/ioc/OptionalContributionModule.java  |   25 -
 .../org/apache/tapestry5/ioc/OrderedService.java   |   34 -
 .../org/apache/tapestry5/ioc/PerThreadModule.java  |   27 -
 .../java/org/apache/tapestry5/ioc/Pingable.java    |   23 -
 .../org/apache/tapestry5/ioc/PingableImpl.java     |    6 -
 .../tapestry5/ioc/PostInjectionMethodModule.java   |   23 -
 .../tapestry5/ioc/PreventDecorationModule.java     |   39 -
 .../tapestry5/ioc/RecursiveConstructorModule.java  |   41 -
 .../org/apache/tapestry5/ioc/RedGreeterImpl.java   |   29 -
 .../java/org/apache/tapestry5/ioc/RedMarker.java   |   33 -
 .../tapestry5/ioc/RegistryBuilderTestModule.java   |   33 -
 .../test/java/org/apache/tapestry5/ioc/Rocket.java |   20 -
 .../java/org/apache/tapestry5/ioc/RocketImpl.java  |   27 -
 .../apache/tapestry5/ioc/ScopeMismatchModule.java  |   26 -
 .../ioc/ServiceBuilderAutobuilderModule.java       |   28 -
 .../apache/tapestry5/ioc/ServiceBuilderModule.java |   50 -
 .../org/apache/tapestry5/ioc/ServiceIdGreeter.java |   34 -
 .../test/java/org/apache/tapestry5/ioc/Sizer.java  |   24 -
 .../org/apache/tapestry5/ioc/SkelterModule.java    |   24 -
 .../tapestry5/ioc/SpecificDecoratorModule.java     |   30 -
 .../ioc/SpecificDecoratorModuleAgain.java          |   34 -
 .../test/java/org/apache/tapestry5/ioc/Square.java |   23 -
 .../org/apache/tapestry5/ioc/StaticModule.java     |  108 -
 .../org/apache/tapestry5/ioc/StringHolder.java     |   22 -
 .../org/apache/tapestry5/ioc/StringHolderImpl.java |   39 -
 .../org/apache/tapestry5/ioc/StringLookup.java     |   30 -
 .../apache/tapestry5/ioc/StringTransformer.java    |   21 -
 .../tapestry5/ioc/SymbolExpandingTransformer.java  |   30 -
 .../apache/tapestry5/ioc/UnbuildablePingable.java  |   31 -
 .../tapestry5/ioc/UnknownColorGreeterImpl.java     |   26 -
 .../apache/tapestry5/ioc/UnknownScopeModule.java   |   26 -
 .../tapestry5/ioc/UppercaseStringTransformer.java  |   24 -
 .../org/apache/tapestry5/ioc/YellowMarker.java     |   31 -
 .../internal/AbstractAutobuildServiceModule.java   |   25 -
 .../ioc/internal/AbstractRunnableService.java      |   29 -
 .../tapestry5/ioc/internal/AdviceModule.java       |   53 -
 .../ioc/internal/AdviseByMarkerModule.java         |   92 -
 .../ioc/internal/AdviseByMarkerModule2.java        |   82 -
 .../tapestry5/ioc/internal/AlphabetModule.java     |   73 -
 .../tapestry5/ioc/internal/AlphabetModule2.java    |   86 -
 .../ioc/internal/AnnotatedServiceInterface.java    |   30 -
 .../internal/AnnotatedServiceInterfaceImpl.java    |   24 -
 .../ioc/internal/ArrayDecoratorMethodModule.java   |   27 -
 .../ioc/internal/BuilderMethodModule.java          |   23 -
 .../ioc/internal/ComplexAutobuildModule.java       |   27 -
 .../ioc/internal/DecorateByMarkerModule.java       |  101 -
 .../ioc/internal/DecorateByMarkerModule2.java      |   94 -
 .../tapestry5/ioc/internal/DecoratorModule.java    |   53 -
 .../ioc/internal/DefaultServiceIdModule.java       |   23 -
 .../ioc/internal/EagerLoadViaAnnotationModule.java |   26 -
 .../EagerLoadViaAnnotationServiceImpl.java         |   28 -
 .../ioc/internal/ExceptionInBindMethod.java        |   25 -
 .../ioc/internal/ExceptionInConstructorModule.java |   26 -
 .../ExceptionInConstructorServiceImpl.java         |   32 -
 .../internal/ExtraPublicConstructorsModule.java    |   57 -
 .../apache/tapestry5/ioc/internal/FieService.java  |   23 -
 .../apache/tapestry5/ioc/internal/FoeService.java  |   23 -
 .../ioc/internal/MappedConfigurationModule.java    |   28 -
 .../ioc/internal/ModuleBuilderWithId.java          |   23 -
 .../ioc/internal/ModuleImplTestModule.java         |   63 -
 .../ModuleWithOverriddenObjectMethods.java         |   42 -
 .../MultipleConstructorsAutobuildService.java      |   46 -
 ...MutlipleAutobuildServiceConstructorsModule.java |   27 -
 .../tapestry5/ioc/internal/NamedServiceModule.java |   34 -
 .../internal/NamedViaAnnotationServiceImpl.java    |   28 -
 .../internal/NoDelegateDecoratorMethodModule.java  |   30 -
 .../NoUsableContributionParameterModule.java       |   29 -
 .../NonAnnotatedGenericServiceInterface.java       |   18 -
 .../NonAnnotatedGenericSetServiceImpl.java         |   59 -
 .../NonAnnotatedGenericSetServiceInterface.java    |    6 -
 .../ioc/internal/NonAnnotatedServiceInterface.java |   32 -
 .../internal/NonAnnotatedServiceInterfaceImpl.java |   49 -
 .../ioc/internal/NonStaticBindMethodModule.java    |   27 -
 .../ioc/internal/NoopClassLoaderDelegate.java      |   32 -
 .../ioc/internal/OrderedConfigurationModule.java   |   28 -
 .../internal/PrimitiveDecoratorMethodModule.java   |   26 -
 .../ioc/internal/PrivateConstructorModule.java     |   31 -
 .../tapestry5/ioc/internal/ReadManifest.java       |   91 -
 .../ioc/internal/RunnableServiceImpl.java          |   31 -
 .../ioc/internal/ServiceBuilderMethodFixture.java  |  128 -
 .../ioc/internal/ServiceDecoratorFixture.java      |   40 -
 .../internal/ServiceIdConflictMethodModule.java    |   32 -
 .../ioc/internal/ServiceIdViaAnnotationModule.java |   33 -
 .../ServiceIdViaAnnotationServiceImpl.java         |   28 -
 .../ServiceIdViaMethodAnnotationServiceImpl.java   |   26 -
 .../tapestry5/ioc/internal/SimpleModule.java       |   62 -
 .../ioc/internal/SyntheticMethodModule.java        |   31 -
 .../apache/tapestry5/ioc/internal/TestAdvice.java  |   56 -
 .../tapestry5/ioc/internal/ToStringService.java    |    7 -
 .../ioc/internal/ToUpperCaseStringHolder.java      |   35 -
 .../TooManyContributionParametersModule.java       |   30 -
 .../UninstantiableAutobuildServiceModule.java      |   25 -
 .../tapestry5/ioc/internal/UpcaseService.java      |   26 -
 .../tapestry5/ioc/internal/UpcaseServiceImpl.java  |   26 -
 .../ioc/internal/VoidBuilderMethodModule.java      |   28 -
 .../ioc/internal/VoidDecoratorMethodModule.java    |   31 -
 .../ioc/internal/services/AbstractIntWrapper.java  |   23 -
 .../ioc/internal/services/AnnotatedBean.java       |   55 -
 .../internal/services/AnnotatedBeanSubclass.java   |    5 -
 .../tapestry5/ioc/internal/services/Bean.java      |   39 -
 .../internal/services/BeanWithIndexedProperty.java |   28 -
 .../ioc/internal/services/ExtraFilterMethod.java   |   20 -
 .../ioc/internal/services/ExtraServiceMethod.java  |   20 -
 .../internal/services/GrandparentInterface.java    |   20 -
 .../ioc/internal/services/LineNumberBean.java      |   36 -
 .../ioc/internal/services/MiddleFilter.java        |   20 -
 .../ioc/internal/services/MiddleService.java       |   20 -
 .../ioc/internal/services/NonParallelModule.java   |   26 -
 .../ioc/internal/services/ParentInterface.java     |   20 -
 .../ioc/internal/services/PublicFieldBean.java     |    7 -
 .../ioc/internal/services/SampleFilter.java        |   31 -
 .../ioc/internal/services/SampleService.java       |   31 -
 .../services/ServiceDecoratorImplSpec.groovy       |  132 -
 .../services/ServiceProxySerializationSpec.groovy  |   73 -
 .../internal/services/ShadowedPublicFieldBean.java |   18 -
 .../ioc/internal/services/SimpleAnnotation.java    |   30 -
 .../ioc/internal/services/SimpleService.java       |   23 -
 .../ioc/internal/services/StandardFilter.java      |   20 -
 .../ioc/internal/services/StandardService.java     |   20 -
 .../ioc/internal/services/StartupModule.java       |   36 -
 .../ioc/internal/services/StartupModule2.java      |   39 -
 .../internal/services/StringLocationSpec.groovy    |   21 -
 .../ioc/internal/services/SubInterface.java        |   20 -
 .../services/SymbolObjectProviderSpec.groovy       |   82 -
 .../ioc/internal/services/TargetBean.java          |   46 -
 .../ioc/internal/services/TestAnnotation.java      |   68 -
 .../ioc/internal/services/TextTransformer.java     |   20 -
 .../ioc/internal/services/ToStringFilter.java      |   20 -
 .../ioc/internal/services/ToStringService.java     |   21 -
 .../ioc/internal/util/BaseGenericBean.java         |   30 -
 .../ioc/internal/util/ConcurrentTarget.java        |  168 --
 .../ioc/internal/util/ConcurrentTargetWrapper.java |   41 -
 .../tapestry5/ioc/internal/util/Drivable.java      |    9 -
 .../tapestry5/ioc/internal/util/DrivableImpl.java  |   16 -
 .../ioc/internal/util/FieldInjectionViaInject.java |   31 -
 .../util/FieldInjectionViaInjectService.java       |   29 -
 .../util/FieldInjectionViaJavaxInject.java         |   32 -
 .../internal/util/FieldInjectionViaJavaxNamed.java |   27 -
 .../tapestry5/ioc/internal/util/InjectoBean.java   |   54 -
 .../ioc/internal/util/JavaxInjectBean.java         |   55 -
 .../ioc/internal/util/NonGenericBean.java          |   30 -
 .../ioc/internal/util/NotRetainedRuntime.java      |   27 -
 .../ioc/internal/util/OneShotLockSubject.java      |   34 -
 .../apache/tapestry5/ioc/internal/util/Pair.java   |   42 -
 .../tapestry5/ioc/internal/util/Playable.java      |   11 -
 .../tapestry5/ioc/internal/util/PlayableImpl.java  |   15 -
 .../tapestry5/ioc/internal/util/StringBean.java    |   20 -
 .../ioc/internal/util/StringLongPair.java          |   19 -
 .../ioc/internal/util/TargetMessages.java          |    9 -
 .../util/TooManyAutobuildConstructorsBean.java     |   39 -
 .../tapestry5/ioc/internal/util/ToyTruck.java      |   10 -
 .../tapestry5/ioc/internal/util/ToyTruckImpl.java  |   16 -
 .../tapestry5/ioc/test/AdviceDemoModule.java       |   72 +
 .../AdviceMethodMissingAdvisorParameterModule.java |   26 +
 .../ioc/test/AutobuildInjectionModule.java         |   31 +
 .../apache/tapestry5/ioc/test/AutobuildModule.java |   25 +
 .../apache/tapestry5/ioc/test/BarneyModule.java    |  120 +
 .../org/apache/tapestry5/ioc/test/BlueMarker.java  |   33 +
 .../CaseInsensitiveContributeMethodModule.java     |   25 +
 .../test/CatchAllServiceConfigurationListener.java |   68 +
 .../ioc/test/ConcreteServiceBuilderModule.java     |   28 +
 .../ioc/test/ConfigurationOverrideModule.java      |   33 +
 .../ioc/test/ContributeByClassModule.java          |   78 +
 .../ioc/test/ContributedValueCoercionModule.java   |   32 +
 .../ioc/test/ContributionOrderModule.java          |   38 +
 .../ioc/test/ContributionOrderModule2.java         |   31 +
 .../ioc/test/ContributionOrderModule3.java         |   31 +
 .../ioc/test/ContributionOrderModule4.java         |   31 +
 .../ioc/test/ConventionFailureModule.java          |   11 +
 .../tapestry5/ioc/test/ConventionModule.java       |   11 +
 .../ConventionModuleImplementationNotFound.java    |   11 +
 .../tapestry5/ioc/test/CountingGreeterImpl.java    |   30 +
 .../apache/tapestry5/ioc/test/CyclicMOPModule.java |   51 +
 .../apache/tapestry5/ioc/test/DecoratorList.java   |   27 +
 .../tapestry5/ioc/test/DefaultMethodService.java   |   13 +
 .../test/DuplicateConfigurationOverrideModule.java |   32 +
 .../tapestry5/ioc/test/DuplicateFredModule.java    |   23 +
 .../ioc/test/DuplicateServiceTypeModule.java       |   29 +
 .../apache/tapestry5/ioc/test/EagerLoadModule.java |   33 +
 .../tapestry5/ioc/test/EagerLoadService.java       |   20 +
 .../tapestry5/ioc/test/EagerLoadServiceImpl.java   |   26 +
 .../tapestry5/ioc/test/EagerProxyReloadModule.java |   27 +
 .../tapestry5/ioc/test/ExtraMethodsModule.java     |   33 +
 .../ioc/test/FailInConstructorRunnable.java        |   29 +
 .../test/FailedConfigurationOverrideModule.java    |   26 +
 .../ioc/test/FieldResourceInjectionModule.java     |   34 +
 .../tapestry5/ioc/test/FieldResourceService.java   |   24 +
 .../ioc/test/FieldResourceServiceImpl.java         |   48 +
 .../org/apache/tapestry5/ioc/test/FredModule.java  |  153 ++
 .../org/apache/tapestry5/ioc/test/GreenMarker.java |   33 +
 .../org/apache/tapestry5/ioc/test/Greeter.java     |   20 +
 .../apache/tapestry5/ioc/test/GreeterModule.java   |  106 +
 .../apache/tapestry5/ioc/test/GreeterModule2.java  |   45 +
 .../ioc/test/GreeterServiceOverrideModule.java     |   44 +
 .../apache/tapestry5/ioc/test/HelterModule.java    |   25 +
 .../tapestry5/ioc/test/IndirectResources.java      |   41 +
 .../org/apache/tapestry5/ioc/test/Indirection.java |   23 +
 .../apache/tapestry5/ioc/test/InjectionCheck.java  |   24 +
 .../tapestry5/ioc/test/InjectionCheckImpl.java     |   46 +
 .../tapestry5/ioc/test/InjectionCheckModule.java   |   37 +
 .../org/apache/tapestry5/ioc/test/IntHolder.java   |   20 +
 .../apache/tapestry5/ioc/test/IntHolderImpl.java   |   32 +
 .../tapestry5/ioc/test/IntegrationTestFixture.java |    9 +
 .../ioc/test/InvalidContributeDefModule.java       |   28 +
 .../ioc/test/InvalidContributeDefModule2.java      |   56 +
 .../ioc/test/InvalidContributeDefModule3.java      |   49 +
 .../org/apache/tapestry5/ioc/test/LocalModule.java |   49 +
 .../apache/tapestry5/ioc/test/MarkerModule.java    |   38 +
 .../apache/tapestry5/ioc/test/MasterModule.java    |   26 +
 .../apache/tapestry5/ioc/test/NameListHolder.java  |   27 +
 .../apache/tapestry5/ioc/test/NameListHolder2.java |   27 +
 .../NoImplementationClassForSimpleIdModule.java    |   34 +
 .../ioc/test/NonProxiedServiceModule.java          |   25 +
 .../ioc/test/NonVoidAdvisorMethodModule.java       |   25 +
 .../ioc/test/OptionalContributionModule.java       |   26 +
 .../apache/tapestry5/ioc/test/OrderedService.java  |   34 +
 .../apache/tapestry5/ioc/test/PerThreadModule.java |   28 +
 .../org/apache/tapestry5/ioc/test/Pingable.java    |   23 +
 .../apache/tapestry5/ioc/test/PingableImpl.java    |    6 +
 .../ioc/test/PostInjectionMethodModule.java        |   25 +
 .../ioc/test/PreventDecorationModule.java          |   40 +
 .../ioc/test/RecursiveConstructorModule.java       |   41 +
 .../apache/tapestry5/ioc/test/RedGreeterImpl.java  |   29 +
 .../org/apache/tapestry5/ioc/test/RedMarker.java   |   33 +
 .../ioc/test/RegistryBuilderTestModule.java        |   33 +
 .../java/org/apache/tapestry5/ioc/test/Rocket.java |   20 +
 .../org/apache/tapestry5/ioc/test/RocketImpl.java  |   27 +
 .../tapestry5/ioc/test/ScopeMismatchModule.java    |   27 +
 .../ioc/test/ServiceBuilderAutobuilderModule.java  |   30 +
 .../tapestry5/ioc/test/ServiceBuilderModule.java   |   54 +
 .../tapestry5/ioc/test/ServiceIdGreeter.java       |   35 +
 .../java/org/apache/tapestry5/ioc/test/Sizer.java  |   24 +
 .../apache/tapestry5/ioc/test/SkelterModule.java   |   24 +
 .../ioc/test/SpecificDecoratorModule.java          |   30 +
 .../ioc/test/SpecificDecoratorModuleAgain.java     |   34 +
 .../java/org/apache/tapestry5/ioc/test/Square.java |   23 +
 .../apache/tapestry5/ioc/test/StaticModule.java    |  109 +
 .../apache/tapestry5/ioc/test/StringHolder.java    |   22 +
 .../tapestry5/ioc/test/StringHolderImpl.java       |   39 +
 .../apache/tapestry5/ioc/test/StringLookup.java    |   30 +
 .../tapestry5/ioc/test/StringTransformer.java      |   21 +
 .../ioc/test/SymbolExpandingTransformer.java       |   30 +
 .../tapestry5/ioc/test/UnbuildablePingable.java    |   31 +
 .../ioc/test/UnknownColorGreeterImpl.java          |   26 +
 .../tapestry5/ioc/test/UnknownScopeModule.java     |   26 +
 .../ioc/test/UppercaseStringTransformer.java       |   24 +
 .../apache/tapestry5/ioc/test/YellowMarker.java    |   31 +
 .../internal/AbstractAutobuildServiceModule.java   |   25 +
 .../ioc/test/internal/AbstractRunnableService.java |   29 +
 .../tapestry5/ioc/test/internal/AdviceModule.java  |   53 +
 .../ioc/test/internal/AdviseByMarkerModule.java    |   92 +
 .../ioc/test/internal/AdviseByMarkerModule2.java   |   82 +
 .../ioc/test/internal/AlphabetModule.java          |   73 +
 .../ioc/test/internal/AlphabetModule2.java         |   86 +
 .../test/internal/AnnotatedServiceInterface.java   |   30 +
 .../internal/AnnotatedServiceInterfaceImpl.java    |   24 +
 .../test/internal/ArrayDecoratorMethodModule.java  |   27 +
 .../ioc/test/internal/BuilderMethodModule.java     |   23 +
 .../ioc/test/internal/ComplexAutobuildModule.java  |   27 +
 .../ioc/test/internal/DecorateByMarkerModule.java  |  101 +
 .../ioc/test/internal/DecorateByMarkerModule2.java |   94 +
 .../ioc/test/internal/DecoratorModule.java         |   53 +
 .../ioc/test/internal/DefaultServiceIdModule.java  |   23 +
 .../internal/EagerLoadViaAnnotationModule.java     |   26 +
 .../EagerLoadViaAnnotationServiceImpl.java         |   28 +
 .../ioc/test/internal/ExceptionInBindMethod.java   |   25 +
 .../internal/ExceptionInConstructorModule.java     |   26 +
 .../ExceptionInConstructorServiceImpl.java         |   32 +
 .../internal/ExtraPublicConstructorsModule.java    |   57 +
 .../tapestry5/ioc/test/internal/FieService.java    |   23 +
 .../tapestry5/ioc/test/internal/FoeService.java    |   23 +
 .../test/internal/MappedConfigurationModule.java   |   29 +
 .../ioc/test/internal/ModuleBuilderWithId.java     |   23 +
 .../ioc/test/internal/ModuleImplTestModule.java    |   63 +
 .../ModuleWithOverriddenObjectMethods.java         |   42 +
 .../MultipleConstructorsAutobuildService.java      |   46 +
 ...MutlipleAutobuildServiceConstructorsModule.java |   27 +
 .../ioc/test/internal/NamedServiceModule.java      |   34 +
 .../internal/NamedViaAnnotationServiceImpl.java    |   28 +
 .../internal/NoDelegateDecoratorMethodModule.java  |   30 +
 .../NoUsableContributionParameterModule.java       |   30 +
 .../NonAnnotatedGenericServiceInterface.java       |   18 +
 .../NonAnnotatedGenericSetServiceImpl.java         |   59 +
 .../NonAnnotatedGenericSetServiceInterface.java    |    6 +
 .../internal/NonAnnotatedServiceInterface.java     |   32 +
 .../internal/NonAnnotatedServiceInterfaceImpl.java |   49 +
 .../test/internal/NonStaticBindMethodModule.java   |   27 +
 .../ioc/test/internal/NoopClassLoaderDelegate.java |   32 +
 .../test/internal/OrderedConfigurationModule.java  |   29 +
 .../internal/PrimitiveDecoratorMethodModule.java   |   26 +
 .../test/internal/PrivateConstructorModule.java    |   31 +
 .../tapestry5/ioc/test/internal/ReadManifest.java  |   91 +
 .../ioc/test/internal/RunnableServiceImpl.java     |   31 +
 .../test/internal/ServiceBuilderMethodFixture.java |  128 +
 .../ioc/test/internal/ServiceDecoratorFixture.java |   40 +
 .../internal/ServiceIdConflictMethodModule.java    |   32 +
 .../internal/ServiceIdViaAnnotationModule.java     |   33 +
 .../ServiceIdViaAnnotationServiceImpl.java         |   28 +
 .../ServiceIdViaMethodAnnotationServiceImpl.java   |   26 +
 .../tapestry5/ioc/test/internal/SimpleModule.java  |   62 +
 .../ioc/test/internal/SyntheticMethodModule.java   |   31 +
 .../tapestry5/ioc/test/internal/TestAdvice.java    |   56 +
 .../ioc/test/internal/ToStringService.java         |    7 +
 .../ioc/test/internal/ToUpperCaseStringHolder.java |   35 +
 .../TooManyContributionParametersModule.java       |   31 +
 .../UninstantiableAutobuildServiceModule.java      |   25 +
 .../tapestry5/ioc/test/internal/UpcaseService.java |   26 +
 .../ioc/test/internal/UpcaseServiceImpl.java       |   26 +
 .../ioc/test/internal/VoidBuilderMethodModule.java |   28 +
 .../test/internal/VoidDecoratorMethodModule.java   |   31 +
 .../test/internal/services/AbstractIntWrapper.java |   23 +
 .../ioc/test/internal/services/AnnotatedBean.java  |   55 +
 .../internal/services/AnnotatedBeanSubclass.java   |    5 +
 .../tapestry5/ioc/test/internal/services/Bean.java |   39 +
 .../internal/services/BeanWithIndexedProperty.java |   28 +
 .../test/internal/services/ExtraFilterMethod.java  |   20 +
 .../test/internal/services/ExtraServiceMethod.java |   20 +
 .../internal/services/GrandparentInterface.java    |   20 +
 .../ioc/test/internal/services/LineNumberBean.java |   36 +
 .../ioc/test/internal/services/MiddleFilter.java   |   20 +
 .../ioc/test/internal/services/MiddleService.java  |   20 +
 .../test/internal/services/NonParallelModule.java  |   26 +
 .../test/internal/services/ParentInterface.java    |   20 +
 .../test/internal/services/PublicFieldBean.java    |    7 +
 .../ioc/test/internal/services/SampleFilter.java   |   33 +
 .../ioc/test/internal/services/SampleService.java  |   33 +
 .../services/ServiceDecoratorImplSpec.groovy       |  133 +
 .../services/ServiceProxySerializationSpec.groovy  |   74 +
 .../internal/services/ShadowedPublicFieldBean.java |   18 +
 .../test/internal/services/SimpleAnnotation.java   |   30 +
 .../ioc/test/internal/services/SimpleService.java  |   23 +
 .../ioc/test/internal/services/StandardFilter.java |   20 +
 .../test/internal/services/StandardService.java    |   20 +
 .../ioc/test/internal/services/StartupModule.java  |   36 +
 .../ioc/test/internal/services/StartupModule2.java |   39 +
 .../internal/services/StringLocationSpec.groovy    |   23 +
 .../ioc/test/internal/services/SubInterface.java   |   20 +
 .../services/SymbolObjectProviderSpec.groovy       |   84 +
 .../ioc/test/internal/services/TargetBean.java     |   46 +
 .../ioc/test/internal/services/TestAnnotation.java |   68 +
 .../test/internal/services/TextTransformer.java    |   20 +
 .../ioc/test/internal/services/ToStringFilter.java |   20 +
 .../test/internal/services/ToStringService.java    |   21 +
 .../ioc/test/internal/util/BaseGenericBean.java    |   30 +
 .../ioc/test/internal/util/ConcurrentTarget.java   |  169 ++
 .../internal/util/ConcurrentTargetWrapper.java     |   42 +
 .../tapestry5/ioc/test/internal/util/Drivable.java |    9 +
 .../ioc/test/internal/util/DrivableImpl.java       |   16 +
 .../internal/util/FieldInjectionViaInject.java     |   31 +
 .../util/FieldInjectionViaInjectService.java       |   29 +
 .../util/FieldInjectionViaJavaxInject.java         |   32 +
 .../internal/util/FieldInjectionViaJavaxNamed.java |   27 +
 .../ioc/test/internal/util/InjectoBean.java        |   54 +
 .../ioc/test/internal/util/JavaxInjectBean.java    |   55 +
 .../ioc/test/internal/util/NonGenericBean.java     |   30 +
 .../ioc/test/internal/util/NotRetainedRuntime.java |   27 +
 .../ioc/test/internal/util/OneShotLockSubject.java |   35 +
 .../tapestry5/ioc/test/internal/util/Pair.java     |   42 +
 .../tapestry5/ioc/test/internal/util/Playable.java |   11 +
 .../ioc/test/internal/util/PlayableImpl.java       |   15 +
 .../ioc/test/internal/util/StringBean.java         |   20 +
 .../ioc/test/internal/util/StringLongPair.java     |   19 +
 .../ioc/test/internal/util/TargetMessages.java     |    9 +
 .../util/TooManyAutobuildConstructorsBean.java     |   39 +
 .../tapestry5/ioc/test/internal/util/ToyTruck.java |   10 +
 .../ioc/test/internal/util/ToyTruckImpl.java       |   16 +
 .../tapestry5/ioc/test/util/ExceptionWrapper.java  |   31 +
 ...nmatchingMappedConfigurationOverrideModule.java |   25 +
 .../tapestry5/ioc/util/ExceptionWrapper.java       |   31 -
 ...nmatchingMappedConfigurationOverrideModule.java |   25 -
 .../java/org/apache/tapestry5/ioc/util/Stooge.java |   20 +
 .../java/org/apache/tapestry5/util/Stooge.java     |   20 -
 .../internal/util/TargetStrings.properties         |    0
 .../apache/tapestry5/javadoc/ClassDescription.java |  163 +-
 .../tapestry5/javadoc/DocCommentTreeProvider.java  |   10 +
 .../tapestry5/javadoc/ParameterDescription.java    |   61 +-
 .../tapestry5/javadoc/TapestryDocTaglet.java       |  343 ---
 .../org/apache/tapestry5/javadoc/XDocStreamer.java |    4 +-
 .../javadoc/ParameterDescriptionSpec.groovy        |  352 ++-
 .../tapestry5/internal/jmx/MBeanSupportImpl.java   |    2 +-
 .../org/example/testapp/services/AppModule.java    |    6 +-
 .../EntityApplicationStatePersistenceStrategy.java |    2 +-
 .../internal/jpa/EntityManagerManagerImpl.java     |    2 +-
 .../internal/jpa/EntityManagerObjectProvider.java  |   10 +-
 .../internal/jpa/EntityManagerSourceImpl.java      |    4 +-
 .../jpa/EntityPersistentFieldStrategy.java         |    6 +-
 .../tapestry5/internal/jpa/JpaValueEncoder.java    |    8 +-
 .../tapestry5/internal/jpa/PersistedEntity.java    |    2 +-
 .../internal/jpa/PersistenceContentHandler.java    |    2 +-
 .../internal/jpa/PersistenceUnitInfoImpl.java      |    2 +-
 ...apestryCDIBeanManagerForJPAEntityListeners.java |    2 +-
 .../tapestry5/jpa/JpaPersistenceConstants.java     |    2 +-
 .../apache/tapestry5/jpa/modules/JpaModule.java    |   16 +-
 .../internal/jpa/EntityManagerSourceImplTest.java  |    2 +-
 .../jpa/JpaTransactionAdvisorImplTest.java         |    4 +-
 .../org/apache/tapestry5/jpa/test/JpaTest.java     |    2 +-
 .../apache/tapestry5/jpa/test/JpaTestModule.java   |   10 +-
 .../java/org/example/app1/pages/SSOEntity.java     |    4 +-
 .../java/org/example/app1/services/AppModule.java  |    6 +-
 .../java/org/example/app2/services/AppModule.java  |    2 +-
 .../java/org/example/app3/services/AppModule.java  |    2 +-
 .../java/org/example/app4/services/AppModule.java  |    2 +-
 .../java/org/example/app5/services/AppModule.java  |    2 +-
 .../java/org/example/app6/pages/SSOEntity.java     |    4 +-
 .../java/org/example/app6/services/AppModule.java  |    6 +-
 .../tapestry5/internal/json/StringToJSONArray.java |    2 +-
 .../internal/json/StringToJSONObject.java          |    2 +-
 .../apache/tapestry5/json/modules/JSONModule.java  |    6 +-
 .../tapestry5/json/modules/package-info.java       |    2 +-
 .../tapestry5/kaptcha/components/KaptchaField.java |    2 +-
 .../tapestry5/kaptcha/components/KaptchaImage.java |    4 +-
 .../internal/services/KaptchaDataTypeAnalyzer.java |    4 +-
 .../tapestry5/kaptcha/modules/KaptchaModule.java   |   11 +-
 .../test/java/kaptcha/demo/services/AppModule.java |    7 +-
 .../tapestry5/mongodb/modules/MongodbModule.java   |   11 +-
 .../src/test/groovy/MongoDBSpec.groovy             |   13 +-
 .../internal/mongodb/MongoDBTestModule.java        |    5 +-
 .../internal/spring/SpringBeanServiceDef.java      |    2 +-
 .../tapestry5/internal/spring/SpringModuleDef.java |   12 +-
 .../internal/spring/StaticObjectCreator.java       |    4 +-
 .../internal/spring/TapestryBeanFactory.java       |    4 +-
 .../spring/TapestryApplicationContext.java         |    2 +-
 .../tapestry5/spring/TapestrySpringFilter.java     |    2 +-
 .../tapestry5/spring/modules/SpringModule.java     |   14 +-
 .../internal/spring/SpringModuleDefTest.java       |    2 +-
 .../spring/TapestryApplicationContextTest.java     |    2 +-
 ...pestryExternalSpringContextIntegrationTest.java |    2 +-
 .../org/example/testapp/services/AppModule.java    |    8 +-
 .../testapp/services/SpringStatusProvider.java     |    2 +-
 .../org/example/testapp1/services/AppModule.java   |    6 +-
 .../org/apache/tapestry5/ioc/test/MockTester.java  |   89 -
 .../org/apache/tapestry5/ioc/test/TestBase.java    |  139 -
 .../org/apache/tapestry5/ioc/test/TestUtils.java   |  302 ---
 .../apache/tapestry5/ioc/test/package-info.java    |   16 -
 .../org/apache/tapestry5/test/ioc/MockTester.java  |   89 +
 .../org/apache/tapestry5/test/ioc/TestBase.java    |  139 +
 .../org/apache/tapestry5/test/ioc/TestUtils.java   |  302 +++
 .../apache/tapestry5/test/ioc/package-info.java    |   16 +
 .../apache/tapestry5/upload/components/Upload.java |    2 +-
 .../internal/services/MultipartDecoderImpl.java    |    6 +-
 .../services/MultipartServletRequestFilter.java    |    4 +-
 .../upload/internal/services/ParameterValue.java   |    2 +-
 .../services/ParametersServletRequestWrapper.java  |    7 +-
 .../internal/services/UploadExceptionFilter.java   |    8 +-
 .../upload/internal/services/UploadMessages.java   |    4 +-
 .../tapestry5/upload/modules/UploadModule.java     |    8 +-
 .../tapestry5/upload/components/UploadTest.java    |    2 +-
 .../MultipartServletRequestFilterTest.java         |    2 +-
 .../org/example/upload/services/AppModule.java     |    6 +-
 tapestry-version-migrator/build.gradle             |   17 +
 .../tapestry5/versionmigrator/ClassRefactor.java   |  135 +
 .../versionmigrator/FileRefactorCommitParser.java  |   45 +
 .../org/apache/tapestry5/versionmigrator/Main.java |  352 +++
 .../tapestry5/versionmigrator/TapestryVersion.java |   64 +
 .../ArtifactChangeRefactorCommitParser.java        |   49 +
 ...ckageAndArtifactChangeRefactorCommitParser.java |   55 +
 .../PackageChangeRefactorCommitParser.java         |   57 +
 .../tapestry5/versionmigrator/5.7.0.properties     |  129 +
 .../versionmigrator/change-report-5.7.0.html       |    1 +
 .../versionmigrator/ClassRefactorTest.java         |  112 +
 .../ArtifactChangeRefactorCommitParserTest.java    |   41 +
 ...eAndArtifactChangeRefactorCommitParserTest.java |   40 +
 .../PackageChangeRefactorCommitParserTest.java     |   40 +
 .../test-sources/ClassAtRootFolder.java            |   11 +
 .../subfolder/subsubfolder/ClassAtSubFolder.java   |   15 +
 tapestry-webresources/build.gradle                 |    4 +-
 .../platform/yui/compressor/CssCompressor.java     |  531 ----
 .../internal/webresources/CSSMinimizer.java        |    1 -
 .../webresources/CoffeeScriptCompiler.java         |    6 +-
 .../webresources/ContentChangeTracker.java         |    4 +-
 .../internal/webresources/CssCompressor.java       |  531 ++++
 .../DelegatingResourceTransformer.java             |    2 +-
 .../webresources/GoogleClosureMinimizer.java       |    4 +-
 .../webresources/LessResourceTransformer.java      |    9 +-
 .../webresources/ResourceDependenciesSplitter.java |    2 +-
 .../internal/webresources/ResourceLessSource.java  |    2 +-
 .../webresources/ResourceTransformUtils.java       |    4 +-
 .../ResourceTransformerFactoryImpl.java            |    7 +-
 .../internal/webresources/RhinoExecutorPool.java   |    4 +-
 .../internal/webresources/TypeScriptCompiler.java  |    4 +-
 .../webresources/modules/WebResourcesModule.java   |    6 +-
 .../t5/webresources/tests/CssCompressorSpec.groovy |    4 +-
 .../tests/TypeScriptCompilerSpec.groovy            |    8 +-
 .../src/test/java/RunTestWebapp.java               |    9 +
 .../java/t5/webresources/services/AppModule.java   |    4 +-
 .../org/apache/tapestry5/beaneditor/NonVisual.java |    5 +-
 .../tapestry5/beaneditor/RelativePosition.java     |    7 +-
 .../ImmutableSessionPersistedObject.java           |   36 +
 .../apache/tapestry5/ioc/annotations/Advise.java   |    0
 .../tapestry5/ioc/annotations/Autobuild.java       |    6 +-
 .../ioc/annotations/ComponentClasses.java          |   35 +
 .../tapestry5/ioc/annotations/ComponentLayer.java  |   38 +
 .../tapestry5/ioc/annotations/Contribute.java      |    0
 .../apache/tapestry5/ioc/annotations/Decorate.java |    0
 .../tapestry5/ioc/annotations/EagerLoad.java       |    0
 .../tapestry5/ioc/annotations/ImportModule.java    |    0
 .../apache/tapestry5/ioc/annotations/Inject.java   |    6 +-
 .../tapestry5/ioc/annotations/InjectService.java   |    2 +-
 .../ioc/annotations/IntermediateType.java          |    8 +-
 .../apache/tapestry5/ioc/annotations/Marker.java   |   47 +
 .../apache/tapestry5/ioc/annotations/Match.java    |    0
 .../apache/tapestry5/ioc/annotations/NotLazy.java  |    0
 .../tapestry5/ioc/annotations/Operation.java       |    0
 .../apache/tapestry5/ioc/annotations/Optional.java |    0
 .../apache/tapestry5/ioc/annotations/Order.java    |    0
 .../ioc/annotations/PreventServiceDecoration.java  |    0
 .../apache/tapestry5/ioc/annotations/Scope.java    |   47 +
 .../tapestry5/ioc/annotations/ServiceId.java       |    0
 .../apache/tapestry5/ioc/annotations/Startup.java  |    0
 .../tapestry5/ioc/annotations/SubModule.java       |    0
 .../ioc/annotations/UsesConfiguration.java         |    4 +-
 .../ioc/annotations/UsesMappedConfiguration.java   |   10 +-
 .../ioc/annotations/UsesOrderedConfiguration.java  |    4 +-
 .../apache/tapestry5/ioc/annotations/Value.java    |    2 +-
 .../tapestry5/ioc/annotations/package-info.java    |    0
 .../tapestry5/services/ComponentClasses.java       |   35 -
 .../apache/tapestry5/services/ComponentLayer.java  |   37 -
 1794 files changed, 35343 insertions(+), 29485 deletions(-)
 create mode 100644 5.7_RELEASE_NOTES.md
 create mode 100644 beanmodel/src/main/antlr/org/apache/tapestry5/beanmodel/internal/antlr/PropertyExpressionLexer.g
 create mode 100644 beanmodel/src/main/antlr/org/apache/tapestry5/beanmodel/internal/antlr/PropertyExpressionParser.g
 delete mode 100644 beanmodel/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionLexer.g
 delete mode 100644 beanmodel/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModel.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beaneditor/PropertyModel.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModel.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelUtils.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit2.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyModel.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/InternalPropertyConduit.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/BaseLexer.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/BaseParser.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/package-info.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/BeanModelImpl.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/PropertyModelImpl.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/BeanModelSourceImpl.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/ClassPropertyAdapterImpl.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/CoercingPropertyConduitWrapper.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/Invariant.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/LiteralPropertyConduit.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PlasticClassListenerLogger.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAccessImpl.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAdapterImpl.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitDelegate.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyExpressionException.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/package-info.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/BeanModelSource.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PlasticProxyFactoryImpl.java
 create mode 100644 beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PropertyConduitSource.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/InternalPropertyConduit.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/BaseLexer.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/BaseParser.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/package-info.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelImpl.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelUtils.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/PropertyModelImpl.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/services/BeanModelSourceImpl.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/services/Invariant.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitDelegate.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyExpressionException.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/services/BeanModelSource.java
 delete mode 100644 beanmodel/src/main/java/org/apache/tapestry5/services/PropertyConduitSource.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/AnnotationProvider.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/Configuration.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/Locatable.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/Location.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/MappedConfiguration.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/MessageFormatter.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/Messages.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/ObjectCreator.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/ObjectLocator.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/ObjectProvider.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/OrderedConfiguration.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/Resource.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/BasicDataTypeAnalyzers.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/BasicTypeCoercions.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/NullAnnotationProvider.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/AccessableObjectAnnotationProvider.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/AnnotationDataTypeAnalyzer.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/AnnotationProviderChain.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/CompoundCoercion.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/DefaultDataTypeAnalyzer.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/GenericsResolverImpl.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/ServiceMessages.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringInterner.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringInternerImpl.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringLocation.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/services/TypeCoercerImpl.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/util/GenericsUtils.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/util/InheritanceSearch.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/util/InternalCommonsUtils.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/util/LockSupport.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/util/MessageFormatterImpl.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/util/MessagesImpl.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/internal/util/TapestryException.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/ClassPropertyAdapter.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/Coercion.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/CoercionTuple.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/DataTypeAnalyzer.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/GenericsResolver.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/InvalidationEventHub.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/InvalidationListener.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/PlasticProxyFactory.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/PropertyAccess.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/PropertyAdapter.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/services/TypeCoercer.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/AbstractMessages.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/AvailableValues.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/CaseInsensitiveMap.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/CollectionFactory.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/CommonsUtils.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/ExceptionUtils.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/IntegerRange.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/MultiKey.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/Stack.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/StrategyRegistry.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/StringToEnumCoercion.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/TimeInterval.java
 create mode 100644 commons/src/main/java/org/apache/tapestry5/commons/util/UnknownValueException.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/internal/services/DefaultDataTypeAnalyzer.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/internal/services/GenericsResolverImpl.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/internal/services/StringInterner.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/internal/services/StringInternerImpl.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/internal/util/IntegerRange.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/internal/util/MultiKey.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/AnnotationProvider.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/Configuration.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/Locatable.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/Location.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/MappedConfiguration.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/MessageFormatter.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/Messages.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/ObjectCreator.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/ObjectLocator.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/OrderedConfiguration.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/Resource.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/BasicDataTypeAnalyzers.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/BasicTypeCoercions.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/NullAnnotationProvider.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/services/AccessableObjectAnnotationProvider.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/services/AnnotationProviderChain.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/services/CompoundCoercion.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/services/ServiceMessages.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/services/StringLocation.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/util/GenericsUtils.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/util/InheritanceSearch.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalCommonsUtils.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/util/LockSupport.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/util/MessageFormatterImpl.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/util/MessagesImpl.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/internal/util/TapestryException.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/services/ClassPropertyAdapter.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/services/Coercion.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/services/CoercionTuple.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/services/PropertyAccess.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/services/PropertyAdapter.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/services/TypeCoercer.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/util/AbstractMessages.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/util/AvailableValues.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/util/CaseInsensitiveMap.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/util/ExceptionUtils.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/util/Stack.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/util/StrategyRegistry.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/util/TimeInterval.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/ioc/util/UnknownValueException.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/services/DataTypeAnalyzer.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/services/GenericsResolver.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/services/InvalidationEventHub.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/services/InvalidationListener.java
 delete mode 100644 commons/src/main/java/org/apache/tapestry5/util/StringToEnumCoercion.java
 rename {tapestry-ioc/src/main/resources/org/apache/tapestry5/ioc => commons/src/main/resources/org/apache/tapestry5/commons}/internal/services/ServiceStrings.properties (100%)
 create mode 100644 genericsresolver-guava/src/main/java/org/apache/tapestry5/genericsresolverguava/internal/GuavaGenericsResolver.java
 delete mode 100644 genericsresolver-guava/src/main/java/org/apache/tapestry5/internal/genericsresolverguava/GuavaGenericsResolver.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/ContentType.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/Link.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/LinkSecurity.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/OptimizedSessionPersistedObject.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/annotations/ImmutableSessionPersistedObject.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/package-info.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/AbstractContributionDef.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/ServletContextSymbolProvider.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/SingleKeySymbolProvider.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/SyntheticModuleDef.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/SyntheticSymbolSourceContributionDef.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryAppInitializer.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/BufferedGZipOutputStream.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/GZIPEnabledResponse.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/GZipFilter.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationGlobalsImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BaseURLSourceImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClusteredSessionImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultSessionPersistedObjectAnalyzer.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/OptimizedSessionPersistedObjectAnalyzer.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestGlobalsImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionLock.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestrySessionFactory.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestrySessionFactoryImpl.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/internal/util/DelegatingSymbolProvider.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationGlobals.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationInitializer.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationInitializerFilter.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/BaseURLSource.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/Dispatcher.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/HttpServletRequestFilter.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/HttpServletRequestHandler.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/RequestFilter.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/RequestGlobals.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/RequestHandler.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/ServletApplicationInitializer.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/ServletApplicationInitializerFilter.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/Session.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/SessionPersistedObjectAnalyzer.java
 delete mode 100644 tapestry-core/src/main/java/org/apache/tapestry5/services/assets/CompressionAnalyzer.java
 create mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/internal/DefaultHibernateConfigurer.java
 create mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/internal/HibernateSessionManagerImpl.java
 create mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/internal/HibernateSessionSourceImpl.java
 create mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/internal/HibernateTransactionAdvisorImpl.java
 create mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/internal/HibernateTransactionDecoratorImpl.java
 create mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/internal/PackageNameHibernateConfigurer.java
 delete mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/internal/hibernate/DefaultHibernateConfigurer.java
 delete mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateSessionManagerImpl.java
 delete mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateSessionSourceImpl.java
 delete mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateTransactionAdvisorImpl.java
 delete mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateTransactionDecoratorImpl.java
 delete mode 100644 tapestry-hibernate-core/src/main/java/org/apache/tapestry5/internal/hibernate/PackageNameHibernateConfigurer.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/corelib/pages/HibernateStatistics.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernateGridDataSource.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernatePersistenceConstants.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/modules/HibernateModule.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/HibernateGridDataSource.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/HibernatePersistenceConstants.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/CommitAfterWorker.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityApplicationStatePersistenceStrategy.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityPersistentFieldStrategy.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/HibernateEntityValueEncoder.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/PersistedEntity.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/PersistedTransientEntity.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/SessionRestorable.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/package-info.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/modules/HibernateModule.java
 create mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/pages/HibernateStatistics.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/CommitAfterWorker.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityApplicationStatePersistenceStrategy.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityPersistentFieldStrategy.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/PersistedEntity.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/PersistedTransientEntity.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/SessionRestorable.java
 delete mode 100644 tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/package-info.java
 rename tapestry-hibernate/src/main/resources/org/apache/tapestry5/{corelib => hibernate/web}/pages/HibernateStatistics.properties (100%)
 rename tapestry-hibernate/src/main/resources/org/apache/tapestry5/{corelib => hibernate/web}/pages/HibernateStatistics.tml (100%)
 delete mode 100644 tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/integration/TapestryHibernateIntegrationTests.java
 create mode 100644 tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/web/integration/TapestryHibernateIntegrationTests.java
 create mode 100644 tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/web/internal/EntityPersistentFieldStrategyTest.java
 create mode 100644 tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/web/internal/HibernateEntityValueEncoderTest.java
 create mode 100644 tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/web/internal/SampleEntity.java
 delete mode 100644 tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/EntityPersistentFieldStrategyTest.java
 delete mode 100644 tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java
 delete mode 100644 tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/SampleEntity.java
 create mode 100644 tapestry-http/build.gradle
 rename {tapestry-core => tapestry-http}/src/main/filtered-resources/META-INF/gradle/org.apache.tapestry/tapestry-core/project.properties (100%)
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/ContentType.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/Link.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/LinkSecurity.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/OptimizedSessionPersistedObject.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryFilter.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryHttpConstants.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryHttpSymbolConstants.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/AbstractContributionDef.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/ServletContextSymbolProvider.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SingleKeySymbolProvider.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SyntheticModuleDef.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SyntheticSymbolSourceContributionDef.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryAppInitializer.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryHttpInternalConstants.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryHttpInternalSymbols.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/BufferedGZipOutputStream.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/GZIPEnabledResponse.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/GZipFilter.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ApplicationGlobalsImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/BaseURLSourceImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ClusteredSessionImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ContextImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/DefaultSessionPersistedObjectAnalyzer.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/OptimizedSessionPersistedObjectAnalyzer.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/RequestGlobalsImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/RequestImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ResponseCompressionAnalyzerImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ResponseImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/SessionImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/SessionLock.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/TapestrySessionFactory.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/TapestrySessionFactoryImpl.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/internal/util/DelegatingSymbolProvider.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/modules/TapestryHttpModule.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationGlobals.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationInitializer.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationInitializerFilter.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/BaseURLSource.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/CompressionAnalyzer.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/Context.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/Dispatcher.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/HttpServletRequestFilter.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/HttpServletRequestHandler.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/Request.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestFilter.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestGlobals.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestHandler.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/Response.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/ResponseCompressionAnalyzer.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/ServletApplicationInitializer.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/ServletApplicationInitializerFilter.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/Session.java
 create mode 100644 tapestry-http/src/main/java/org/apache/tapestry5/http/services/SessionPersistedObjectAnalyzer.java
 create mode 100644 tapestry-http/src/test/java/org/apache/tapestry5/http/test/TapestryHttpIntegrationTests.java
 create mode 100644 tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestDispatcher.java
 create mode 100644 tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestHttpServletRequestFilter.java
 create mode 100644 tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestRequestFilter.java
 create mode 100644 tapestry-http/src/test/java/org/apache/tapestry5/http/test/services/AppModule.java
 create mode 100644 tapestry-http/src/test/webapp/WEB-INF/web.xml
 create mode 100644 tapestry-http/src/test/webapp/index.html
 create mode 100644 tapestry-http/src/test/webapp/longfile.txt
 delete mode 100644 tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/ObjectProvider.java
 delete mode 100644 tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Marker.java
 delete mode 100644 tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/annotations/Scope.java
 create mode 100644 tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/UpdateListener.java
 create mode 100644 tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/UpdateListenerHub.java
 delete mode 100644 tapestry-ioc/src/main/java/org/apache/tapestry5/services/UpdateListener.java
 delete mode 100644 tapestry-ioc/src/main/java/org/apache/tapestry5/services/UpdateListenerHub.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/AdviceDemoModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/AdviceMethodMissingAdvisorParameterModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/AutobuildInjectionModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/AutobuildModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/BarneyModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/BlueMarker.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/CaseInsensitiveContributeMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/CatchAllServiceConfigurationListener.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ConcreteServiceBuilderModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ConfigurationOverrideModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ContributeByClassModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ContributedValueCoercionModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ContributionOrderModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ContributionOrderModule2.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ContributionOrderModule3.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ContributionOrderModule4.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ConventionFailureModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ConventionModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ConventionModuleImplementationNotFound.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/CountingGreeterImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/CyclicMOPModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/DecoratorList.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/DefaultMethodService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/DuplicateConfigurationOverrideModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/DuplicateFredModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/DuplicateServiceTypeModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/EagerLoadModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/EagerLoadService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/EagerLoadServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/EagerProxyReloadModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ExtraMethodsModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FailInConstructorRunnable.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FailedConfigurationOverrideModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FieldResourceInjectionModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FieldResourceService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FieldResourceServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FredModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/GreenMarker.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/Greeter.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/GreeterModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/GreeterModule2.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/GreeterServiceOverrideModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/HelterModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IndirectResources.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/Indirection.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/InjectionCheck.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/InjectionCheckImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/InjectionCheckModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntHolder.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntHolderImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTestFixture.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/InvalidContributeDefModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/InvalidContributeDefModule2.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/InvalidContributeDefModule3.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/LocalModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/MarkerModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/MasterModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/NameListHolder.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/NameListHolder2.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/NoImplementationClassForSimpleIdModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/NonProxiedServiceModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/NonVoidAdvisorMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/OptionalContributionModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/OrderedService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/PerThreadModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/Pingable.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/PingableImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/PostInjectionMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/PreventDecorationModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/RecursiveConstructorModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/RedGreeterImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/RedMarker.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/RegistryBuilderTestModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/Rocket.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/RocketImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ScopeMismatchModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ServiceBuilderAutobuilderModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ServiceBuilderModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ServiceIdGreeter.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/Sizer.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/SkelterModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/SpecificDecoratorModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/SpecificDecoratorModuleAgain.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/Square.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/StaticModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/StringHolder.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/StringHolderImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/StringLookup.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/StringTransformer.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/SymbolExpandingTransformer.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/UnbuildablePingable.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/UnknownColorGreeterImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/UnknownScopeModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/UppercaseStringTransformer.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/YellowMarker.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AbstractAutobuildServiceModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AbstractRunnableService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviseByMarkerModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviseByMarkerModule2.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AlphabetModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AlphabetModule2.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AnnotatedServiceInterface.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AnnotatedServiceInterfaceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ArrayDecoratorMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/BuilderMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ComplexAutobuildModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecorateByMarkerModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecorateByMarkerModule2.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DecoratorModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DefaultServiceIdModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/EagerLoadViaAnnotationModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/EagerLoadViaAnnotationServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ExceptionInBindMethod.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ExceptionInConstructorModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ExceptionInConstructorServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ExtraPublicConstructorsModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/FieService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/FoeService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/MappedConfigurationModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ModuleBuilderWithId.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ModuleImplTestModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ModuleWithOverriddenObjectMethods.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/MultipleConstructorsAutobuildService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/MutlipleAutobuildServiceConstructorsModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NamedServiceModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NamedViaAnnotationServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NoDelegateDecoratorMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NoUsableContributionParameterModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericServiceInterface.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceInterface.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedServiceInterface.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedServiceInterfaceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonStaticBindMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NoopClassLoaderDelegate.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/OrderedConfigurationModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/PrimitiveDecoratorMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/PrivateConstructorModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ReadManifest.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/RunnableServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ServiceBuilderMethodFixture.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ServiceDecoratorFixture.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ServiceIdConflictMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ServiceIdViaAnnotationModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ServiceIdViaAnnotationServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ServiceIdViaMethodAnnotationServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/SimpleModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/SyntheticMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/TestAdvice.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ToStringService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ToUpperCaseStringHolder.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/TooManyContributionParametersModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/UninstantiableAutobuildServiceModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/UpcaseService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/UpcaseServiceImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/VoidBuilderMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/VoidDecoratorMethodModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/AbstractIntWrapper.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/AnnotatedBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/AnnotatedBeanSubclass.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/Bean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/BeanWithIndexedProperty.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/ExtraFilterMethod.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/ExtraServiceMethod.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/GrandparentInterface.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/LineNumberBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/MiddleFilter.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/MiddleService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/NonParallelModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/ParentInterface.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PublicFieldBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/SampleFilter.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/SampleService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/ServiceDecoratorImplSpec.groovy
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/ServiceProxySerializationSpec.groovy
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/ShadowedPublicFieldBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/SimpleAnnotation.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/SimpleService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StandardFilter.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StandardService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StartupModule2.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/StringLocationSpec.groovy
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/SubInterface.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/SymbolObjectProviderSpec.groovy
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/TargetBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/TestAnnotation.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/TextTransformer.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/ToStringFilter.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/ToStringService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/BaseGenericBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/ConcurrentTarget.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/ConcurrentTargetWrapper.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/Drivable.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/DrivableImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/FieldInjectionViaInject.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/FieldInjectionViaInjectService.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/FieldInjectionViaJavaxInject.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/FieldInjectionViaJavaxNamed.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/InjectoBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/JavaxInjectBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/NonGenericBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/NotRetainedRuntime.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/OneShotLockSubject.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/Pair.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/Playable.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/PlayableImpl.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/StringBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/StringLongPair.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/TargetMessages.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/TooManyAutobuildConstructorsBean.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/ToyTruck.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/ToyTruckImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/AdviceDemoModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/AdviceMethodMissingAdvisorParameterModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/AutobuildInjectionModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/AutobuildModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/BarneyModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/BlueMarker.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/CaseInsensitiveContributeMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/CatchAllServiceConfigurationListener.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ConcreteServiceBuilderModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ConfigurationOverrideModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ContributeByClassModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ContributedValueCoercionModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ContributionOrderModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ContributionOrderModule2.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ContributionOrderModule3.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ContributionOrderModule4.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ConventionFailureModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ConventionModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ConventionModuleImplementationNotFound.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/CountingGreeterImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/CyclicMOPModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/DecoratorList.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/DefaultMethodService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/DuplicateConfigurationOverrideModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/DuplicateFredModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/DuplicateServiceTypeModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/EagerLoadModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/EagerLoadService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/EagerLoadServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/EagerProxyReloadModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ExtraMethodsModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/FailInConstructorRunnable.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/FailedConfigurationOverrideModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/FieldResourceInjectionModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/FieldResourceService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/FieldResourceServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/FredModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/GreenMarker.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/Greeter.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/GreeterModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/GreeterModule2.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/GreeterServiceOverrideModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/HelterModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/IndirectResources.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/Indirection.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/InjectionCheck.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/InjectionCheckImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/InjectionCheckModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/IntHolder.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/IntHolderImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/IntegrationTestFixture.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/InvalidContributeDefModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/InvalidContributeDefModule2.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/InvalidContributeDefModule3.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/LocalModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/MarkerModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/MasterModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/NameListHolder.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/NameListHolder2.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/NoImplementationClassForSimpleIdModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/NonProxiedServiceModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/NonVoidAdvisorMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/OptionalContributionModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/OrderedService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/PerThreadModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/Pingable.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/PingableImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/PostInjectionMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/PreventDecorationModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/RecursiveConstructorModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/RedGreeterImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/RedMarker.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/RegistryBuilderTestModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/Rocket.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/RocketImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ScopeMismatchModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ServiceBuilderAutobuilderModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ServiceBuilderModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/ServiceIdGreeter.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/Sizer.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/SkelterModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/SpecificDecoratorModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/SpecificDecoratorModuleAgain.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/Square.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/StaticModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/StringHolder.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/StringHolderImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/StringLookup.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/StringTransformer.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/SymbolExpandingTransformer.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/UnbuildablePingable.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/UnknownColorGreeterImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/UnknownScopeModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/UppercaseStringTransformer.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/YellowMarker.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AbstractAutobuildServiceModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AbstractRunnableService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AdviceModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AdviseByMarkerModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AdviseByMarkerModule2.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AlphabetModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AlphabetModule2.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AnnotatedServiceInterface.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/AnnotatedServiceInterfaceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ArrayDecoratorMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/BuilderMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ComplexAutobuildModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/DecorateByMarkerModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/DecorateByMarkerModule2.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/DecoratorModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/DefaultServiceIdModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/EagerLoadViaAnnotationModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/EagerLoadViaAnnotationServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ExceptionInBindMethod.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ExceptionInConstructorModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ExceptionInConstructorServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ExtraPublicConstructorsModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/FieService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/FoeService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/MappedConfigurationModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ModuleBuilderWithId.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ModuleImplTestModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ModuleWithOverriddenObjectMethods.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/MultipleConstructorsAutobuildService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/MutlipleAutobuildServiceConstructorsModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NamedServiceModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NamedViaAnnotationServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NoDelegateDecoratorMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NoUsableContributionParameterModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NonAnnotatedGenericServiceInterface.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NonAnnotatedGenericSetServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NonAnnotatedGenericSetServiceInterface.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NonAnnotatedServiceInterface.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NonAnnotatedServiceInterfaceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NonStaticBindMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/NoopClassLoaderDelegate.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/OrderedConfigurationModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/PrimitiveDecoratorMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/PrivateConstructorModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ReadManifest.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/RunnableServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ServiceBuilderMethodFixture.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ServiceDecoratorFixture.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ServiceIdConflictMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ServiceIdViaAnnotationModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ServiceIdViaAnnotationServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ServiceIdViaMethodAnnotationServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/SimpleModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/SyntheticMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/TestAdvice.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ToStringService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/ToUpperCaseStringHolder.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/TooManyContributionParametersModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/UninstantiableAutobuildServiceModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/UpcaseService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/UpcaseServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/VoidBuilderMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/VoidDecoratorMethodModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/AbstractIntWrapper.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/AnnotatedBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/AnnotatedBeanSubclass.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/Bean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/BeanWithIndexedProperty.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/ExtraFilterMethod.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/ExtraServiceMethod.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/GrandparentInterface.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/LineNumberBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/MiddleFilter.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/MiddleService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/NonParallelModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/ParentInterface.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/PublicFieldBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/SampleFilter.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/SampleService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/ServiceDecoratorImplSpec.groovy
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/ServiceProxySerializationSpec.groovy
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/ShadowedPublicFieldBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/SimpleAnnotation.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/SimpleService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/StandardFilter.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/StandardService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/StartupModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/StartupModule2.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/StringLocationSpec.groovy
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/SubInterface.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/SymbolObjectProviderSpec.groovy
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/TargetBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/TestAnnotation.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/TextTransformer.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/ToStringFilter.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/services/ToStringService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/BaseGenericBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/ConcurrentTarget.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/ConcurrentTargetWrapper.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/Drivable.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/DrivableImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/FieldInjectionViaInject.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/FieldInjectionViaInjectService.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/FieldInjectionViaJavaxInject.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/FieldInjectionViaJavaxNamed.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/InjectoBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/JavaxInjectBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/NonGenericBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/NotRetainedRuntime.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/OneShotLockSubject.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/Pair.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/Playable.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/PlayableImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/StringBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/StringLongPair.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/TargetMessages.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/TooManyAutobuildConstructorsBean.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/ToyTruck.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/internal/util/ToyTruckImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/util/ExceptionWrapper.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/test/util/NonmatchingMappedConfigurationOverrideModule.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/ExceptionWrapper.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/NonmatchingMappedConfigurationOverrideModule.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/Stooge.java
 delete mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/util/Stooge.java
 rename tapestry-ioc/src/test/resources/org/apache/tapestry5/ioc/{ => test}/internal/util/TargetStrings.properties (100%)
 create mode 100644 tapestry-javadoc/src/main/java/org/apache/tapestry5/javadoc/DocCommentTreeProvider.java
 delete mode 100644 tapestry-javadoc/src/main/java/org/apache/tapestry5/javadoc/TapestryDocTaglet.java
 delete mode 100644 tapestry-test/src/main/java/org/apache/tapestry5/ioc/test/MockTester.java
 delete mode 100644 tapestry-test/src/main/java/org/apache/tapestry5/ioc/test/TestBase.java
 delete mode 100644 tapestry-test/src/main/java/org/apache/tapestry5/ioc/test/TestUtils.java
 delete mode 100644 tapestry-test/src/main/java/org/apache/tapestry5/ioc/test/package-info.java
 create mode 100644 tapestry-test/src/main/java/org/apache/tapestry5/test/ioc/MockTester.java
 create mode 100644 tapestry-test/src/main/java/org/apache/tapestry5/test/ioc/TestBase.java
 create mode 100644 tapestry-test/src/main/java/org/apache/tapestry5/test/ioc/TestUtils.java
 create mode 100644 tapestry-test/src/main/java/org/apache/tapestry5/test/ioc/package-info.java
 create mode 100644 tapestry-version-migrator/build.gradle
 create mode 100644 tapestry-version-migrator/src/main/java/org/apache/tapestry5/versionmigrator/ClassRefactor.java
 create mode 100644 tapestry-version-migrator/src/main/java/org/apache/tapestry5/versionmigrator/FileRefactorCommitParser.java
 create mode 100644 tapestry-version-migrator/src/main/java/org/apache/tapestry5/versionmigrator/Main.java
 create mode 100644 tapestry-version-migrator/src/main/java/org/apache/tapestry5/versionmigrator/TapestryVersion.java
 create mode 100644 tapestry-version-migrator/src/main/java/org/apache/tapestry5/versionmigrator/internal/ArtifactChangeRefactorCommitParser.java
 create mode 100644 tapestry-version-migrator/src/main/java/org/apache/tapestry5/versionmigrator/internal/PackageAndArtifactChangeRefactorCommitParser.java
 create mode 100644 tapestry-version-migrator/src/main/java/org/apache/tapestry5/versionmigrator/internal/PackageChangeRefactorCommitParser.java
 create mode 100644 tapestry-version-migrator/src/main/resources/org/apache/tapestry5/versionmigrator/5.7.0.properties
 create mode 100644 tapestry-version-migrator/src/main/resources/org/apache/tapestry5/versionmigrator/change-report-5.7.0.html
 create mode 100644 tapestry-version-migrator/src/test/java/org/apache/tapestry5/versionmigrator/ClassRefactorTest.java
 create mode 100644 tapestry-version-migrator/src/test/java/org/apache/tapestry5/versionmigrator/internal/ArtifactChangeRefactorCommitParserTest.java
 create mode 100644 tapestry-version-migrator/src/test/java/org/apache/tapestry5/versionmigrator/internal/PackageAndArtifactChangeRefactorCommitParserTest.java
 create mode 100644 tapestry-version-migrator/src/test/java/org/apache/tapestry5/versionmigrator/internal/PackageChangeRefactorCommitParserTest.java
 create mode 100644 tapestry-version-migrator/test-sources/ClassAtRootFolder.java
 create mode 100644 tapestry-version-migrator/test-sources/subfolder/subsubfolder/ClassAtSubFolder.java
 delete mode 100644 tapestry-webresources/src/main/java/com/yahoo/platform/yui/compressor/CssCompressor.java
 create mode 100644 tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java
 create mode 100644 tapestry-webresources/src/test/java/RunTestWebapp.java
 create mode 100644 tapestry5-annotations/src/main/java/org/apache/tapestry5/http/annotations/ImmutableSessionPersistedObject.java
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/Advise.java (100%)
 create mode 100644 tapestry5-annotations/src/main/java/org/apache/tapestry5/ioc/annotations/ComponentClasses.java
 create mode 100644 tapestry5-annotations/src/main/java/org/apache/tapestry5/ioc/annotations/ComponentLayer.java
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/Contribute.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/Decorate.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/EagerLoad.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/ImportModule.java (100%)
 create mode 100644 tapestry5-annotations/src/main/java/org/apache/tapestry5/ioc/annotations/Marker.java
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/Match.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/NotLazy.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/Operation.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/Optional.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/Order.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/PreventServiceDecoration.java (100%)
 create mode 100644 tapestry5-annotations/src/main/java/org/apache/tapestry5/ioc/annotations/Scope.java
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/ServiceId.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/Startup.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/SubModule.java (100%)
 rename {tapestry-ioc => tapestry5-annotations}/src/main/java/org/apache/tapestry5/ioc/annotations/package-info.java (100%)
 delete mode 100644 tapestry5-annotations/src/main/java/org/apache/tapestry5/services/ComponentClasses.java
 delete mode 100644 tapestry5-annotations/src/main/java/org/apache/tapestry5/services/ComponentLayer.java


[tapestry-5] 03/03: TAP5-2641: avoiding split packages

Posted by th...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit 5701b7bd8122c052fe2d921751cc8f6e0bafca5a
Author: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
AuthorDate: Sun Sep 6 12:06:31 2020 -0300

    TAP5-2641: avoiding split packages
    
    Also TAP5-2644: splitting tapestry-http out of tapestry-core
    
    TAP5-2641: moving all BeanModel classes to the same parent package
    
    TAP5-2641: reorganizing commons under the same package
    
    TAP5-2641: fixing Hibernate-related split packages
    
    TAP5-2641: moving annotations from tapestry-ioc to tapestry5-annotations
    
    to avoid split packages, with a nice side-effect of providing
    more projects to use Tapestry-IoC annotations without having
    a dependency on Tapestry-IoC itself.
    
    TAP5-2641: moving more classes around to avoid split packages
    
    TAP5-2641: fixing Groovy test imports
    
    TAP5-2641: move split package avoidance
    
    TAP5-2641: fixing JavaDoc errors
    
    TAP5-2641: fixing JavaDoc errors
    
    TAP5-2641: fixing JavaDoc errors
    
    TAP5-2641: fixing JavaDoc errors
    
    TAP5-2641: moving ServiceStrings.properties to right place
    
    TAP5-2641: fixing test broken by class package change
    
    TAP5-2641: fixing Tapestry-IoC broken tests
    
    TAP5-2641: fixing webresources broken tests
    
    Attempt to get the combinedJacocoReport task to work
    
    Attempt to get the combinedJacocoReport task to work (x2)
    
    Attempt to get the combinedJacocoReport task to work (x3)
    
    Attempt to get the combinedJacocoReport task to work (x4)
    
    Attempt to get the combinedJacocoReport task to work (x5)
    
    TAP5-2641: avoiding split packages
    
    TAP5-2641: avoiding split packages
    
    TAP5-2641: avoiding split packages
    
    TAP5-2641: setting automatic module name
    
    Bumping versiont to 5.7.0.
    
    TAP5-2641: fixing archetype after refactoring
    
    TAP5-2641: dropping 5 from automatic module name
    
    TAP5-2643: NPE in Label when corresponding form field isn't rendered
    
    TAP5-2644: split tapestry-http out of tapestry-core
    
    TAP5-2644: split tapestry-http out of tapestry-core
    
    TAP5-2641: partial implementation of tapestry-version-migrator
    
    TAP5-2641: fixing JavaDoc errors.
    
    TAP5-2641: moving CssCompressor to a better package
    
    TAP5-2641: fixing JavaDoc errors.
    
    TAP5-2641: fixing JavaDoc errors.
    
    TAP5-2644: trying to fix test failure in ClojureBuilderSpec
    
    TAP5-2644: trying to fix test failure in OverrideMethodsTest
    
    TAP5-2644: trying to fix test failure in CoreBehaviorsTest
    
    TAP5-2644: debugging test failure in CoreBehaviorsTest
    
    TAP5-2644: finally fixing failure in CoreBehaviorsTest
    
    TAP5-2644: fixing tapestry-spring test failures
    
    TAP5-2641: first working version of migrator tool
    
    TAP5-2641: fixing JavaDoc errors in migrator
    
    TAP5-2641: fixing of migrator tool tests
    
    TAP5-2641: fixing migrator tool manifest file
    
    TAP5-2588: moving dependencies from plastic to tapestry-core
    
    TAP5-2588: adding JAXB dependency to tapestry-hibernate-core
    
    TAP5-2588: adding javax.annotation dependency to tapestry-ioc
    
    Fixing failing test FormTests.create_select_model_coercion
    
    TAP5-2641: fixing automatic module names
    
    TAP5-2641: fixing automatic module names
---
 .gitignore                                         |    1 +
 .../internal/antlr/PropertyExpressionLexer.g       |  163 ++
 .../internal/antlr/PropertyExpressionParser.g      |  105 +
 .../internal/antlr/PropertyExpressionLexer.g       |  163 --
 .../internal/antlr/PropertyExpressionParser.g      |  105 -
 .../org/apache/tapestry5/beanmodel/BeanModel.java  |    2 +-
 .../beanmodel/BeanModelSourceBuilder.java          |   28 +-
 .../apache/tapestry5/beanmodel/BeanModelUtils.java |    4 +-
 .../tapestry5/beanmodel/PropertyConduit.java       |    2 +-
 .../tapestry5/beanmodel/PropertyConduit2.java      |    2 +-
 .../apache/tapestry5/beanmodel/PropertyModel.java  |    4 +-
 .../internal/beanmodel/BeanModelImpl.java          |   14 +-
 .../internal/beanmodel/PropertyModelImpl.java      |    5 +-
 .../internal/services/BeanModelSourceImpl.java     |   28 +-
 .../services/ClassPropertyAdapterImpl.java         |   14 +-
 .../services/CoercingPropertyConduitWrapper.java   |    2 +-
 .../internal/services/LiteralPropertyConduit.java  |    4 +-
 .../internal/services/PropertyAccessImpl.java      |    6 +-
 .../internal/services/PropertyAdapterImpl.java     |   18 +-
 .../internal/services/PropertyConduitDelegate.java |    6 +-
 .../services/PropertyConduitSourceImpl.java        |   89 +-
 .../apache/tapestry5/beanmodel/package-info.java   |   19 +
 .../beanmodel/services/BeanModelSource.java        |    6 +-
 .../services/PlasticProxyFactoryImpl.java          |   12 +-
 .../beanmodel/services/PropertyConduitSource.java  |    4 +-
 build.gradle                                       |   12 +-
 .../tapestry5/commons/AnnotationProvider.java      |   33 +
 .../apache/tapestry5/commons/Configuration.java    |   51 +
 .../org/apache/tapestry5/commons/Locatable.java    |   27 +
 .../org/apache/tapestry5/commons/Location.java     |   38 +
 .../tapestry5/commons/MappedConfiguration.java     |   79 +
 .../apache/tapestry5/commons/MessageFormatter.java |   32 +
 .../org/apache/tapestry5/commons/Messages.java     |   61 +
 .../apache/tapestry5/commons/ObjectCreator.java    |   27 +
 .../apache/tapestry5/commons/ObjectLocator.java    |  137 +
 .../apache/tapestry5/commons/ObjectProvider.java   |   44 +
 .../tapestry5/commons/OrderedConfiguration.java    |   82 +
 .../org/apache/tapestry5/commons/Resource.java     |  108 +
 .../commons/internal/BasicDataTypeAnalyzers.java   |  138 +
 .../commons/internal/BasicTypeCoercions.java       |  342 +++
 .../commons/internal/NullAnnotationProvider.java   |   35 +
 .../AccessableObjectAnnotationProvider.java        |   46 +
 .../services/AnnotationDataTypeAnalyzer.java       |   32 +
 .../internal/services/AnnotationProviderChain.java |   59 +
 .../internal/services/CompoundCoercion.java        |   54 +
 .../internal/services/DefaultDataTypeAnalyzer.java |   60 +
 .../internal/services/GenericsResolverImpl.java    |  627 +++++
 .../commons/internal/services/ServiceMessages.java |   68 +
 .../commons/internal/services/StringInterner.java  |   43 +
 .../internal/services/StringInternerImpl.java      |   53 +
 .../commons/internal/services/StringLocation.java  |   65 +
 .../commons/internal/services/TypeCoercerImpl.java |  517 ++++
 .../commons/internal/util/GenericsUtils.java       |  134 +
 .../commons/internal/util/InheritanceSearch.java   |  158 ++
 .../internal/util/InternalCommonsUtils.java        |  381 +++
 .../commons/internal/util/LockSupport.java         |   89 +
 .../internal/util/MessageFormatterImpl.java        |   65 +
 .../commons/internal/util/MessagesImpl.java        |   79 +
 .../commons/internal/util/TapestryException.java   |   75 +
 .../commons/services/ClassPropertyAdapter.java     |   83 +
 .../tapestry5/commons/services/Coercion.java       |   31 +
 .../tapestry5/commons/services/CoercionTuple.java  |  145 +
 .../commons/services/DataTypeAnalyzer.java         |   45 +
 .../commons/services/GenericsResolver.java         |  159 ++
 .../commons/services/InvalidationEventHub.java     |   58 +
 .../commons/services/InvalidationListener.java     |   33 +
 .../commons/services/PlasticProxyFactory.java      |  174 ++
 .../tapestry5/commons/services/PropertyAccess.java |   75 +
 .../commons/services/PropertyAdapter.java          |  118 +
 .../tapestry5/commons/services/TypeCoercer.java    |   86 +
 .../tapestry5/commons/util/AbstractMessages.java   |   93 +
 .../tapestry5/commons/util/AvailableValues.java    |   86 +
 .../tapestry5/commons/util/CaseInsensitiveMap.java |  573 ++++
 .../tapestry5/commons/util/CollectionFactory.java  |  142 +
 .../tapestry5/commons/util/CommonsUtils.java       |   61 +
 .../tapestry5/commons/util/ExceptionUtils.java     |  115 +
 .../tapestry5/commons/util/IntegerRange.java       |  125 +
 .../apache/tapestry5/commons/util/MultiKey.java    |   86 +
 .../org/apache/tapestry5/commons/util/Stack.java   |  171 ++
 .../tapestry5/commons/util/StrategyRegistry.java   |  171 ++
 .../commons/util/StringToEnumCoercion.java         |   86 +
 .../tapestry5/commons/util/TimeInterval.java       |  192 ++
 .../commons/util/UnknownValueException.java        |   47 +
 .../services/AnnotationDataTypeAnalyzer.java       |   32 -
 .../internal/services/DefaultDataTypeAnalyzer.java |   61 -
 .../internal/services/GenericsResolverImpl.java    |  627 -----
 .../internal/services/StringInterner.java          |   43 -
 .../internal/services/StringInternerImpl.java      |   53 -
 .../tapestry5/internal/util/IntegerRange.java      |  125 -
 .../apache/tapestry5/internal/util/MultiKey.java   |   86 -
 .../apache/tapestry5/ioc/AnnotationProvider.java   |   33 -
 .../org/apache/tapestry5/ioc/Configuration.java    |   51 -
 .../java/org/apache/tapestry5/ioc/Locatable.java   |   27 -
 .../java/org/apache/tapestry5/ioc/Location.java    |   38 -
 .../apache/tapestry5/ioc/MappedConfiguration.java  |   79 -
 .../org/apache/tapestry5/ioc/MessageFormatter.java |   32 -
 .../java/org/apache/tapestry5/ioc/Messages.java    |   61 -
 .../org/apache/tapestry5/ioc/ObjectCreator.java    |   27 -
 .../org/apache/tapestry5/ioc/ObjectLocator.java    |  137 -
 .../apache/tapestry5/ioc/OrderedConfiguration.java |   82 -
 .../java/org/apache/tapestry5/ioc/Resource.java    |  108 -
 .../ioc/internal/BasicDataTypeAnalyzers.java       |  138 -
 .../tapestry5/ioc/internal/BasicTypeCoercions.java |  342 ---
 .../ioc/internal/NullAnnotationProvider.java       |   35 -
 .../AccessableObjectAnnotationProvider.java        |   46 -
 .../internal/services/AnnotationProviderChain.java |   59 -
 .../ioc/internal/services/CompoundCoercion.java    |   54 -
 .../ioc/internal/services/ServiceMessages.java     |   68 -
 .../ioc/internal/services/StringLocation.java      |   65 -
 .../ioc/internal/services/TypeCoercerImpl.java     |  511 ----
 .../ioc/internal/util/CollectionFactory.java       |  137 -
 .../tapestry5/ioc/internal/util/GenericsUtils.java |  134 -
 .../ioc/internal/util/InheritanceSearch.java       |  157 --
 .../ioc/internal/util/InternalCommonsUtils.java    |  388 ---
 .../tapestry5/ioc/internal/util/LockSupport.java   |   89 -
 .../ioc/internal/util/MessageFormatterImpl.java    |   65 -
 .../tapestry5/ioc/internal/util/MessagesImpl.java  |   74 -
 .../ioc/internal/util/TapestryException.java       |   75 -
 .../ioc/services/ClassPropertyAdapter.java         |   83 -
 .../apache/tapestry5/ioc/services/Coercion.java    |   31 -
 .../tapestry5/ioc/services/CoercionTuple.java      |  145 -
 .../ioc/services/PlasticProxyFactory.java          |  174 --
 .../tapestry5/ioc/services/PropertyAccess.java     |   75 -
 .../tapestry5/ioc/services/PropertyAdapter.java    |  119 -
 .../apache/tapestry5/ioc/services/TypeCoercer.java |   86 -
 .../tapestry5/ioc/util/AbstractMessages.java       |   94 -
 .../apache/tapestry5/ioc/util/AvailableValues.java |   87 -
 .../tapestry5/ioc/util/CaseInsensitiveMap.java     |  573 ----
 .../apache/tapestry5/ioc/util/ExceptionUtils.java  |  115 -
 .../java/org/apache/tapestry5/ioc/util/Stack.java  |  173 --
 .../tapestry5/ioc/util/StrategyRegistry.java       |  172 --
 .../apache/tapestry5/ioc/util/TimeInterval.java    |  193 --
 .../tapestry5/ioc/util/UnknownValueException.java  |   47 -
 .../tapestry5/services/DataTypeAnalyzer.java       |   46 -
 .../tapestry5/services/GenericsResolver.java       |  159 --
 .../tapestry5/services/InvalidationEventHub.java   |   58 -
 .../tapestry5/services/InvalidationListener.java   |   33 -
 .../tapestry5/util/StringToEnumCoercion.java       |   90 -
 .../internal/services/ServiceStrings.properties    |    0
 .../internal/GuavaGenericsResolver.java            |   64 +
 .../GuavaGenericsResolver.java                     |   63 -
 .../org.apache.tapestry5.services.GenericsResolver |    2 +-
 .../AbstractBeanModelSourceImplTest.java           |   20 +-
 .../GuavaBeanModelSourceImplTest.java              |    4 +-
 plastic/build.gradle                               |    1 -
 .../apache/tapestry5/internal/plastic/Cache.java   |    4 +-
 .../plastic/PlasticClassTransformation.java        |    2 +-
 .../src/main/java/services/AppModule.java          |    4 +-
 .../src/main/java/services/DevelopmentModule.java  |    2 +-
 .../src/main/java/services/QaModule.java           |    4 +-
 settings.gradle                                    |    4 +-
 .../beanvalidator/modules/BeanValidatorModule.java |    6 +-
 .../tapestry5/internal/beanvalidator/BaseCCD.java  |    4 +-
 .../internal/beanvalidator/BeanFieldValidator.java |    2 +-
 .../BeanFieldValidatorDefaultSource.java           |    4 +-
 .../ClientConstraintDescriptorImpl.java            |    4 +-
 .../org/example/testapp/services/AppModule.java    |    9 +-
 .../tapestry5/clojure/modules/ClojureModule.java   |    2 +-
 .../internal/clojure/ClojureBuilderImpl.java       |    4 +-
 .../clojure/tests/ClojureBuilderSpec.groovy        |    1 +
 tapestry-core/build.gradle                         |    7 +
 .../src/main/java/org/apache/tapestry5/Asset.java  |    4 +-
 .../BaseOptimizedSessionPersistedObject.java       |    4 +-
 .../main/java/org/apache/tapestry5/Binding.java    |    2 +-
 .../apache/tapestry5/BlockNotFoundException.java   |    4 +-
 .../org/apache/tapestry5/ComponentResources.java   |   12 +-
 .../apache/tapestry5/ComponentResourcesCommon.java |    3 +-
 .../java/org/apache/tapestry5/ContentType.java     |  215 --
 .../java/org/apache/tapestry5/CookieBuilder.java   |    2 +-
 .../java/org/apache/tapestry5/EventConstants.java  |    1 +
 .../java/org/apache/tapestry5/EventContext.java    |    2 +-
 .../tapestry5/ExceptionHandlerAssistant.java       |    1 +
 .../java/org/apache/tapestry5/FieldValidator.java  |    2 +-
 .../src/main/java/org/apache/tapestry5/Link.java   |  180 --
 .../java/org/apache/tapestry5/LinkSecurity.java    |   61 -
 .../java/org/apache/tapestry5/MarkupUtils.java     |    4 +-
 .../tapestry5/OptimizedSessionPersistedObject.java |   34 -
 .../java/org/apache/tapestry5/PageCallback.java    |    7 +-
 .../org/apache/tapestry5/PersistenceConstants.java |    2 +-
 .../org/apache/tapestry5/PropertyOverrides.java    |    2 +-
 .../java/org/apache/tapestry5/StreamResponse.java  |    4 +-
 .../java/org/apache/tapestry5/SymbolConstants.java |   62 +-
 .../org/apache/tapestry5/TapestryConstants.java    |    4 +-
 .../java/org/apache/tapestry5/TapestryFilter.java  |  167 +-
 .../main/java/org/apache/tapestry5/Translator.java |    2 +-
 .../apache/tapestry5/ValidationTrackerImpl.java    |    2 +-
 .../main/java/org/apache/tapestry5/Validator.java  |    2 +-
 .../java/org/apache/tapestry5/ValueEncoder.java    |    2 +-
 .../org/apache/tapestry5/ajax/MultiZoneUpdate.java |    2 +-
 .../org/apache/tapestry5/alerts/AlertStorage.java  |    6 +-
 .../annotations/ActivationRequestParameter.java    |    4 +-
 .../ImmutableSessionPersistedObject.java           |   36 -
 .../org/apache/tapestry5/annotations/Persist.java  |    2 +-
 .../apache/tapestry5/annotations/PublishEvent.java |    2 +-
 .../tapestry5/annotations/RequestParameter.java    |    2 +-
 .../tapestry5/annotations/SessionAttribute.java    |    3 +-
 .../apache/tapestry5/annotations/SessionState.java |    2 +-
 .../apache/tapestry5/beaneditor/package-info.java  |   19 -
 .../corelib/base/AbstractComponentEventLink.java   |    4 +-
 .../tapestry5/corelib/base/AbstractField.java      |    4 +-
 .../corelib/base/AbstractInternalPage.java         |    2 +-
 .../tapestry5/corelib/base/AbstractLink.java       |    5 +-
 .../corelib/base/AbstractPropertyOutput.java       |    4 +-
 .../tapestry5/corelib/base/AbstractTextField.java  |    2 +-
 .../tapestry5/corelib/components/ActionLink.java   |    2 +-
 .../tapestry5/corelib/components/AjaxFormLoop.java |    3 +-
 .../tapestry5/corelib/components/Alerts.java       |    4 +-
 .../tapestry5/corelib/components/BeanEditor.java   |    2 +-
 .../tapestry5/corelib/components/Checklist.java    |    4 +-
 .../tapestry5/corelib/components/DateField.java    |    2 +-
 .../tapestry5/corelib/components/DevTool.java      |    8 +-
 .../tapestry5/corelib/components/Dynamic.java      |    4 +-
 .../tapestry5/corelib/components/Errors.java       |    2 +-
 .../tapestry5/corelib/components/EventLink.java    |    2 +-
 .../apache/tapestry5/corelib/components/Form.java  |   13 +-
 .../apache/tapestry5/corelib/components/Grid.java  |    4 +-
 .../tapestry5/corelib/components/GridColumns.java  |    4 +-
 .../tapestry5/corelib/components/GridPager.java    |    5 +-
 .../tapestry5/corelib/components/Hidden.java       |    2 +-
 .../corelib/components/Html5DateField.java         |    2 +-
 .../apache/tapestry5/corelib/components/Label.java |    3 +-
 .../tapestry5/corelib/components/LinkSubmit.java   |    2 +-
 .../apache/tapestry5/corelib/components/Loop.java  |    2 +-
 .../tapestry5/corelib/components/PageLink.java     |    8 +-
 .../corelib/components/ProgressiveDisplay.java     |    1 +
 .../corelib/components/PropertyEditor.java         |    4 +-
 .../tapestry5/corelib/components/RadioGroup.java   |    4 +-
 .../tapestry5/corelib/components/Select.java       |    7 +-
 .../tapestry5/corelib/components/Submit.java       |    2 +-
 .../apache/tapestry5/corelib/components/Tree.java  |    1 +
 .../corelib/internal/FormSupportImpl.java          |    6 +-
 .../tapestry5/corelib/mixins/Autocomplete.java     |    3 +-
 .../tapestry5/corelib/mixins/ZoneRefresh.java      |    1 +
 .../corelib/pages/ComponentLibraries.java          |    4 +-
 .../tapestry5/corelib/pages/ExceptionReport.java   |   17 +-
 .../tapestry5/corelib/pages/PageCatalog.java       |    8 +-
 .../corelib/pages/PropertyEditBlocks.java          |    2 +-
 .../tapestry5/corelib/pages/ServiceStatus.java     |    6 +-
 .../tapestry5/corelib/pages/T5Dashboard.java       |    3 +-
 .../apache/tapestry5/dom/DefaultMarkupModel.java   |    4 +-
 .../java/org/apache/tapestry5/dom/Document.java    |    2 +-
 .../java/org/apache/tapestry5/dom/Element.java     |    4 +-
 .../org/apache/tapestry5/dom/Html5MarkupModel.java |    2 +-
 .../java/org/apache/tapestry5/dom/MapHolder.java   |    4 +-
 .../internal/AbstractContributionDef.java          |   40 -
 .../internal/ContextResourceSymbolProvider.java    |    4 +-
 .../internal/DefaultValueLabelProvider.java        |    2 +-
 .../tapestry5/internal/EmptyEventContext.java      |    3 +-
 .../tapestry5/internal/InternalConstants.java      |   37 +-
 .../apache/tapestry5/internal/InternalSymbols.java |   14 -
 .../tapestry5/internal/PropertyOverridesImpl.java  |    2 +-
 .../internal/ServletContextSymbolProvider.java     |   44 -
 .../internal/SingleKeySymbolProvider.java          |   41 -
 .../tapestry5/internal/SyntheticModuleDef.java     |   85 -
 .../SyntheticSymbolSourceContributionDef.java      |   57 -
 .../tapestry5/internal/TapestryAppInitializer.java |  249 --
 .../tapestry5/internal/TapestryInternalUtils.java  |   21 +-
 .../internal/alerts/AlertManagerImpl.java          |    2 +-
 .../internal/beaneditor/EnvironmentMessages.java   |    2 +-
 .../beaneditor/MessagesConstraintGenerator.java    |    4 +-
 .../PrimitiveFieldConstraintGenerator.java         |    2 +-
 .../ValidateAnnotationConstraintGenerator.java     |    2 +-
 .../internal/bindings/AbstractBinding.java         |    4 +-
 .../tapestry5/internal/bindings/AssetBinding.java  |    2 +-
 .../internal/bindings/AssetBindingFactory.java     |    2 +-
 .../tapestry5/internal/bindings/BlockBinding.java  |    2 +-
 .../internal/bindings/BlockBindingFactory.java     |    2 +-
 .../internal/bindings/ComponentBinding.java        |    2 +-
 .../internal/bindings/ComponentBindingFactory.java |    2 +-
 .../internal/bindings/ContextBindingFactory.java   |    2 +-
 .../internal/bindings/InvariantBinding.java        |    2 +-
 .../internal/bindings/LiteralBinding.java          |    4 +-
 .../internal/bindings/LiteralBindingFactory.java   |    2 +-
 .../internal/bindings/MessageBindingFactory.java   |    2 +-
 .../bindings/NullFieldStrategyBindingFactory.java  |    2 +-
 .../tapestry5/internal/bindings/PropBinding.java   |    4 +-
 .../internal/bindings/PropBindingFactory.java      |    4 +-
 .../internal/bindings/RenderVariableBinding.java   |    2 +-
 .../bindings/RenderVariableBindingFactory.java     |    2 +-
 .../internal/bindings/SymbolBindingFactory.java    |    2 +-
 .../internal/bindings/TranslateBindingFactory.java |    4 +-
 .../internal/bindings/ValidateBindingFactory.java  |    6 +-
 .../dynamic/DynamicTemplateParserImpl.java         |    8 +-
 .../internal/dynamic/DynamicTemplateSaxParser.java |   10 +-
 .../internal/event/InvalidationEventHubImpl.java   |    8 +-
 .../internal/grid/CollectionGridDataSource.java    |    2 +-
 .../internal/gzip/BufferedGZipOutputStream.java    |  143 -
 .../internal/gzip/GZIPEnabledResponse.java         |   71 -
 .../apache/tapestry5/internal/gzip/GZipFilter.java |   61 -
 .../internal/model/MutableComponentModelImpl.java  |    6 +-
 .../model/MutableEmbeddedComponentModelImpl.java   |    4 +-
 .../internal/pageload/AssemblerContext.java        |    2 +-
 .../internal/pageload/ComponentAssembler.java      |    4 +-
 .../internal/pageload/ComponentAssemblerImpl.java  |   10 +-
 .../pageload/DefaultComponentResourceLocator.java  |    2 +-
 .../pageload/EmbeddedComponentAssembler.java       |    2 +-
 .../pageload/EmbeddedComponentAssemblerImpl.java   |    6 +-
 .../tapestry5/internal/pageload/PageAssembly.java  |    8 +-
 .../internal/pageload/PageLoaderImpl.java          |   20 +-
 .../internal/pageload/PagePreloaderImpl.java       |    4 +-
 .../tapestry5/internal/parser/AttributeToken.java  |    2 +-
 .../tapestry5/internal/parser/BlockToken.java      |    2 +-
 .../tapestry5/internal/parser/BodyToken.java       |    2 +-
 .../tapestry5/internal/parser/CDATAToken.java      |    2 +-
 .../tapestry5/internal/parser/CommentToken.java    |    2 +-
 .../internal/parser/ComponentTemplate.java         |    6 +-
 .../internal/parser/ComponentTemplateImpl.java     |   10 +-
 .../apache/tapestry5/internal/parser/DTDToken.java |    2 +-
 .../parser/DefineNamespacePrefixToken.java         |    2 +-
 .../tapestry5/internal/parser/EndElementToken.java |    2 +-
 .../tapestry5/internal/parser/ExpansionToken.java  |    2 +-
 .../internal/parser/ExtensionPointToken.java       |    2 +-
 .../tapestry5/internal/parser/ParameterToken.java  |    2 +-
 .../internal/parser/StartComponentToken.java       |    2 +-
 .../internal/parser/StartElementToken.java         |    2 +-
 .../tapestry5/internal/parser/TemplateToken.java   |    2 +-
 .../tapestry5/internal/parser/TextToken.java       |    2 +-
 .../renderers/AvailableValuesRenderer.java         |    2 +-
 .../renderers/ComponentResourcesRenderer.java      |    2 +-
 .../internal/renderers/LocationRenderer.java       |    6 +-
 .../internal/renderers/RequestRenderer.java        |   10 +-
 .../internal/services/AbstractAssetFactory.java    |    6 +-
 .../AbstractSessionPersistentFieldStrategy.java    |   10 +-
 .../services/AjaxComponentEventRequestHandler.java |    4 +-
 .../tapestry5/internal/services/AjaxFilter.java    |    2 +-
 .../AjaxLinkComponentEventResultProcessor.java     |    4 +-
 .../AjaxPageNameComponentEventResultProcessor.java |    4 +-
 .../services/AjaxPartialResponseRendererImpl.java  |    9 +-
 .../internal/services/ApplicationGlobalsImpl.java  |   47 -
 .../ApplicationMessageCatalogObjectProvider.java   |   10 +-
 .../ApplicationStackTraceElementAnalyzer.java      |    4 +-
 .../services/ApplicationStateManagerImpl.java      |    4 +-
 .../internal/services/ArrayEventContext.java       |    2 +-
 .../internal/services/AssetDispatcher.java         |    8 +-
 .../internal/services/AssetInjectionProvider.java  |    2 +-
 .../internal/services/AssetObjectProvider.java     |    8 +-
 .../internal/services/AssetSourceImpl.java         |   10 +-
 .../services/AttributeExpansionBinding.java        |    2 +-
 .../internal/services/BaseURLSourceImpl.java       |   86 -
 .../services/BeanBlockOverrideSourceImpl.java      |    2 +-
 .../internal/services/BindingSourceImpl.java       |    7 +-
 .../internal/services/BlockInjectionProvider.java  |    2 +-
 .../internal/services/CheckForUpdatesFilter.java   |   14 +-
 .../services/ClasspathAssetAliasManagerImpl.java   |    8 +-
 .../internal/services/ClasspathAssetFactory.java   |    4 +-
 .../services/ClientBehaviorSupportImpl.java        |    2 +-
 .../internal/services/ClientDataEncoderImpl.java   |    4 +-
 .../services/ClientPersistentFieldStorage.java     |    2 +-
 .../services/ClientPersistentFieldStorageImpl.java |    8 +-
 .../services/ClientPersistentFieldStrategy.java    |    2 +-
 .../internal/services/ClusteredSessionImpl.java    |  106 -
 .../services/CommonResourcesInjectionProvider.java |    6 +-
 .../internal/services/ComponentClassCacheImpl.java |   14 +-
 .../services/ComponentClassResolverImpl.java       |    8 +-
 .../services/ComponentDefaultProviderImpl.java     |    4 +-
 .../services/ComponentEventDispatcher.java         |    6 +-
 .../services/ComponentEventLinkEncoderImpl.java    |   12 +-
 .../services/ComponentEventRequestHandlerImpl.java |    4 +-
 .../services/ComponentInstantiatorSource.java      |    4 +-
 .../services/ComponentInstantiatorSourceImpl.java  |   44 +-
 .../services/ComponentMessagesSourceImpl.java      |   12 +-
 .../internal/services/ComponentSourceImpl.java     |    2 +-
 .../internal/services/ComponentTemplateSource.java |    2 +-
 .../services/ComponentTemplateSourceImpl.java      |   18 +-
 .../internal/services/ContextAssetFactory.java     |    6 +-
 .../tapestry5/internal/services/ContextImpl.java   |  110 -
 .../internal/services/ContextPathEncoderImpl.java  |    2 +-
 .../internal/services/ContextResource.java         |    4 +-
 .../tapestry5/internal/services/CookiesImpl.java   |    8 +-
 .../services/DefaultInjectionProvider.java         |    4 +-
 .../services/DefaultRequestExceptionHandler.java   |   10 +-
 .../DefaultSessionPersistedObjectAnalyzer.java     |   43 -
 .../services/DeferredResponseRenderer.java         |    2 +-
 .../internal/services/DocumentLinkerImpl.java      |    2 +-
 .../services/EndOfRequestEventHubImpl.java         |    4 +-
 .../internal/services/EnumValueEncoderFactory.java |    4 +-
 .../internal/services/EnumValueLabelProvider.java  |    2 +-
 .../internal/services/EnvironmentImpl.java         |    6 +-
 .../services/EnvironmentalShadowBuilderImpl.java   |    2 +-
 .../internal/services/ExternalUrlAssetFactory.java |    4 +-
 .../internal/services/FieldTranslatorImpl.java     |    2 +-
 .../services/FieldTranslatorSourceImpl.java        |    6 +-
 .../services/FieldValidationSupportImpl.java       |    6 +-
 .../services/FieldValidatorDefaultSourceImpl.java  |    7 +-
 .../internal/services/FieldValidatorImpl.java      |    2 +-
 .../services/FieldValidatorSourceImpl.java         |   12 +-
 .../services/FlashPersistentFieldStrategy.java     |    4 +-
 .../services/FormControlNameManagerImpl.java       |    2 +-
 .../services/GenericValueEncoderFactory.java       |    2 +-
 .../tapestry5/internal/services/HeartbeatImpl.java |    6 +-
 .../HttpErrorComponentEventResultProcessor.java    |    2 +-
 .../internal/services/IgnoredPathsFilter.java      |    4 +-
 .../InternalComponentInvalidationEventHub.java     |    4 +-
 .../InternalComponentInvalidationEventHubImpl.java |    4 +-
 .../services/JSONArrayEventResultProcessor.java    |    7 +-
 .../internal/services/LinkDecorationListener.java  |    2 +-
 .../tapestry5/internal/services/LinkImpl.java      |    8 +-
 .../tapestry5/internal/services/LinkSource.java    |    4 +-
 .../internal/services/LinkSourceImpl.java          |    8 +-
 .../internal/services/LocalizationSetterImpl.java  |    4 +-
 .../tapestry5/internal/services/MapMessages.java   |   11 +-
 .../internal/services/MarkupWriterFactoryImpl.java |    2 +-
 .../internal/services/MessagesBundle.java          |    4 +-
 .../internal/services/MessagesSource.java          |    6 +-
 .../internal/services/MessagesSourceImpl.java      |   10 +-
 .../internal/services/MetaDataLocatorImpl.java     |    8 +-
 .../internal/services/ModuleInitsManager.java      |    2 +-
 .../services/NullFieldStrategySourceImpl.java      |    4 +-
 .../ObjectComponentEventResultProcessor.java       |    4 +-
 .../OptimizedSessionPersistedObjectAnalyzer.java   |   26 -
 .../PageActivationContextCollectorImpl.java        |   10 +-
 .../internal/services/PageContentTypeAnalyzer.java |    4 +-
 .../services/PageContentTypeAnalyzerImpl.java      |    6 +-
 .../internal/services/PageElementFactory.java      |    2 +-
 .../internal/services/PageElementFactoryImpl.java  |   10 +-
 .../PageNameComponentEventResultProcessor.java     |    2 +-
 .../internal/services/PageNameMetaInjector.java    |    2 +-
 .../internal/services/PageRenderDispatcher.java    |    6 +-
 .../services/PageRenderLinkSourceImpl.java         |    2 +-
 .../internal/services/PageRenderQueueImpl.java     |    4 +-
 .../services/PageRenderRequestHandlerImpl.java     |    2 +-
 .../services/PageResponseRendererImpl.java         |    6 +-
 .../tapestry5/internal/services/PageSource.java    |    2 +-
 .../internal/services/PageSourceImpl.java          |    6 +-
 .../services/PartialTemplateRendererImpl.java      |    2 +-
 .../internal/services/PathConstructorImpl.java     |    3 +-
 .../services/PersistentFieldBundleImpl.java        |    2 +-
 .../services/PersistentFieldManagerImpl.java       |    6 +-
 .../internal/services/PersistentLocaleImpl.java    |    2 +-
 .../ProductionModeUnknownComponentFilter.java      |    4 +-
 .../services/PropertyValueLabelProvider.java       |    6 +-
 .../internal/services/ReloadHelperImpl.java        |    6 +-
 .../internal/services/RenderQueueException.java    |    2 +-
 .../internal/services/RenderQueueImpl.java         |    6 +-
 .../internal/services/RequestErrorFilter.java      |   10 +-
 .../internal/services/RequestGlobalsImpl.java      |   84 -
 .../tapestry5/internal/services/RequestImpl.java   |  229 --
 .../internal/services/RequestOperationTracker.java |    2 +-
 .../internal/services/RequestPageCacheImpl.java    |    6 +-
 .../internal/services/RequestSecurityManager.java  |    4 +-
 .../services/RequestSecurityManagerImpl.java       |    8 +-
 .../internal/services/ResourceDigestManager.java   |    4 +-
 .../services/ResourceDigestManagerImpl.java        |    4 +-
 .../internal/services/ResourceStreamer.java        |    4 +-
 .../internal/services/ResourceStreamerImpl.java    |   12 +-
 .../services/ResponseCompressionAnalyzerImpl.java  |   83 -
 .../tapestry5/internal/services/ResponseImpl.java  |  135 -
 .../internal/services/ResponseRendererImpl.java    |    2 +-
 .../services/RestoreDirtySessionObjects.java       |    6 +-
 .../internal/services/RootPathDispatcher.java      |    6 +-
 .../internal/services/SaxTemplateParser.java       |   10 +-
 .../internal/services/SelectModelFactoryImpl.java  |    4 +-
 .../services/ServiceAnnotationObjectProvider.java  |    6 +-
 .../services/ServiceInjectionProvider.java         |    2 +-
 ...SessionApplicationStatePersistenceStrategy.java |    4 +-
 .../tapestry5/internal/services/SessionImpl.java   |  122 -
 .../tapestry5/internal/services/SessionLock.java   |   36 -
 .../services/SessionPersistentFieldStrategy.java   |    4 +-
 .../internal/services/StaticFilesFilter.java       |   10 +-
 .../services/StreamPageContentResultProcessor.java |    6 +-
 .../services/StreamResponseResultProcessor.java    |    2 +-
 .../internal/services/TapestrySessionFactory.java  |   29 -
 .../services/TapestrySessionFactoryImpl.java       |  184 --
 .../internal/services/TemplateParser.java          |    2 +-
 .../internal/services/TemplateParserImpl.java      |    2 +-
 .../internal/services/TranslatorSourceImpl.java    |   12 +-
 .../services/TypeCoercedValueEncoderFactory.java   |    4 +-
 .../tapestry5/internal/services/UrlAsset.java      |    2 +-
 .../tapestry5/internal/services/UrlResource.java   |    2 +-
 .../ValidationConstraintGeneratorImpl.java         |    4 +-
 .../internal/services/ValueEncoderSourceImpl.java  |    8 +-
 .../tapestry5/internal/services/XMLToken.java      |    2 +-
 .../internal/services/XMLTokenStream.java          |    8 +-
 .../services/ajax/AjaxFormUpdateFilter.java        |    2 +-
 .../services/ajax/AjaxResponseRendererImpl.java    |    4 +-
 .../services/ajax/JavaScriptSupportImpl.java       |    2 +-
 .../ajax/MultiZoneUpdateEventResultProcessor.java  |    4 +-
 .../assets/AssetChecksumGeneratorImpl.java         |    4 +-
 .../services/assets/AssetPathConstructorImpl.java  |    4 +-
 .../internal/services/assets/CSSURLRewriter.java   |    4 +-
 .../internal/services/assets/ChecksumPath.java     |    2 +-
 .../assets/ClasspathAssetRequestHandler.java       |    6 +-
 .../services/assets/CompressionAnalyzerImpl.java   |    2 +-
 .../services/assets/ContentTypeAnalyzerImpl.java   |    4 +-
 .../assets/ContextAssetRequestHandler.java         |    6 +-
 .../internal/services/assets/DelegatingSRS.java    |    4 +-
 .../assets/JavaScriptStackAssemblerImpl.java       |    6 +-
 .../assets/JavaScriptStackMinimizeDisabler.java    |    4 +-
 .../services/assets/ResourceChangeTracker.java     |    8 +-
 .../services/assets/ResourceChangeTrackerImpl.java |   10 +-
 .../services/assets/SRSCachingInterceptor.java     |    4 +-
 .../services/assets/SRSCompressingInterceptor.java |    2 +-
 .../services/assets/SRSMinimizingInterceptor.java  |    2 +-
 .../services/assets/StackAssetRequestHandler.java  |    4 +-
 .../services/assets/StreamableResourceImpl.java    |    4 +-
 .../assets/StreamableResourceSourceImpl.java       |    7 +-
 .../services/assets/UTF8ForTextAssets.java         |    4 +-
 .../compatibility/DeprecationWarningImpl.java      |    6 +-
 .../services/dashboard/DashboardManagerImpl.java   |    2 +-
 .../exceptions/ExceptionReportWriterImpl.java      |   12 +-
 .../services/exceptions/ExceptionReporterImpl.java |    2 +-
 .../javascript/ConfigureHTMLElementFilter.java     |    4 +-
 .../JavaScriptStackPathConstructorImpl.java        |    6 +-
 .../javascript/JavaScriptStackSourceImpl.java      |    6 +-
 .../services/javascript/ModuleDispatcher.java      |   10 +-
 .../services/javascript/ModuleManagerImpl.java     |   11 +-
 .../linktransform/LinkTransformerImpl.java         |    4 +-
 .../linktransform/LinkTransformerInterceptor.java  |    4 +-
 .../ClientLocalizationMessageResource.java         |    4 +-
 .../messages/PropertiesFileParserImpl.java         |    4 +-
 .../services/security/ClientWhitelistImpl.java     |    2 +-
 .../internal/services/security/LocalhostOnly.java  |    2 +-
 .../services/templates/DefaultTemplateLocator.java |    2 +-
 .../services/templates/PageTemplateLocator.java    |    2 +-
 .../tapestry5/internal/structure/BlockImpl.java    |    4 +-
 .../internal/structure/ComponentPageElement.java   |    2 +-
 .../structure/ComponentPageElementImpl.java        |   15 +-
 .../structure/ComponentPageElementResources.java   |    8 +-
 .../ComponentPageElementResourcesImpl.java         |   18 +-
 .../ComponentPageElementResourcesSourceImpl.java   |    9 +-
 .../internal/structure/ExpansionPageElement.java   |    2 +-
 .../structure/InternalComponentResourcesImpl.java  |   17 +-
 .../apache/tapestry5/internal/structure/Page.java  |    4 +-
 .../tapestry5/internal/structure/PageImpl.java     |    6 +-
 .../structure/RenderPhaseEventHandler.java         |    2 +-
 .../internal/structure/StructureMessages.java      |    6 +-
 .../internal/test/EndOfRequestCleanupFilter.java   |   10 +-
 .../tapestry5/internal/test/PageTesterContext.java |    2 +-
 .../tapestry5/internal/test/PageTesterModule.java  |   18 +-
 .../tapestry5/internal/test/PageTesterSession.java |    7 +-
 .../internal/test/TestableCookieSinkSource.java    |    2 +-
 .../tapestry5/internal/test/TestableRequest.java   |    2 +-
 .../internal/test/TestableRequestImpl.java         |    8 +-
 .../tapestry5/internal/test/TestableResponse.java  |    6 +-
 .../internal/test/TestableResponseImpl.java        |    4 +-
 .../ActivationRequestParameterWorker.java          |    6 +-
 .../internal/transform/BindParameterWorker.java    |   12 +-
 .../internal/transform/ComponentWorker.java        |   12 +-
 .../internal/transform/InjectComponentWorker.java  |    2 +-
 .../internal/transform/InjectNamedProvider.java    |    2 +-
 .../internal/transform/InjectPageWorker.java       |    2 +-
 .../internal/transform/InjectServiceWorker.java    |    2 +-
 .../tapestry5/internal/transform/InjectWorker.java |    4 +-
 .../internal/transform/OnEventWorker.java          |   10 +-
 .../transform/PageActivationContextWorker.java     |    2 +-
 .../internal/transform/ParameterConduit.java       |    2 +-
 .../internal/transform/ParameterWorker.java        |    6 +-
 .../transform/RenderPhaseMethodWorker.java         |    2 +-
 .../internal/transform/SessionAttributeWorker.java |    4 +-
 .../translator/NumericTranslatorSupportImpl.java   |    4 +-
 .../internal/util/DelegatingSymbolProvider.java    |   47 -
 .../org/apache/tapestry5/internal/util/Holder.java |    2 +-
 .../tapestry5/internal/util/MacOutputStream.java   |    2 +-
 .../internal/util/MessageCatalogResource.java      |    2 +-
 .../apache/tapestry5/internal/util/NamedSet.java   |    6 +-
 .../internal/util/RecomputableSupport.java         |    2 +-
 .../tapestry5/internal/util/VirtualResource.java   |    6 +-
 .../org/apache/tapestry5/model/ComponentModel.java |    2 +-
 .../tapestry5/model/EmbeddedComponentModel.java    |    2 +-
 .../tapestry5/model/MutableComponentModel.java     |    2 +-
 .../org/apache/tapestry5/modules/AssetsModule.java |   25 +-
 .../apache/tapestry5/modules/Bootstrap4Module.java |    2 +-
 .../apache/tapestry5/modules/DashboardModule.java  |    2 +-
 .../apache/tapestry5/modules/InternalModule.java   |   11 +-
 .../apache/tapestry5/modules/JavaScriptModule.java |   10 +-
 .../tapestry5/modules/NoBootstrapModule.java       |    2 +-
 .../apache/tapestry5/modules/PageLoadModule.java   |    3 +-
 .../apache/tapestry5/modules/TapestryModule.java   |  677 +++--
 .../tapestry5/runtime/ComponentEventException.java |    4 +-
 .../tapestry5/services/ApplicationGlobals.java     |   33 -
 .../tapestry5/services/ApplicationInitializer.java |   28 -
 .../services/ApplicationInitializerFilter.java     |   25 -
 .../services/ApplicationStateCreator.java          |    2 +-
 .../services/ApplicationStateManager.java          |    2 +-
 .../apache/tapestry5/services/AssetFactory.java    |    2 +-
 .../tapestry5/services/AssetRequestDispatcher.java |    2 +-
 .../org/apache/tapestry5/services/AssetSource.java |    4 +-
 .../apache/tapestry5/services/BaseURLSource.java   |   51 -
 .../apache/tapestry5/services/BeanBlockSource.java |    4 +-
 .../apache/tapestry5/services/BeanEditContext.java |    2 +-
 .../apache/tapestry5/services/BindingFactory.java  |    2 +-
 .../apache/tapestry5/services/BindingSource.java   |    2 +-
 .../services/ClasspathAssetAliasManager.java       |    4 +-
 .../tapestry5/services/ClientBehaviorSupport.java  |    2 +-
 .../tapestry5/services/ComponentClassResolver.java |    8 +-
 .../services/ComponentEventLinkEncoder.java        |   11 +-
 .../services/ComponentEventResultProcessor.java    |    4 +-
 .../tapestry5/services/ComponentMessages.java      |    2 +-
 .../apache/tapestry5/services/ComponentSource.java |    2 +
 .../tapestry5/services/ComponentTemplates.java     |    2 +-
 .../org/apache/tapestry5/services/Context.java     |   82 -
 .../tapestry5/services/ContextValueEncoder.java    |    2 +-
 .../org/apache/tapestry5/services/Cookies.java     |    3 +-
 .../tapestry5/services/DelegatingRequest.java      |    3 +
 .../org/apache/tapestry5/services/Dispatcher.java  |   37 -
 .../tapestry5/services/FieldTranslatorSource.java  |    6 +-
 .../services/FieldValidatorDefaultSource.java      |    4 +-
 .../tapestry5/services/FieldValidatorSource.java   |    2 +-
 .../org/apache/tapestry5/services/FormSupport.java |    2 +-
 .../services/HttpServletRequestFilter.java         |   35 -
 .../services/HttpServletRequestHandler.java        |   35 -
 .../services/InitializeActivePageName.java         |    2 +
 .../apache/tapestry5/services/LinkCreationHub.java |    2 +-
 .../tapestry5/services/LinkCreationListener.java   |    2 +-
 .../tapestry5/services/LinkCreationListener2.java  |    2 +-
 .../tapestry5/services/MarkupWriterFactory.java    |    2 +-
 .../tapestry5/services/PageRenderLinkSource.java   |    2 +-
 .../services/PartialTemplateRenderer.java          |    2 +-
 .../apache/tapestry5/services/PathConstructor.java |    4 +-
 .../tapestry5/services/PropertyEditContext.java    |    4 +-
 .../tapestry5/services/PropertyOutputContext.java  |    2 +-
 .../org/apache/tapestry5/services/Request.java     |  215 --
 .../apache/tapestry5/services/RequestFilter.java   |   30 -
 .../apache/tapestry5/services/RequestGlobals.java  |   71 -
 .../apache/tapestry5/services/RequestHandler.java  |   33 -
 .../services/ResourceDigestGenerator.java          |    2 +-
 .../org/apache/tapestry5/services/Response.java    |  182 --
 .../services/ResponseCompressionAnalyzer.java      |   44 -
 .../tapestry5/services/ResponseRenderer.java       |    4 +-
 .../services/ServletApplicationInitializer.java    |   29 -
 .../ServletApplicationInitializerFilter.java       |   30 -
 .../org/apache/tapestry5/services/Session.java     |   95 -
 .../services/SessionPersistedObjectAnalyzer.java   |   47 -
 .../tapestry5/services/StreamPageContent.java      |    2 +-
 .../apache/tapestry5/services/TransformUtils.java  |    2 +-
 .../tapestry5/services/TranslatorSource.java       |    2 +-
 .../services/ValidationConstraintGenerator.java    |    4 +-
 .../services/ajax/AjaxResponseRenderer.java        |    2 +-
 .../services/assets/AssetChecksumGenerator.java    |    6 +-
 .../services/assets/AssetPathConstructor.java      |    2 +-
 .../services/assets/AssetRequestHandler.java       |    4 +-
 .../services/assets/CompressionAnalyzer.java       |   39 -
 .../services/assets/CompressionStatus.java         |    2 +-
 .../services/assets/ContentTypeAnalyzer.java       |    4 +-
 .../services/assets/ResourceDependencies.java      |    2 +-
 .../services/assets/ResourceTransformer.java       |    4 +-
 .../services/assets/ResponseCustomizer.java        |    4 +-
 .../services/assets/StreamableResource.java        |    4 +-
 .../assets/StreamableResourceProcessing.java       |    2 +-
 .../services/assets/StreamableResourceSource.java  |    4 +-
 .../services/dynamic/DynamicTemplateParser.java    |    2 +-
 .../tapestry5/services/javascript/AMDWrapper.java  |    2 +-
 .../javascript/JavaScriptModuleConfiguration.java  |    4 +-
 .../services/javascript/JavaScriptStackSource.java |    4 +-
 .../services/javascript/ModuleManager.java         |    2 +-
 .../ComponentEventLinkTransformer.java             |    4 +-
 .../linktransform/PageRenderLinkTransformer.java   |    4 +-
 .../services/messages/ComponentMessagesSource.java |    6 +-
 .../services/messages/PropertiesFileParser.java    |    6 +-
 .../pageload/ComponentRequestSelectorAnalyzer.java |    2 +-
 .../pageload/ComponentResourceLocator.java         |    2 +-
 .../pageload/ComponentResourceSelector.java        |    4 +-
 .../services/security/WhitelistAnalyzer.java       |    2 +-
 .../templates/ComponentTemplateLocator.java        |    2 +-
 .../services/transform/InjectionProvider2.java     |    2 +-
 .../java/org/apache/tapestry5/test/PageTester.java |   18 +-
 .../apache/tapestry5/test/TapestryTestCase.java    |   21 +-
 .../tapestry5/tree/DefaultTreeExpansionModel.java  |    4 +-
 .../apache/tapestry5/tree/DefaultTreeModel.java    |    4 +-
 .../tapestry5/tree/DefaultTreeSelectionModel.java  |    2 +-
 .../org/apache/tapestry5/util/EnumSelectModel.java |    4 +-
 .../apache/tapestry5/util/EnumValueEncoder.java    |    2 +-
 .../apache/tapestry5/util/PublicUtilMessages.java  |    4 +-
 .../org/apache/tapestry5/util/ResponseWrapper.java |    6 +-
 .../apache/tapestry5/util/TextStreamResponse.java  |    6 +-
 .../tapestry5/validator/CheckboxValidator.java     |    2 +-
 .../org/apache/tapestry5/validator/Checked.java    |    2 +-
 .../java/org/apache/tapestry5/validator/Email.java |    2 +-
 .../java/org/apache/tapestry5/validator/Max.java   |    2 +-
 .../org/apache/tapestry5/validator/MaxLength.java  |    2 +-
 .../java/org/apache/tapestry5/validator/Min.java   |    2 +-
 .../org/apache/tapestry5/validator/MinLength.java  |    2 +-
 .../java/org/apache/tapestry5/validator/None.java  |    2 +-
 .../org/apache/tapestry5/validator/Regexp.java     |    2 +-
 .../org/apache/tapestry5/validator/Required.java   |    2 +-
 .../corelib/components/PageLinkTest.groovy         |    2 +-
 .../app1/pages/DateFieldValidationDemo.groovy      |    1 -
 .../integration/app1/pages/ZoneFormDemo.groovy     |    2 +-
 .../integration/app5/components/Layout.groovy      |    4 +-
 .../integration/app5/pages/Error404.groovy         |    8 +-
 .../integration/app5/services/AppModule.groovy     |    6 +-
 .../appfolder/services/AppModule.groovy            |    2 +-
 .../integration/locallib/alpha/pages/Logo.groovy   |    1 -
 .../symbolparam/components/Layout.groovy           |    4 +-
 .../symbolparam/services/AppModule.groovy          |    2 +-
 .../services/ClientDataEncoderImplTest.groovy      |    2 +-
 .../services/ComponentClassResolverImplTest.groovy |    8 +-
 .../ResponseCompressionAnalyzerTest.groovy         |    9 +-
 .../assets/AssetPathConstructorImplTest.groovy     |    6 +-
 .../services/assets/CSSURLRewriterTests.groovy     |    2 +-
 .../services/assets/ModuleReaderSpec.groovy        |   10 +-
 .../ComponentPageElementResourcesImplTest.groovy   |    6 +-
 .../services/javascript/AMDWrapperTest.groovy      |    2 +-
 .../javascript/ModuleDispatcherTests.groovy        |    6 +-
 .../tapestry5/corelib/base/AbstractLinkTest.java   |    2 +-
 .../corelib/base/AbstractPropertyOutputTest.java   |    4 +-
 .../corelib/components/BeanEditorTest.java         |    6 +-
 .../corelib/components/PropertyEditorTest.java     |    6 +-
 .../tapestry5/corelib/components/SelectTest.java   |    8 +-
 .../tapestry5/corelib/components/SubmitTest.java   |    4 +-
 .../java/org/apache/tapestry5/dom/DOMTest.java     |    2 +-
 .../activationctx/services/AppModule.java          |    5 +-
 .../activationctx2/services/AppModule.java         |    5 +-
 .../integration/app1/CoreBehaviorsTests.java       |    6 +-
 .../apache/tapestry5/integration/app1/Stuff.java   |    2 +-
 .../app1/base/BaseEventHandlerDemo.java            |    2 +-
 .../base/OverrideEventHandlerDemoBaseClass.java    |    2 +-
 .../integration/app1/components/Border.java        |    2 +-
 .../integration/app1/components/Count.java         |    2 +-
 .../integration/app1/data/RegistrationData.java    |    2 +-
 .../app1/mixins/TextOnlyOnDisabled.java            |    2 +-
 .../integration/app1/pages/ActionViaLinkDemo.java  |    2 +-
 .../app1/pages/AddedGridColumnsDemo.java           |    2 +-
 .../integration/app1/pages/AjaxRadioDemo.java      |    2 +-
 .../integration/app1/pages/AtInjectDemo.java       |    2 +-
 .../integration/app1/pages/AutocompleteDemo.java   |    2 +-
 .../integration/app1/pages/BlockDemo.java          |    2 +-
 .../integration/app1/pages/ChecklistDemo.java      |    2 +-
 .../integration/app1/pages/ClassLoaderInspect.java |    2 +-
 .../app1/pages/ClientPersistenceDemo.java          |    4 +-
 .../app1/pages/DateFieldAjaxFormLoop.java          |    2 +-
 .../integration/app1/pages/DateFieldDemo.java      |    2 +-
 .../app1/pages/DecorateComponentEventLinkDemo.java |    2 +-
 .../app1/pages/DecoratePageRenderLinkDemo.java     |    2 +-
 .../integration/app1/pages/EmptyGrid.java          |    2 +-
 .../integration/app1/pages/FormInjectorDemo.java   |    2 +-
 .../integration/app1/pages/FormLinkParameters.java |    2 +-
 .../integration/app1/pages/GridInLoopDemo.java     |    2 +-
 .../integration/app1/pages/GridSetDemo.java        |    2 +-
 .../integration/app1/pages/Html5DateFieldDemo.java |    2 +-
 .../tapestry5/integration/app1/pages/Index.java    |    4 +-
 .../integration/app1/pages/InjectDemo.java         |    2 +-
 .../app1/pages/LinkQueryParameters.java            |    4 +-
 .../integration/app1/pages/Localization.java       |    4 +-
 .../app1/pages/MultiZoneUpdateInsideForm.java      |    2 +-
 .../integration/app1/pages/OnActivateRedirect.java |    2 +-
 .../pages/OverrideDateFieldMessageCatalogDemo.java |    2 +-
 .../integration/app1/pages/PaletteDemo.java        |    2 +-
 .../integration/app1/pages/RadioDemo.java          |    2 +-
 .../app1/pages/RequestParameterDemo.java           |    2 +-
 .../integration/app1/pages/SelectZoneDemo.java     |    4 +-
 .../app1/pages/SessionAttributeDemo.java           |    2 +-
 .../app1/pages/SimpleTrackGridDemo.java            |    2 +-
 .../integration/app1/pages/TreeSelectionDemo.java  |    4 +-
 .../integration/app1/services/AppModule.java       |   23 +-
 .../app1/services/EnableJQueryModule.java          |    2 +-
 .../app1/services/MessageAccessImpl.java           |    2 +-
 .../app1/services/MusicLibraryParser.java          |    4 +-
 .../app1/services/ToDoDatabaseImpl.java            |    5 +-
 .../app2/pages/TestPageForHttpHeaders.java         |    2 +-
 .../integration/app2/services/LocaleAppModule.java |    2 +-
 .../integration/app3/services/AppModule.java       |   13 +-
 .../cluster/data/ImmutableByAnnotation.java        |    2 +-
 .../integration/cluster/services/AppModule.java    |    4 +-
 .../services/AppComponentEventLinkTransformer.java |    6 +-
 .../integration/linktrans/services/AppModule.java  |    7 +-
 .../services/AppPageRenderLinkTransformer.java     |    6 +-
 .../tapestry5/integration/pagelevel/FormTest.java  |    2 +-
 .../integration/pagelevel/SubmitTest.java          |    2 +-
 .../integration/pagetester/PageTesterTest.java     |    4 +-
 .../integration/reload/services/AppModule.java     |    5 +-
 .../ContextResourceSymbolProviderTest.java         |    2 +-
 .../internal/PropertyOverridesImplTest.java        |    2 +-
 .../tapestry5/internal/ResponseImplTest.java       |    4 +-
 .../internal/ServletContextSymbolProviderTest.java |    3 +-
 .../internal/SingleKeySymbolProviderTest.java      |    1 +
 .../internal/TapestryAppInitializerTest.java       |    1 +
 .../internal/TapestryInternalUtilsTest.java        |    8 +-
 .../MessagesAnnotationConstraintGeneratorTest.java |    2 +-
 .../internal/bindings/BindingFactoryTest.java      |    6 +-
 .../internal/bindings/PropBindingFactoryTest.java  |    6 +-
 .../bindings/ValidateBindingFactoryTest.java       |    8 +-
 .../grid/CollectionGridDataSourceTest.java         |    2 +-
 .../model/MutableComponentModelImplTest.java       |    4 +-
 .../services/AbstractBeanModelSourceImplTest.java  |    4 +-
 .../services/AddTransformPagesToCISModule.java     |    4 +-
 .../services/AnnotationDataTypeAnalyzerTest.java   |    5 +-
 .../services/ApplicationStateManagerImplTest.java  |    2 +-
 ...tionStatePersistenceStrategySourceImplTest.java |    3 +-
 .../internal/services/AssetObjectProviderTest.java |    8 +-
 .../internal/services/AssetSourceImplTest.java     |    2 +-
 .../internal/services/BaseURLSourceImplTest.java   |    5 +-
 .../internal/services/BeanBlockSourceImplTest.java |    6 +-
 .../internal/services/BindingSourceImplTest.java   |   10 +-
 .../ClasspathAssetAliasManagerImplTest.java        |    6 +-
 .../ClientPersistentFieldStorageImplTest.java      |   10 +-
 .../services/ComponentDefaultProviderImplTest.java |    8 +-
 .../services/ComponentEventDispatcherTest.java     |    6 +-
 .../ComponentEventLinkEncoderImplTest.java         |   10 +-
 .../ComponentInstantiatorSourceImplTest.java       |    2 +-
 .../services/ComponentMessagesSourceImplTest.java  |    4 +-
 .../internal/services/ComponentSourceImplTest.java |    2 +-
 .../services/ComponentTemplateSourceImplTest.java  |    4 +-
 .../internal/services/ContextImplTest.java         |    5 +-
 .../internal/services/ContextResourceTest.java     |    4 +-
 .../internal/services/CookiesImplTest.java         |    2 +-
 .../DefaultRequestExceptionHandlerTest.java        |    8 +-
 .../services/EndOfRequestEventHubImplTest.java     |    4 +-
 .../internal/services/EnvironmentImplTest.java     |    6 +-
 .../EnvironmentalShadowBuilderImplTest.java        |    2 +-
 .../internal/services/EventContextTests.java       |    2 +-
 .../services/FieldTranslatorSourceImplTest.java    |    6 +-
 .../services/FieldValidationSupportImplTest.java   |    4 +-
 .../FieldValidatorDefaultSourceImplTest.java       |    4 +-
 .../internal/services/FieldValidatorImplTest.java  |    2 +-
 .../services/FieldValidatorSourceImplTest.java     |    8 +-
 .../services/FlashPersistentFieldStrategyTest.java |    4 +-
 .../services/ForceDevelopmentModeModule.java       |    9 +-
 .../internal/services/IgnoredPathsFilterTest.java  |    6 +-
 .../JSONArrayEventResultProcessorTest.java         |    2 +-
 .../tapestry5/internal/services/LinkImplTest.java  |    8 +-
 .../internal/services/LinkSourceImplTest.java      |    8 +-
 .../services/LocalizationSetterImplTest.java       |    6 +-
 .../internal/services/MetaDataLocatorImplTest.java |    8 +-
 .../services/NullFieldStrategySourceImplTest.java  |    4 +-
 .../PageActivationContextCollectorImplTest.java    |    2 +-
 .../services/PageElementFactoryImplTest.java       |    6 +-
 .../services/PageRenderLinkSourceImplTest.java     |    2 +-
 .../services/PageRenderRequestHandlerImplTest.java |    2 +-
 .../services/PersistentFieldManagerImplTest.java   |    8 +-
 .../services/PersistentLocaleImplTest.java         |    2 +-
 .../services/PropertyConduitSourceImplTest.java    |    4 +-
 .../internal/services/RequestImplTest.java         |   10 +-
 .../services/RequestSecurityManagerImplTest.java   |    8 +-
 .../services/ResponseRendererImplTest.java         |    4 +-
 .../ServiceAnnotationObjectProviderTest.java       |    6 +-
 ...ionApplicationStatePersistenceStrategyTest.java |    4 +-
 .../internal/services/SessionImplTest.java         |    7 +-
 .../SessionPersistentFieldStrategyTest.java        |    4 +-
 .../internal/services/StaticFilesFilterTest.java   |   10 +-
 .../internal/services/TemplateParserImplTest.java  |   10 +-
 .../TranslatorAlternatesSourceImplTest.java        |    2 +-
 .../services/TranslatorSourceImplTest.java         |    4 +-
 .../internal/services/XMLTokenStreamTests.java     |    4 +-
 .../assets/ContextAssetRequestHandlerTest.java     |    2 +-
 .../messages/PropertiesFileParserImplTest.java     |    2 +-
 .../internal/structure/BlockImplTest.java          |    4 +-
 .../structure/ExpansionPageElementImplTest.java    |    2 +-
 .../InternalComponentResourcesImplTest.java        |    2 +-
 .../internal/test/InternalBaseTestCase.java        |   18 +-
 .../tapestry5/internal/util/IntegerRangeTest.java  |    1 +
 .../tapestry5/internal/util/MultiKeyTest.java      |    1 +
 .../org/apache/tapestry5/root/ContentTypeTest.java |    4 +-
 .../apache/tapestry5/root/PageCallbackTest.java    |    4 +-
 .../tapestry5/services/LibraryMappingTest.java     |    2 +-
 .../apache/tapestry5/util/EnumSelectModelTest.java |    2 +-
 .../tapestry5/util/EnumValueEncoderTest.java       |   12 +-
 .../org/apache/tapestry5/validator/EmailTest.java  |    2 +-
 .../apache/tapestry5/validator/MaxLengthTest.java  |    2 +-
 .../org/apache/tapestry5/validator/MaxTest.java    |    2 +-
 .../apache/tapestry5/validator/MinLengthTest.java  |    2 +-
 .../org/apache/tapestry5/validator/MinTest.java    |    2 +-
 .../org/apache/tapestry5/validator/RegexpTest.java |    2 +-
 .../apache/tapestry5/validator/RequiredTest.java   |    2 +-
 .../main/java/org/apache/tapestry5/func/Tuple.java |    4 +-
 .../java/org/apache/tapestry5/func/ZippedFlow.java |    4 +-
 tapestry-hibernate-core/build.gradle               |    8 +-
 .../internal/DefaultHibernateConfigurer.java       |   41 +
 .../internal/HibernateSessionManagerImpl.java      |   73 +
 .../internal/HibernateSessionSourceImpl.java       |   86 +
 .../internal/HibernateTransactionAdvisorImpl.java  |   72 +
 .../HibernateTransactionDecoratorImpl.java         |   51 +
 .../internal/PackageNameHibernateConfigurer.java   |   62 +
 .../hibernate/modules/HibernateCoreModule.java     |    6 +-
 .../hibernate/DefaultHibernateConfigurer.java      |   41 -
 .../hibernate/HibernateSessionManagerImpl.java     |   73 -
 .../hibernate/HibernateSessionSourceImpl.java      |   86 -
 .../hibernate/HibernateTransactionAdvisorImpl.java |   72 -
 .../HibernateTransactionDecoratorImpl.java         |   51 -
 .../hibernate/PackageNameHibernateConfigurer.java  |   62 -
 .../DefaultHibernateConfigurerFilterTest.java      |    3 +-
 .../hibernate/HibernateSessionSourceImplTest.java  |    7 +-
 .../HibernateTransactionDecoratorImplTest.java     |    4 +-
 tapestry-hibernate/build.gradle                    |    2 +-
 .../corelib/pages/HibernateStatistics.java         |   89 -
 .../hibernate/HibernateGridDataSource.java         |  142 -
 .../hibernate/HibernatePersistenceConstants.java   |   33 -
 .../hibernate/modules/HibernateModule.java         |  191 --
 .../hibernate/web/HibernateGridDataSource.java     |  142 +
 .../web/HibernatePersistenceConstants.java         |   33 +
 .../hibernate/web/internal/CommitAfterWorker.java  |   81 +
 .../EntityApplicationStatePersistenceStrategy.java |   78 +
 .../internal/EntityPersistentFieldStrategy.java    |   71 +
 .../web/internal/HibernateEntityValueEncoder.java  |  102 +
 .../hibernate/web/internal/PersistedEntity.java    |   62 +
 .../web/internal/PersistedTransientEntity.java     |   41 +
 .../hibernate/web/internal/SessionRestorable.java  |   30 +
 .../hibernate/web/internal/package-info.java       |   18 +
 .../hibernate/web/modules/HibernateModule.java     |  199 ++
 .../hibernate/web/pages/HibernateStatistics.java   |   89 +
 .../internal/hibernate/CommitAfterWorker.java      |   81 -
 .../EntityApplicationStatePersistenceStrategy.java |   78 -
 .../hibernate/EntityPersistentFieldStrategy.java   |   71 -
 .../hibernate/HibernateEntityValueEncoder.java     |  102 -
 .../internal/hibernate/PersistedEntity.java        |   62 -
 .../hibernate/PersistedTransientEntity.java        |   41 -
 .../internal/hibernate/SessionRestorable.java      |   30 -
 .../tapestry5/internal/hibernate/package-info.java |   18 -
 .../web}/pages/HibernateStatistics.properties      |    0
 .../web}/pages/HibernateStatistics.tml             |    0
 .../TapestryHibernateIntegrationTests.java         |  167 --
 .../TapestryHibernateIntegrationTests.java         |  167 ++
 .../EntityPersistentFieldStrategyTest.java         |   98 +
 .../internal/HibernateEntityValueEncoderTest.java  |  124 +
 .../hibernate/web/internal/SampleEntity.java       |   38 +
 .../EntityPersistentFieldStrategyTest.java         |   96 -
 .../hibernate/HibernateEntityValueEncoderTest.java |  123 -
 .../tapestry5/internal/hibernate/SampleEntity.java |   38 -
 .../test/java/org/example/app0/pages/GridDemo.java |    2 +-
 .../java/org/example/app0/pages/SSOEntity.java     |    4 +-
 .../java/org/example/app0/services/AppModule.java  |   12 +-
 tapestry-http/build.gradle                         |   31 +
 .../tapestry-core/project.properties               |    0
 .../org/apache/tapestry5/http/ContentType.java     |  215 ++
 .../main/java/org/apache/tapestry5/http/Link.java  |  180 ++
 .../org/apache/tapestry5/http/LinkSecurity.java    |   61 +
 .../http/OptimizedSessionPersistedObject.java      |   34 +
 .../org/apache/tapestry5/http/TapestryFilter.java  |  217 ++
 .../tapestry5/http/TapestryHttpConstants.java      |   30 +
 .../http/TapestryHttpSymbolConstants.java          |  136 +
 .../http/internal/AbstractContributionDef.java     |   42 +
 .../internal/ServletContextSymbolProvider.java     |   44 +
 .../http/internal/SingleKeySymbolProvider.java     |   41 +
 .../http/internal/SyntheticModuleDef.java          |   85 +
 .../SyntheticSymbolSourceContributionDef.java      |   57 +
 .../http/internal/TapestryAppInitializer.java      |  272 ++
 .../internal/TapestryHttpInternalConstants.java    |   45 +
 .../http/internal/TapestryHttpInternalSymbols.java |   30 +
 .../internal/gzip/BufferedGZipOutputStream.java    |  146 ++
 .../http/internal/gzip/GZIPEnabledResponse.java    |   72 +
 .../tapestry5/http/internal/gzip/GZipFilter.java   |   62 +
 .../internal/services/ApplicationGlobalsImpl.java  |   47 +
 .../http/internal/services/BaseURLSourceImpl.java  |   86 +
 .../internal/services/ClusteredSessionImpl.java    |  106 +
 .../http/internal/services/ContextImpl.java        |  110 +
 .../DefaultSessionPersistedObjectAnalyzer.java     |   43 +
 .../OptimizedSessionPersistedObjectAnalyzer.java   |   26 +
 .../http/internal/services/RequestGlobalsImpl.java |   84 +
 .../http/internal/services/RequestImpl.java        |  259 ++
 .../services/ResponseCompressionAnalyzerImpl.java  |   83 +
 .../http/internal/services/ResponseImpl.java       |  135 +
 .../http/internal/services/SessionImpl.java        |  122 +
 .../http/internal/services/SessionLock.java        |   36 +
 .../internal/services/TapestrySessionFactory.java  |   29 +
 .../services/TapestrySessionFactoryImpl.java       |  185 ++
 .../internal/util/DelegatingSymbolProvider.java    |   47 +
 .../tapestry5/http/modules/TapestryHttpModule.java |  411 +++
 .../http/services/ApplicationGlobals.java          |   31 +
 .../http/services/ApplicationInitializer.java      |   29 +
 .../services/ApplicationInitializerFilter.java     |   23 +
 .../tapestry5/http/services/BaseURLSource.java     |   51 +
 .../http/services/CompressionAnalyzer.java         |   39 +
 .../apache/tapestry5/http/services/Context.java    |   82 +
 .../apache/tapestry5/http/services/Dispatcher.java |   39 +
 .../http/services/HttpServletRequestFilter.java    |   36 +
 .../http/services/HttpServletRequestHandler.java   |   36 +
 .../apache/tapestry5/http/services/Request.java    |  218 ++
 .../tapestry5/http/services/RequestFilter.java     |   30 +
 .../tapestry5/http/services/RequestGlobals.java    |   68 +
 .../tapestry5/http/services/RequestHandler.java    |   33 +
 .../apache/tapestry5/http/services/Response.java   |  182 ++
 .../http/services/ResponseCompressionAnalyzer.java |   43 +
 .../services/ServletApplicationInitializer.java    |   29 +
 .../ServletApplicationInitializerFilter.java       |   30 +
 .../apache/tapestry5/http/services/Session.java    |   95 +
 .../services/SessionPersistedObjectAnalyzer.java   |   47 +
 .../http/test/TapestryHttpIntegrationTests.java    |   33 +
 .../apache/tapestry5/http/test/TestDispatcher.java |   38 +
 .../http/test/TestHttpServletRequestFilter.java    |   25 +
 .../tapestry5/http/test/TestRequestFilter.java     |   24 +
 .../tapestry5/http/test/services/AppModule.java    |   35 +
 tapestry-http/src/test/webapp/WEB-INF/web.xml      |   35 +
 tapestry-http/src/test/webapp/index.html           |    7 +
 tapestry-http/src/test/webapp/longfile.txt         | 2768 ++++++++++++++++++++
 .../t5internal/modules/InternalTestModule.java     |    2 +-
 .../tapestry5/jcache/internal/CacheLookupUtil.java |    2 +-
 .../tapestry5/jcache/module/JCacheModule.java      |    2 +-
 .../apache/tapestry5/ioc/junit/MapModuleDef.java   |    2 +-
 tapestry-ioc/build.gradle                          |    1 +
 .../org/apache/tapestry5/ioc/AnnotationAccess.java |    2 +
 .../org/apache/tapestry5/ioc/BaseLocatable.java    |    5 +-
 .../java/org/apache/tapestry5/ioc/IOCSymbols.java  |    2 +-
 .../org/apache/tapestry5/ioc/IOCUtilities.java     |    4 +-
 .../org/apache/tapestry5/ioc/ObjectProvider.java   |   44 -
 .../org/apache/tapestry5/ioc/OrderConstraint.java  |    2 +
 .../tapestry5/ioc/OrderConstraintBuilder.java      |    2 +
 .../java/org/apache/tapestry5/ioc/Orderable.java   |    2 +-
 .../java/org/apache/tapestry5/ioc/Registry.java    |    1 +
 .../org/apache/tapestry5/ioc/RegistryBuilder.java  |   13 +-
 .../java/org/apache/tapestry5/ioc/ReloadAware.java |    3 +-
 .../org/apache/tapestry5/ioc/ServiceLifecycle.java |    2 +
 .../org/apache/tapestry5/ioc/ServiceResources.java |    3 +-
 .../apache/tapestry5/ioc/annotations/Marker.java   |   48 -
 .../apache/tapestry5/ioc/annotations/Scope.java    |   51 -
 .../apache/tapestry5/ioc/def/ContributionDef.java  |    4 +-
 .../org/apache/tapestry5/ioc/def/ServiceDef.java   |    2 +-
 .../org/apache/tapestry5/ioc/def/StartupDef.java   |    2 +-
 .../ioc/internal/AbstractConfigurationImpl.java    |    2 +-
 .../AbstractMethodInvokingInstrumenter.java        |    9 +-
 .../internal/AbstractReloadableObjectCreator.java  |   10 +-
 .../ioc/internal/AbstractServiceCreator.java       |    8 +-
 .../ioc/internal/AbstractServiceInstrumenter.java  |    4 +-
 .../tapestry5/ioc/internal/AdvisorDefImpl.java     |    2 +-
 .../ioc/internal/AdvisorStackBuilder.java          |    2 +-
 .../ioc/internal/AnnotationAccessImpl.java         |    2 +-
 .../tapestry5/ioc/internal/ConfigurationType.java  |    6 +-
 .../ioc/internal/ConstructorServiceCreator.java    |    2 +-
 .../ioc/internal/ContributionDefImpl.java          |   14 +-
 .../tapestry5/ioc/internal/DecoratorDefImpl.java   |    2 +-
 .../ioc/internal/DefaultModuleDefImpl.java         |   11 +-
 .../apache/tapestry5/ioc/internal/IOCMessages.java |    6 +-
 .../ioc/internal/InterceptorStackBuilder.java      |    2 +-
 .../tapestry5/ioc/internal/InternalRegistry.java   |    9 +-
 .../internal/LifecycleWrappedServiceCreator.java   |    2 +-
 .../apache/tapestry5/ioc/internal/ModuleImpl.java  |   20 +-
 .../ioc/internal/ObjectCreatorSource.java          |    2 +-
 .../tapestry5/ioc/internal/ObjectLocatorImpl.java  |    6 +-
 .../tapestry5/ioc/internal/OperationException.java |    2 +-
 .../ioc/internal/OperationTrackerImpl.java         |    6 +-
 .../internal/OperationTrackingObjectCreator.java   |    2 +-
 .../ioc/internal/OrderedConfigurationOverride.java |    2 +-
 .../RecursiveServiceCreationCheckWrapper.java      |    4 +-
 .../tapestry5/ioc/internal/RegistryImpl.java       |   47 +-
 .../tapestry5/ioc/internal/RegistryWrapper.java    |    4 +-
 .../ioc/internal/ReloadableObjectCreator.java      |    4 +-
 .../internal/ReloadableObjectCreatorSource.java    |    6 +-
 ...loadableServiceImplementationObjectCreator.java |    4 +-
 .../ioc/internal/ServiceActivityTrackerImpl.java   |    3 +-
 .../tapestry5/ioc/internal/ServiceAdvisorImpl.java |    4 +-
 .../tapestry5/ioc/internal/ServiceBinderImpl.java  |   11 +-
 .../ioc/internal/ServiceBuilderMethodInvoker.java  |    4 +-
 .../ioc/internal/ServiceDecoratorImpl.java         |    4 +-
 .../tapestry5/ioc/internal/ServiceDefImpl.java     |    6 +-
 .../ioc/internal/ServiceResourcesImpl.java         |    6 +-
 .../ioc/internal/SingletonServiceLifecycle.java    |    4 +-
 .../tapestry5/ioc/internal/StartupDefImpl.java     |    6 +-
 .../tapestry5/ioc/internal/TypeCoercerProxy.java   |    2 +-
 .../ioc/internal/TypeCoercerProxyImpl.java         |    4 +-
 .../internal/ValidatingConfigurationWrapper.java   |    6 +-
 .../ValidatingMappedConfigurationWrapper.java      |   10 +-
 .../ValidatingOrderedConfigurationWrapper.java     |    8 +-
 .../services/AbtractAspectInterceptorBuilder.java  |    2 +-
 .../ioc/internal/services/AspectDecoratorImpl.java |    2 +-
 .../services/AspectInterceptorBuilderImpl.java     |    4 +-
 .../internal/services/AutobuildObjectProvider.java |    8 +-
 .../ioc/internal/services/BridgeBuilder.java       |    4 +-
 .../internal/services/CachingObjectCreator.java    |    8 +-
 .../ioc/internal/services/ChainBuilderImpl.java    |    2 +-
 .../services/ClasspathResourceSymbolProvider.java  |    2 +-
 .../internal/services/ClasspathScannerImpl.java    |    4 +-
 .../services/DefaultImplementationBuilderImpl.java |    4 +-
 .../internal/services/ExceptionAnalyzerImpl.java   |    9 +-
 .../internal/services/ExceptionTrackerImpl.java    |    2 +-
 .../internal/services/JustInTimeObjectCreator.java |    3 +-
 .../ioc/internal/services/LazyAdvisorImpl.java     |    2 +-
 .../services/MasterObjectProviderImpl.java         |    6 +-
 .../ioc/internal/services/MethodIterator.java      |    6 +-
 .../internal/services/ParallelExecutorImpl.java    |    2 +-
 .../services/PerThreadServiceLifecycle.java        |    4 +-
 .../internal/services/PerthreadManagerImpl.java    |    4 +-
 .../ioc/internal/services/PipelineBuilderImpl.java |    2 +-
 .../services/PropertyShadowBuilderImpl.java        |    5 +-
 .../internal/services/RegistryShutdownHubImpl.java |    5 +-
 .../ioc/internal/services/RegistryStartup.java     |    2 +-
 .../internal/services/ResourceSymbolProvider.java  |    6 +-
 .../ioc/internal/services/ServiceOverrideImpl.java |    6 +-
 .../internal/services/StaticObjectProvider.java    |    6 +-
 .../ioc/internal/services/StrategyBuilderImpl.java |    4 +-
 .../internal/services/SymbolObjectProvider.java    |    8 +-
 .../ioc/internal/services/SymbolSourceImpl.java    |    6 +-
 .../internal/services/SystemEnvSymbolProvider.java |    2 +-
 .../ioc/internal/services/ThunkCreatorImpl.java    |    6 +-
 .../internal/services/UpdateListenerHubImpl.java   |    6 +-
 .../ioc/internal/services/ValueObjectProvider.java |    8 +-
 .../services/cron/PeriodicExecutorImpl.java        |    2 +-
 .../ioc/internal/util/AbstractResource.java        |    4 +-
 .../ioc/internal/util/ClasspathResource.java       |    4 +-
 .../ioc/internal/util/ConstructionPlan.java        |    3 +-
 .../ioc/internal/util/ConstructorInvoker.java      |    4 +-
 .../ioc/internal/util/DependencyNode.java          |    4 +-
 .../ioc/internal/util/IdToDependencyNode.java      |    4 +-
 .../tapestry5/ioc/internal/util/InternalUtils.java |   25 +-
 .../tapestry5/ioc/internal/util/LocationImpl.java  |    8 +-
 .../tapestry5/ioc/internal/util/MethodInvoker.java |    4 +-
 .../tapestry5/ioc/internal/util/OneShotLock.java   |    2 +
 .../tapestry5/ioc/internal/util/Orderer.java       |    6 +-
 .../ioc/internal/util/URLChangeTracker.java        |    1 +
 .../tapestry5/ioc/internal/util/UtilMessages.java  |    3 +-
 .../tapestry5/ioc/modules/TapestryIOCModule.java   |   83 +-
 .../ioc/services/MasterObjectProvider.java         |    8 +-
 .../tapestry5/ioc/services/PerthreadManager.java   |    2 +-
 .../tapestry5/ioc/services/ServiceOverride.java    |    2 +-
 .../tapestry5/ioc/services/StrategyBuilder.java    |    4 +-
 .../tapestry5/ioc/services/ThunkCreator.java       |    4 +-
 .../tapestry5/ioc/services/UpdateListener.java     |   30 +
 .../tapestry5/ioc/services/UpdateListenerHub.java  |   49 +
 .../org/apache/tapestry5/ioc/test/IOCTestCase.java |   18 +-
 .../org/apache/tapestry5/ioc/util/IdAllocator.java |    2 +-
 .../apache/tapestry5/services/UpdateListener.java  |   30 -
 .../tapestry5/services/UpdateListenerHub.java      |   49 -
 .../src/test/groovy/ioc/specs/AdvisorsSpec.groovy  |   14 +-
 .../specs/AspectInterceptorBuilderImplSpec.groovy  |    3 +-
 .../src/test/groovy/ioc/specs/AutobuildSpec.groovy |   20 +-
 .../test/groovy/ioc/specs/BaseLocatableSpec.groovy |    5 +-
 .../test/groovy/ioc/specs/BridgeBuilderSpec.groovy |   15 +-
 .../groovy/ioc/specs/CaseInsensitiveMapSpec.groovy |    3 +-
 .../ioc/specs/ClassNameLocatorImplSpec.groovy      |    4 +-
 .../groovy/ioc/specs/ConcurrentBarrierSpec.groovy  |    5 +-
 .../groovy/ioc/specs/ConfigurationsSpec.groovy     |   51 +-
 .../ioc/specs/ContributionDefImplSpec.groovy       |   16 +-
 .../test/groovy/ioc/specs/DecoratorsSpec.groovy    |   16 +-
 .../ioc/specs/DefaultModuleDefImplSpec.groovy      |   54 +-
 .../src/test/groovy/ioc/specs/EagerLoadSpec.groovy |    2 +-
 .../ioc/specs/ExceptionAnalyzerImplSpec.groovy     |    4 +-
 .../groovy/ioc/specs/ExceptionUtilsSpec.groovy     |    7 +-
 .../ioc/specs/FilterMethodAnalyzerSpec.groovy      |    5 +-
 .../groovy/ioc/specs/GeneralIntegrationSpec.groovy |    8 +-
 .../test/groovy/ioc/specs/GenericUtilsSpec.groovy  |    9 +-
 .../groovy/ioc/specs/InheritanceSearchSpec.groovy  |    9 +-
 .../src/test/groovy/ioc/specs/InjectionSpec.groovy |   18 +-
 .../test/groovy/ioc/specs/InternalUtilsSpec.groovy |   26 +-
 .../ioc/specs/JustInTimeObjectCreatorSpec.groovy   |    2 +-
 .../groovy/ioc/specs/LazyAdvisorImplSpec.groovy    |    6 +-
 .../ioc/specs/LoggingDecoratorImplSpec.groovy      |    4 +-
 .../ioc/specs/MasterObjectProviderImplSpec.groovy  |    7 +-
 .../ioc/specs/MessageFormatterImplSpec.groovy      |    3 +-
 .../test/groovy/ioc/specs/MessagesImplSpec.groovy  |    7 +-
 .../specs/MethodInvocationGetAnnotationSpec.groovy |   12 +-
 .../test/groovy/ioc/specs/ModuleImplSpec.groovy    |   14 +-
 .../ioc/specs/ModuleInstantiationSpec.groovy       |    4 +-
 .../ioc/specs/NonParallelExecutorSpec.groovy       |    3 +-
 .../test/groovy/ioc/specs/OneShotLockSpec.groovy   |    4 +-
 .../groovy/ioc/specs/OperationAdvisorSpec.groovy   |    3 +-
 .../groovy/ioc/specs/OperationTrackerSpec.groovy   |   10 -
 .../groovy/ioc/specs/ParallelExecutorSpec.groovy   |    7 +-
 .../groovy/ioc/specs/PerThreadScopeSpec.groovy     |    6 +-
 .../ioc/specs/PipelineBuilderImplSpec.groovy       |    5 +-
 .../groovy/ioc/specs/PropertyAccessImplSpec.groovy |   19 +-
 ...RecursiveServiceCreationCheckWrapperSpec.groovy |    2 +-
 .../groovy/ioc/specs/RegistryBuilderSpec.groovy    |   11 +-
 ...RegistryConstructionAndRuntimeErrorsSpec.groovy |   17 +-
 .../src/test/groovy/ioc/specs/RegistrySpec.groovy  |   20 +-
 .../groovy/ioc/specs/RegistryStartupSpec.groovy    |    3 +-
 .../src/test/groovy/ioc/specs/ReloadSpec.groovy    |    3 +-
 .../ioc/specs/ResourceSymbolProviderSpec.groovy    |    3 +-
 .../ioc/specs/ServiceActivityScoreboardSpec.groovy |    9 +-
 .../test/groovy/ioc/specs/ServiceBinderSpec.groovy |    4 +-
 .../specs/ServiceBuilderMethodInvokerSpec.groovy   |   10 +-
 .../ioc/specs/ServiceCreatorGenericsSpec.groovy    |   11 +-
 .../test/groovy/ioc/specs/ServiceLookupSpec.groovy |   17 +-
 .../test/groovy/ioc/specs/ServiceProxySpec.groovy  |   12 +-
 .../ioc/specs/SingletonServiceLifecycleSpec.groovy |    3 +-
 .../src/test/groovy/ioc/specs/StackSpec.groovy     |    2 +-
 .../groovy/ioc/specs/StrategyRegistrySpec.groovy   |    5 +-
 .../ioc/specs/StringToEnumCoercionSpec.groovy      |    5 +-
 .../src/test/groovy/ioc/specs/TestBaseSpec.groovy  |    5 +-
 .../test/groovy/ioc/specs/TimeIntervalSpec.groovy  |    3 +-
 .../test/groovy/ioc/specs/TypeCoercerSpec.groovy   |    4 +-
 .../ioc/specs/UpdateListenerHubImplSpec.groovy     |    5 +-
 .../ValidatingConfigurationWrapperSpec.groovy      |    5 +-
 ...ValidatingMappedConfigurationWrapperSpec.groovy |   10 +-
 ...alidatingOrderedConfigurationWrapperSpec.groovy |    5 +-
 .../ioc/specs/ValueObjectProviderSpec.groovy       |    9 +-
 .../test/java/com/example/ExtraRunnableModule.java |    2 +-
 .../org/apache/tapestry5/ioc/AdviceDemoModule.java |   71 -
 .../AdviceMethodMissingAdvisorParameterModule.java |   26 -
 .../tapestry5/ioc/AutobuildInjectionModule.java    |   30 -
 .../org/apache/tapestry5/ioc/AutobuildModule.java  |   23 -
 .../org/apache/tapestry5/ioc/BarneyModule.java     |  118 -
 .../java/org/apache/tapestry5/ioc/BlueMarker.java  |   33 -
 .../ioc/CaseInsensitiveContributeMethodModule.java |   23 -
 .../ioc/CatchAllServiceConfigurationListener.java  |   68 -
 .../ioc/ConcreteServiceBuilderModule.java          |   26 -
 .../tapestry5/ioc/ConfigurationOverrideModule.java |   30 -
 .../tapestry5/ioc/ContributeByClassModule.java     |   75 -
 .../ioc/ContributedValueCoercionModule.java        |   31 -
 .../tapestry5/ioc/ContributionOrderModule.java     |   34 -
 .../tapestry5/ioc/ContributionOrderModule2.java    |   34 -
 .../tapestry5/ioc/ContributionOrderModule3.java    |   34 -
 .../tapestry5/ioc/ContributionOrderModule4.java    |   34 -
 .../tapestry5/ioc/ConventionFailureModule.java     |    9 -
 .../org/apache/tapestry5/ioc/ConventionModule.java |    9 -
 .../ConventionModuleImplementationNotFound.java    |    9 -
 .../apache/tapestry5/ioc/CountingGreeterImpl.java  |   30 -
 .../org/apache/tapestry5/ioc/CyclicMOPModule.java  |   49 -
 .../org/apache/tapestry5/ioc/DecoratorList.java    |   27 -
 .../apache/tapestry5/ioc/DefaultMethodService.java |   13 -
 .../ioc/DuplicateConfigurationOverrideModule.java  |   29 -
 .../apache/tapestry5/ioc/DuplicateFredModule.java  |   23 -
 .../tapestry5/ioc/DuplicateServiceTypeModule.java  |   29 -
 .../org/apache/tapestry5/ioc/EagerLoadModule.java  |   33 -
 .../org/apache/tapestry5/ioc/EagerLoadService.java |   20 -
 .../apache/tapestry5/ioc/EagerLoadServiceImpl.java |   26 -
 .../tapestry5/ioc/EagerProxyReloadModule.java      |   25 -
 .../apache/tapestry5/ioc/ExtraMethodsModule.java   |   33 -
 .../tapestry5/ioc/FailInConstructorRunnable.java   |   29 -
 .../ioc/FailedConfigurationOverrideModule.java     |   24 -
 .../ioc/FieldResourceInjectionModule.java          |   31 -
 .../apache/tapestry5/ioc/FieldResourceService.java |   24 -
 .../tapestry5/ioc/FieldResourceServiceImpl.java    |   47 -
 .../java/org/apache/tapestry5/ioc/FredModule.java  |  149 --
 .../java/org/apache/tapestry5/ioc/GreenMarker.java |   33 -
 .../java/org/apache/tapestry5/ioc/Greeter.java     |   20 -
 .../org/apache/tapestry5/ioc/GreeterModule.java    |  105 -
 .../org/apache/tapestry5/ioc/GreeterModule2.java   |   45 -
 .../ioc/GreeterServiceOverrideModule.java          |   42 -
 .../org/apache/tapestry5/ioc/HelterModule.java     |   25 -
 .../apache/tapestry5/ioc/IndirectResources.java    |   40 -
 .../java/org/apache/tapestry5/ioc/Indirection.java |   23 -
 .../org/apache/tapestry5/ioc/InjectionCheck.java   |   24 -
 .../apache/tapestry5/ioc/InjectionCheckImpl.java   |   46 -
 .../apache/tapestry5/ioc/InjectionCheckModule.java |   35 -
 .../java/org/apache/tapestry5/ioc/IntHolder.java   |   20 -
 .../org/apache/tapestry5/ioc/IntHolderImpl.java    |   32 -
 .../tapestry5/ioc/IntegrationTestFixture.java      |    9 -
 .../tapestry5/ioc/InvalidContributeDefModule.java  |   26 -
 .../tapestry5/ioc/InvalidContributeDefModule2.java |   55 -
 .../tapestry5/ioc/InvalidContributeDefModule3.java |   48 -
 .../java/org/apache/tapestry5/ioc/LocalModule.java |   49 -
 .../org/apache/tapestry5/ioc/MarkerModule.java     |   37 -
 .../org/apache/tapestry5/ioc/MasterModule.java     |   26 -
 .../org/apache/tapestry5/ioc/NameListHolder.java   |   27 -
 .../org/apache/tapestry5/ioc/NameListHolder2.java  |   27 -
 .../NoImplementationClassForSimpleIdModule.java    |   30 -
 .../tapestry5/ioc/NonProxiedServiceModule.java     |   23 -
 .../tapestry5/ioc/NonVoidAdvisorMethodModule.java  |   23 -
 .../tapestry5/ioc/OptionalContributionModule.java  |   25 -
 .../org/apache/tapestry5/ioc/OrderedService.java   |   34 -
 .../org/apache/tapestry5/ioc/PerThreadModule.java  |   27 -
 .../java/org/apache/tapestry5/ioc/Pingable.java    |   23 -
 .../org/apache/tapestry5/ioc/PingableImpl.java     |    6 -
 .../tapestry5/ioc/PostInjectionMethodModule.java   |   23 -
 .../tapestry5/ioc/PreventDecorationModule.java     |   39 -
 .../tapestry5/ioc/RecursiveConstructorModule.java  |   41 -
 .../org/apache/tapestry5/ioc/RedGreeterImpl.java   |   29 -
 .../java/org/apache/tapestry5/ioc/RedMarker.java   |   33 -
 .../tapestry5/ioc/RegistryBuilderTestModule.java   |   33 -
 .../test/java/org/apache/tapestry5/ioc/Rocket.java |   20 -
 .../java/org/apache/tapestry5/ioc/RocketImpl.java  |   27 -
 .../apache/tapestry5/ioc/ScopeMismatchModule.java  |   26 -
 .../ioc/ServiceBuilderAutobuilderModule.java       |   28 -
 .../apache/tapestry5/ioc/ServiceBuilderModule.java |   50 -
 .../org/apache/tapestry5/ioc/ServiceIdGreeter.java |   34 -
 .../test/java/org/apache/tapestry5/ioc/Sizer.java  |   24 -
 .../org/apache/tapestry5/ioc/SkelterModule.java    |   24 -
 .../tapestry5/ioc/SpecificDecoratorModule.java     |   30 -
 .../ioc/SpecificDecoratorModuleAgain.java          |   34 -
 .../test/java/org/apache/tapestry5/ioc/Square.java |   23 -
 .../org/apache/tapestry5/ioc/StaticModule.java     |  108 -
 .../org/apache/tapestry5/ioc/StringHolder.java     |   22 -
 .../org/apache/tapestry5/ioc/StringHolderImpl.java |   39 -
 .../org/apache/tapestry5/ioc/StringLookup.java     |   30 -
 .../apache/tapestry5/ioc/StringTransformer.java    |   21 -
 .../tapestry5/ioc/SymbolExpandingTransformer.java  |   30 -
 .../apache/tapestry5/ioc/UnbuildablePingable.java  |   31 -
 .../tapestry5/ioc/UnknownColorGreeterImpl.java     |   26 -
 .../apache/tapestry5/ioc/UnknownScopeModule.java   |   26 -
 .../tapestry5/ioc/UppercaseStringTransformer.java  |   24 -
 .../org/apache/tapestry5/ioc/YellowMarker.java     |   31 -
 .../internal/AbstractAutobuildServiceModule.java   |   25 -
 .../ioc/internal/AbstractRunnableService.java      |   29 -
 .../tapestry5/ioc/internal/AdviceModule.java       |   53 -
 .../ioc/internal/AdviseByMarkerModule.java         |   92 -
 .../ioc/internal/AdviseByMarkerModule2.java        |   82 -
 .../tapestry5/ioc/internal/AlphabetModule.java     |   73 -
 .../tapestry5/ioc/internal/AlphabetModule2.java    |   86 -
 .../ioc/internal/AnnotatedServiceInterface.java    |   30 -
 .../internal/AnnotatedServiceInterfaceImpl.java    |   24 -
 .../ioc/internal/ArrayDecoratorMethodModule.java   |   27 -
 .../ioc/internal/BuilderMethodModule.java          |   23 -
 .../ioc/internal/ComplexAutobuildModule.java       |   27 -
 .../ioc/internal/DecorateByMarkerModule.java       |  101 -
 .../ioc/internal/DecorateByMarkerModule2.java      |   94 -
 .../tapestry5/ioc/internal/DecoratorModule.java    |   53 -
 .../ioc/internal/DefaultServiceIdModule.java       |   23 -
 .../ioc/internal/EagerLoadViaAnnotationModule.java |   26 -
 .../EagerLoadViaAnnotationServiceImpl.java         |   28 -
 .../ioc/internal/ExceptionInBindMethod.java        |   25 -
 .../ioc/internal/ExceptionInConstructorModule.java |   26 -
 .../ExceptionInConstructorServiceImpl.java         |   32 -
 .../internal/ExtraPublicConstructorsModule.java    |   57 -
 .../apache/tapestry5/ioc/internal/FieService.java  |   23 -
 .../apache/tapestry5/ioc/internal/FoeService.java  |   23 -
 .../ioc/internal/MappedConfigurationModule.java    |   28 -
 .../ioc/internal/ModuleBuilderWithId.java          |   23 -
 .../ioc/internal/ModuleImplTestModule.java         |   63 -
 .../ModuleWithOverriddenObjectMethods.java         |   42 -
 .../MultipleConstructorsAutobuildService.java      |   46 -
 ...MutlipleAutobuildServiceConstructorsModule.java |   27 -
 .../tapestry5/ioc/internal/NamedServiceModule.java |   34 -
 .../internal/NamedViaAnnotationServiceImpl.java    |   28 -
 .../internal/NoDelegateDecoratorMethodModule.java  |   30 -
 .../NoUsableContributionParameterModule.java       |   29 -
 .../NonAnnotatedGenericServiceInterface.java       |   18 -
 .../NonAnnotatedGenericSetServiceImpl.java         |   59 -
 .../NonAnnotatedGenericSetServiceInterface.java    |    6 -
 .../ioc/internal/NonAnnotatedServiceInterface.java |   32 -
 .../internal/NonAnnotatedServiceInterfaceImpl.java |   49 -
 .../ioc/internal/NonStaticBindMethodModule.java    |   27 -
 .../ioc/internal/NoopClassLoaderDelegate.java      |   32 -
 .../ioc/internal/OrderedConfigurationModule.java   |   28 -
 .../internal/PrimitiveDecoratorMethodModule.java   |   26 -
 .../ioc/internal/PrivateConstructorModule.java     |   31 -
 .../tapestry5/ioc/internal/ReadManifest.java       |   91 -
 .../ioc/internal/RunnableServiceImpl.java          |   31 -
 .../ioc/internal/ServiceBuilderMethodFixture.java  |  128 -
 .../ioc/internal/ServiceDecoratorFixture.java      |   40 -
 .../internal/ServiceIdConflictMethodModule.java    |   32 -
 .../ioc/internal/ServiceIdViaAnnotationModule.java |   33 -
 .../ServiceIdViaAnnotationServiceImpl.java         |   28 -
 .../ServiceIdViaMethodAnnotationServiceImpl.java   |   26 -
 .../tapestry5/ioc/internal/SimpleModule.java       |   62 -
 .../ioc/internal/SyntheticMethodModule.java        |   31 -
 .../apache/tapestry5/ioc/internal/TestAdvice.java  |   56 -
 .../tapestry5/ioc/internal/ToStringService.java    |    7 -
 .../ioc/internal/ToUpperCaseStringHolder.java      |   35 -
 .../TooManyContributionParametersModule.java       |   30 -
 .../UninstantiableAutobuildServiceModule.java      |   25 -
 .../tapestry5/ioc/internal/UpcaseService.java      |   26 -
 .../tapestry5/ioc/internal/UpcaseServiceImpl.java  |   26 -
 .../ioc/internal/VoidBuilderMethodModule.java      |   28 -
 .../ioc/internal/VoidDecoratorMethodModule.java    |   31 -
 .../ioc/internal/services/AbstractIntWrapper.java  |   23 -
 .../ioc/internal/services/AnnotatedBean.java       |   55 -
 .../internal/services/AnnotatedBeanSubclass.java   |    5 -
 .../tapestry5/ioc/internal/services/Bean.java      |   39 -
 .../internal/services/BeanWithIndexedProperty.java |   28 -
 .../ioc/internal/services/ExtraFilterMethod.java   |   20 -
 .../ioc/internal/services/ExtraServiceMethod.java  |   20 -
 .../internal/services/GrandparentInterface.java    |   20 -
 .../ioc/internal/services/LineNumberBean.java      |   36 -
 .../ioc/internal/services/MiddleFilter.java        |   20 -
 .../ioc/internal/services/MiddleService.java       |   20 -
 .../ioc/internal/services/NonParallelModule.java   |   26 -
 .../ioc/internal/services/ParentInterface.java     |   20 -
 .../ioc/internal/services/PublicFieldBean.java     |    7 -
 .../ioc/internal/services/SampleFilter.java        |   31 -
 .../ioc/internal/services/SampleService.java       |   31 -
 .../services/ServiceDecoratorImplSpec.groovy       |  132 -
 .../services/ServiceProxySerializationSpec.groovy  |   73 -
 .../internal/services/ShadowedPublicFieldBean.java |   18 -
 .../ioc/internal/services/SimpleAnnotation.java    |   30 -
 .../ioc/internal/services/SimpleService.java       |   23 -
 .../ioc/internal/services/StandardFilter.java      |   20 -
 .../ioc/internal/services/StandardService.java     |   20 -
 .../ioc/internal/services/StartupModule.java       |   36 -
 .../ioc/internal/services/StartupModule2.java      |   39 -
 .../internal/services/StringLocationSpec.groovy    |   21 -
 .../ioc/internal/services/SubInterface.java        |   20 -
 .../services/SymbolObjectProviderSpec.groovy       |   82 -
 .../ioc/internal/services/TargetBean.java          |   46 -
 .../ioc/internal/services/TestAnnotation.java      |   68 -
 .../ioc/internal/services/TextTransformer.java     |   20 -
 .../ioc/internal/services/ToStringFilter.java      |   20 -
 .../ioc/internal/services/ToStringService.java     |   21 -
 .../ioc/internal/util/BaseGenericBean.java         |   30 -
 .../ioc/internal/util/ConcurrentTarget.java        |  168 --
 .../ioc/internal/util/ConcurrentTargetWrapper.java |   41 -
 .../tapestry5/ioc/internal/util/Drivable.java      |    9 -
 .../tapestry5/ioc/internal/util/DrivableImpl.java  |   16 -
 .../ioc/internal/util/FieldInjectionViaInject.java |   31 -
 .../util/FieldInjectionViaInjectService.java       |   29 -
 .../util/FieldInjectionViaJavaxInject.java         |   32 -
 .../internal/util/FieldInjectionViaJavaxNamed.java |   27 -
 .../tapestry5/ioc/internal/util/InjectoBean.java   |   54 -
 .../ioc/internal/util/JavaxInjectBean.java         |   55 -
 .../ioc/internal/util/NonGenericBean.java          |   30 -
 .../ioc/internal/util/NotRetainedRuntime.java      |   27 -
 .../ioc/internal/util/OneShotLockSubject.java      |   34 -
 .../apache/tapestry5/ioc/internal/util/Pair.java   |   42 -
 .../tapestry5/ioc/internal/util/Playable.java      |   11 -
 .../tapestry5/ioc/internal/util/PlayableImpl.java  |   15 -
 .../tapestry5/ioc/internal/util/StringBean.java    |   20 -
 .../ioc/internal/util/StringLongPair.java          |   19 -
 .../ioc/internal/util/TargetMessages.java          |    9 -
 .../util/TooManyAutobuildConstructorsBean.java     |   39 -
 .../tapestry5/ioc/internal/util/ToyTruck.java      |   10 -
 .../tapestry5/ioc/internal/util/ToyTruckImpl.java  |   16 -
 .../tapestry5/ioc/test/AdviceDemoModule.java       |   72 +
 .../AdviceMethodMissingAdvisorParameterModule.java |   26 +
 .../ioc/test/AutobuildInjectionModule.java         |   31 +
 .../apache/tapestry5/ioc/test/AutobuildModule.java |   25 +
 .../apache/tapestry5/ioc/test/BarneyModule.java    |  120 +
 .../org/apache/tapestry5/ioc/test/BlueMarker.java  |   33 +
 .../CaseInsensitiveContributeMethodModule.java     |   25 +
 .../test/CatchAllServiceConfigurationListener.java |   68 +
 .../ioc/test/ConcreteServiceBuilderModule.java     |   28 +
 .../ioc/test/ConfigurationOverrideModule.java      |   33 +
 .../ioc/test/ContributeByClassModule.java          |   78 +
 .../ioc/test/ContributedValueCoercionModule.java   |   32 +
 .../ioc/test/ContributionOrderModule.java          |   38 +
 .../ioc/test/ContributionOrderModule2.java         |   31 +
 .../ioc/test/ContributionOrderModule3.java         |   31 +
 .../ioc/test/ContributionOrderModule4.java         |   31 +
 .../ioc/test/ConventionFailureModule.java          |   11 +
 .../tapestry5/ioc/test/ConventionModule.java       |   11 +
 .../ConventionModuleImplementationNotFound.java    |   11 +
 .../tapestry5/ioc/test/CountingGreeterImpl.java    |   30 +
 .../apache/tapestry5/ioc/test/CyclicMOPModule.java |   51 +
 .../apache/tapestry5/ioc/test/DecoratorList.java   |   27 +
 .../tapestry5/ioc/test/DefaultMethodService.java   |   13 +
 .../test/DuplicateConfigurationOverrideModule.java |   32 +
 .../tapestry5/ioc/test/DuplicateFredModule.java    |   23 +
 .../ioc/test/DuplicateServiceTypeModule.java       |   29 +
 .../apache/tapestry5/ioc/test/EagerLoadModule.java |   33 +
 .../tapestry5/ioc/test/EagerLoadService.java       |   20 +
 .../tapestry5/ioc/test/EagerLoadServiceImpl.java   |   26 +
 .../tapestry5/ioc/test/EagerProxyReloadModule.java |   27 +
 .../tapestry5/ioc/test/ExtraMethodsModule.java     |   33 +
 .../ioc/test/FailInConstructorRunnable.java        |   29 +
 .../test/FailedConfigurationOverrideModule.java    |   26 +
 .../ioc/test/FieldResourceInjectionModule.java     |   34 +
 .../tapestry5/ioc/test/FieldResourceService.java   |   24 +
 .../ioc/test/FieldResourceServiceImpl.java         |   48 +
 .../org/apache/tapestry5/ioc/test/FredModule.java  |  153 ++
 .../org/apache/tapestry5/ioc/test/GreenMarker.java |   33 +
 .../org/apache/tapestry5/ioc/test/Greeter.java     |   20 +
 .../apache/tapestry5/ioc/test/GreeterModule.java   |  106 +
 .../apache/tapestry5/ioc/test/GreeterModule2.java  |   45 +
 .../ioc/test/GreeterServiceOverrideModule.java     |   44 +
 .../apache/tapestry5/ioc/test/HelterModule.java    |   25 +
 .../tapestry5/ioc/test/IndirectResources.java      |   41 +
 .../org/apache/tapestry5/ioc/test/Indirection.java |   23 +
 .../apache/tapestry5/ioc/test/InjectionCheck.java  |   24 +
 .../tapestry5/ioc/test/InjectionCheckImpl.java     |   46 +
 .../tapestry5/ioc/test/InjectionCheckModule.java   |   37 +
 .../org/apache/tapestry5/ioc/test/IntHolder.java   |   20 +
 .../apache/tapestry5/ioc/test/IntHolderImpl.java   |   32 +
 .../tapestry5/ioc/test/IntegrationTestFixture.java |    9 +
 .../ioc/test/InvalidContributeDefModule.java       |   28 +
 .../ioc/test/InvalidContributeDefModule2.java      |   56 +
 .../ioc/test/InvalidContributeDefModule3.java      |   49 +
 .../org/apache/tapestry5/ioc/test/LocalModule.java |   49 +
 .../apache/tapestry5/ioc/test/MarkerModule.java    |   38 +
 .../apache/tapestry5/ioc/test/MasterModule.java    |   26 +
 .../apache/tapestry5/ioc/test/NameListHolder.java  |   27 +
 .../apache/tapestry5/ioc/test/NameListHolder2.java |   27 +
 .../NoImplementationClassForSimpleIdModule.java    |   34 +
 .../ioc/test/NonProxiedServiceModule.java          |   25 +
 .../ioc/test/NonVoidAdvisorMethodModule.java       |   25 +
 .../ioc/test/OptionalContributionModule.java       |   26 +
 .../apache/tapestry5/ioc/test/OrderedService.java  |   34 +
 .../apache/tapestry5/ioc/test/PerThreadModule.java |   28 +
 .../org/apache/tapestry5/ioc/test/Pingable.java    |   23 +
 .../apache/tapestry5/ioc/test/PingableImpl.java    |    6 +
 .../ioc/test/PostInjectionMethodModule.java        |   25 +
 .../ioc/test/PreventDecorationModule.java          |   40 +
 .../ioc/test/RecursiveConstructorModule.java       |   41 +
 .../apache/tapestry5/ioc/test/RedGreeterImpl.java  |   29 +
 .../org/apache/tapestry5/ioc/test/RedMarker.java   |   33 +
 .../ioc/test/RegistryBuilderTestModule.java        |   33 +
 .../java/org/apache/tapestry5/ioc/test/Rocket.java |   20 +
 .../org/apache/tapestry5/ioc/test/RocketImpl.java  |   27 +
 .../tapestry5/ioc/test/ScopeMismatchModule.java    |   27 +
 .../ioc/test/ServiceBuilderAutobuilderModule.java  |   30 +
 .../tapestry5/ioc/test/ServiceBuilderModule.java   |   54 +
 .../tapestry5/ioc/test/ServiceIdGreeter.java       |   35 +
 .../java/org/apache/tapestry5/ioc/test/Sizer.java  |   24 +
 .../apache/tapestry5/ioc/test/SkelterModule.java   |   24 +
 .../ioc/test/SpecificDecoratorModule.java          |   30 +
 .../ioc/test/SpecificDecoratorModuleAgain.java     |   34 +
 .../java/org/apache/tapestry5/ioc/test/Square.java |   23 +
 .../apache/tapestry5/ioc/test/StaticModule.java    |  109 +
 .../apache/tapestry5/ioc/test/StringHolder.java    |   22 +
 .../tapestry5/ioc/test/StringHolderImpl.java       |   39 +
 .../apache/tapestry5/ioc/test/StringLookup.java    |   30 +
 .../tapestry5/ioc/test/StringTransformer.java      |   21 +
 .../ioc/test/SymbolExpandingTransformer.java       |   30 +
 .../tapestry5/ioc/test/UnbuildablePingable.java    |   31 +
 .../ioc/test/UnknownColorGreeterImpl.java          |   26 +
 .../tapestry5/ioc/test/UnknownScopeModule.java     |   26 +
 .../ioc/test/UppercaseStringTransformer.java       |   24 +
 .../apache/tapestry5/ioc/test/YellowMarker.java    |   31 +
 .../internal/AbstractAutobuildServiceModule.java   |   25 +
 .../ioc/test/internal/AbstractRunnableService.java |   29 +
 .../tapestry5/ioc/test/internal/AdviceModule.java  |   53 +
 .../ioc/test/internal/AdviseByMarkerModule.java    |   92 +
 .../ioc/test/internal/AdviseByMarkerModule2.java   |   82 +
 .../ioc/test/internal/AlphabetModule.java          |   73 +
 .../ioc/test/internal/AlphabetModule2.java         |   86 +
 .../test/internal/AnnotatedServiceInterface.java   |   30 +
 .../internal/AnnotatedServiceInterfaceImpl.java    |   24 +
 .../test/internal/ArrayDecoratorMethodModule.java  |   27 +
 .../ioc/test/internal/BuilderMethodModule.java     |   23 +
 .../ioc/test/internal/ComplexAutobuildModule.java  |   27 +
 .../ioc/test/internal/DecorateByMarkerModule.java  |  101 +
 .../ioc/test/internal/DecorateByMarkerModule2.java |   94 +
 .../ioc/test/internal/DecoratorModule.java         |   53 +
 .../ioc/test/internal/DefaultServiceIdModule.java  |   23 +
 .../internal/EagerLoadViaAnnotationModule.java     |   26 +
 .../EagerLoadViaAnnotationServiceImpl.java         |   28 +
 .../ioc/test/internal/ExceptionInBindMethod.java   |   25 +
 .../internal/ExceptionInConstructorModule.java     |   26 +
 .../ExceptionInConstructorServiceImpl.java         |   32 +
 .../internal/ExtraPublicConstructorsModule.java    |   57 +
 .../tapestry5/ioc/test/internal/FieService.java    |   23 +
 .../tapestry5/ioc/test/internal/FoeService.java    |   23 +
 .../test/internal/MappedConfigurationModule.java   |   29 +
 .../ioc/test/internal/ModuleBuilderWithId.java     |   23 +
 .../ioc/test/internal/ModuleImplTestModule.java    |   63 +
 .../ModuleWithOverriddenObjectMethods.java         |   42 +
 .../MultipleConstructorsAutobuildService.java      |   46 +
 ...MutlipleAutobuildServiceConstructorsModule.java |   27 +
 .../ioc/test/internal/NamedServiceModule.java      |   34 +
 .../internal/NamedViaAnnotationServiceImpl.java    |   28 +
 .../internal/NoDelegateDecoratorMethodModule.java  |   30 +
 .../NoUsableContributionParameterModule.java       |   30 +
 .../NonAnnotatedGenericServiceInterface.java       |   18 +
 .../NonAnnotatedGenericSetServiceImpl.java         |   59 +
 .../NonAnnotatedGenericSetServiceInterface.java    |    6 +
 .../internal/NonAnnotatedServiceInterface.java     |   32 +
 .../internal/NonAnnotatedServiceInterfaceImpl.java |   49 +
 .../test/internal/NonStaticBindMethodModule.java   |   27 +
 .../ioc/test/internal/NoopClassLoaderDelegate.java |   32 +
 .../test/internal/OrderedConfigurationModule.java  |   29 +
 .../internal/PrimitiveDecoratorMethodModule.java   |   26 +
 .../test/internal/PrivateConstructorModule.java    |   31 +
 .../tapestry5/ioc/test/internal/ReadManifest.java  |   91 +
 .../ioc/test/internal/RunnableServiceImpl.java     |   31 +
 .../test/internal/ServiceBuilderMethodFixture.java |  128 +
 .../ioc/test/internal/ServiceDecoratorFixture.java |   40 +
 .../internal/ServiceIdConflictMethodModule.java    |   32 +
 .../internal/ServiceIdViaAnnotationModule.java     |   33 +
 .../ServiceIdViaAnnotationServiceImpl.java         |   28 +
 .../ServiceIdViaMethodAnnotationServiceImpl.java   |   26 +
 .../tapestry5/ioc/test/internal/SimpleModule.java  |   62 +
 .../ioc/test/internal/SyntheticMethodModule.java   |   31 +
 .../tapestry5/ioc/test/internal/TestAdvice.java    |   56 +
 .../ioc/test/internal/ToStringService.java         |    7 +
 .../ioc/test/internal/ToUpperCaseStringHolder.java |   35 +
 .../TooManyContributionParametersModule.java       |   31 +
 .../UninstantiableAutobuildServiceModule.java      |   25 +
 .../tapestry5/ioc/test/internal/UpcaseService.java |   26 +
 .../ioc/test/internal/UpcaseServiceImpl.java       |   26 +
 .../ioc/test/internal/VoidBuilderMethodModule.java |   28 +
 .../test/internal/VoidDecoratorMethodModule.java   |   31 +
 .../test/internal/services/AbstractIntWrapper.java |   23 +
 .../ioc/test/internal/services/AnnotatedBean.java  |   55 +
 .../internal/services/AnnotatedBeanSubclass.java   |    5 +
 .../tapestry5/ioc/test/internal/services/Bean.java |   39 +
 .../internal/services/BeanWithIndexedProperty.java |   28 +
 .../test/internal/services/ExtraFilterMethod.java  |   20 +
 .../test/internal/services/ExtraServiceMethod.java |   20 +
 .../internal/services/GrandparentInterface.java    |   20 +
 .../ioc/test/internal/services/LineNumberBean.java |   36 +
 .../ioc/test/internal/services/MiddleFilter.java   |   20 +
 .../ioc/test/internal/services/MiddleService.java  |   20 +
 .../test/internal/services/NonParallelModule.java  |   26 +
 .../test/internal/services/ParentInterface.java    |   20 +
 .../test/internal/services/PublicFieldBean.java    |    7 +
 .../ioc/test/internal/services/SampleFilter.java   |   33 +
 .../ioc/test/internal/services/SampleService.java  |   33 +
 .../services/ServiceDecoratorImplSpec.groovy       |  133 +
 .../services/ServiceProxySerializationSpec.groovy  |   74 +
 .../internal/services/ShadowedPublicFieldBean.java |   18 +
 .../test/internal/services/SimpleAnnotation.java   |   30 +
 .../ioc/test/internal/services/SimpleService.java  |   23 +
 .../ioc/test/internal/services/StandardFilter.java |   20 +
 .../test/internal/services/StandardService.java    |   20 +
 .../ioc/test/internal/services/StartupModule.java  |   36 +
 .../ioc/test/internal/services/StartupModule2.java |   39 +
 .../internal/services/StringLocationSpec.groovy    |   23 +
 .../ioc/test/internal/services/SubInterface.java   |   20 +
 .../services/SymbolObjectProviderSpec.groovy       |   84 +
 .../ioc/test/internal/services/TargetBean.java     |   46 +
 .../ioc/test/internal/services/TestAnnotation.java |   68 +
 .../test/internal/services/TextTransformer.java    |   20 +
 .../ioc/test/internal/services/ToStringFilter.java |   20 +
 .../test/internal/services/ToStringService.java    |   21 +
 .../ioc/test/internal/util/BaseGenericBean.java    |   30 +
 .../ioc/test/internal/util/ConcurrentTarget.java   |  169 ++
 .../internal/util/ConcurrentTargetWrapper.java     |   42 +
 .../tapestry5/ioc/test/internal/util/Drivable.java |    9 +
 .../ioc/test/internal/util/DrivableImpl.java       |   16 +
 .../internal/util/FieldInjectionViaInject.java     |   31 +
 .../util/FieldInjectionViaInjectService.java       |   29 +
 .../util/FieldInjectionViaJavaxInject.java         |   32 +
 .../internal/util/FieldInjectionViaJavaxNamed.java |   27 +
 .../ioc/test/internal/util/InjectoBean.java        |   54 +
 .../ioc/test/internal/util/JavaxInjectBean.java    |   55 +
 .../ioc/test/internal/util/NonGenericBean.java     |   30 +
 .../ioc/test/internal/util/NotRetainedRuntime.java |   27 +
 .../ioc/test/internal/util/OneShotLockSubject.java |   35 +
 .../tapestry5/ioc/test/internal/util/Pair.java     |   42 +
 .../tapestry5/ioc/test/internal/util/Playable.java |   11 +
 .../ioc/test/internal/util/PlayableImpl.java       |   15 +
 .../ioc/test/internal/util/StringBean.java         |   20 +
 .../ioc/test/internal/util/StringLongPair.java     |   19 +
 .../ioc/test/internal/util/TargetMessages.java     |    9 +
 .../util/TooManyAutobuildConstructorsBean.java     |   39 +
 .../tapestry5/ioc/test/internal/util/ToyTruck.java |   10 +
 .../ioc/test/internal/util/ToyTruckImpl.java       |   16 +
 .../tapestry5/ioc/test/util/ExceptionWrapper.java  |   31 +
 ...nmatchingMappedConfigurationOverrideModule.java |   25 +
 .../tapestry5/ioc/util/ExceptionWrapper.java       |   31 -
 ...nmatchingMappedConfigurationOverrideModule.java |   25 -
 .../java/org/apache/tapestry5/ioc/util/Stooge.java |   20 +
 .../java/org/apache/tapestry5/util/Stooge.java     |   20 -
 .../internal/util/TargetStrings.properties         |    0
 .../apache/tapestry5/javadoc/ClassDescription.java |  163 +-
 .../tapestry5/javadoc/DocCommentTreeProvider.java  |   10 +
 .../tapestry5/javadoc/ParameterDescription.java    |   61 +-
 .../tapestry5/javadoc/TapestryDocTaglet.java       |  343 ---
 .../org/apache/tapestry5/javadoc/XDocStreamer.java |    4 +-
 .../javadoc/ParameterDescriptionSpec.groovy        |  352 ++-
 .../tapestry5/internal/jmx/MBeanSupportImpl.java   |    2 +-
 .../org/example/testapp/services/AppModule.java    |    6 +-
 .../EntityApplicationStatePersistenceStrategy.java |    2 +-
 .../internal/jpa/EntityManagerManagerImpl.java     |    2 +-
 .../internal/jpa/EntityManagerObjectProvider.java  |   10 +-
 .../internal/jpa/EntityManagerSourceImpl.java      |    4 +-
 .../jpa/EntityPersistentFieldStrategy.java         |    6 +-
 .../tapestry5/internal/jpa/JpaValueEncoder.java    |    8 +-
 .../tapestry5/internal/jpa/PersistedEntity.java    |    2 +-
 .../internal/jpa/PersistenceContentHandler.java    |    2 +-
 .../internal/jpa/PersistenceUnitInfoImpl.java      |    2 +-
 ...apestryCDIBeanManagerForJPAEntityListeners.java |    2 +-
 .../tapestry5/jpa/JpaPersistenceConstants.java     |    2 +-
 .../apache/tapestry5/jpa/modules/JpaModule.java    |   16 +-
 .../internal/jpa/EntityManagerSourceImplTest.java  |    2 +-
 .../jpa/JpaTransactionAdvisorImplTest.java         |    4 +-
 .../org/apache/tapestry5/jpa/test/JpaTest.java     |    2 +-
 .../apache/tapestry5/jpa/test/JpaTestModule.java   |   10 +-
 .../java/org/example/app1/pages/SSOEntity.java     |    4 +-
 .../java/org/example/app1/services/AppModule.java  |    6 +-
 .../java/org/example/app2/services/AppModule.java  |    2 +-
 .../java/org/example/app3/services/AppModule.java  |    2 +-
 .../java/org/example/app4/services/AppModule.java  |    2 +-
 .../java/org/example/app5/services/AppModule.java  |    2 +-
 .../java/org/example/app6/pages/SSOEntity.java     |    4 +-
 .../java/org/example/app6/services/AppModule.java  |    6 +-
 .../tapestry5/internal/json/StringToJSONArray.java |    2 +-
 .../internal/json/StringToJSONObject.java          |    2 +-
 .../apache/tapestry5/json/modules/JSONModule.java  |    6 +-
 .../tapestry5/json/modules/package-info.java       |    2 +-
 .../tapestry5/kaptcha/components/KaptchaField.java |    2 +-
 .../tapestry5/kaptcha/components/KaptchaImage.java |    4 +-
 .../internal/services/KaptchaDataTypeAnalyzer.java |    4 +-
 .../tapestry5/kaptcha/modules/KaptchaModule.java   |    5 +-
 .../test/java/kaptcha/demo/services/AppModule.java |    7 +-
 .../tapestry5/mongodb/modules/MongodbModule.java   |   11 +-
 .../src/test/groovy/MongoDBSpec.groovy             |   13 +-
 .../internal/mongodb/MongoDBTestModule.java        |    5 +-
 .../internal/spring/SpringBeanServiceDef.java      |    2 +-
 .../tapestry5/internal/spring/SpringModuleDef.java |   12 +-
 .../internal/spring/StaticObjectCreator.java       |    4 +-
 .../internal/spring/TapestryBeanFactory.java       |    4 +-
 .../spring/TapestryApplicationContext.java         |    2 +-
 .../tapestry5/spring/TapestrySpringFilter.java     |    2 +-
 .../tapestry5/spring/modules/SpringModule.java     |   14 +-
 .../internal/spring/SpringModuleDefTest.java       |    2 +-
 .../spring/TapestryApplicationContextTest.java     |    2 +-
 ...pestryExternalSpringContextIntegrationTest.java |    2 +-
 .../org/example/testapp/services/AppModule.java    |    8 +-
 .../testapp/services/SpringStatusProvider.java     |    2 +-
 .../org/example/testapp1/services/AppModule.java   |    6 +-
 .../org/apache/tapestry5/ioc/test/MockTester.java  |   89 -
 .../org/apache/tapestry5/ioc/test/TestBase.java    |  139 -
 .../org/apache/tapestry5/ioc/test/TestUtils.java   |  302 ---
 .../apache/tapestry5/ioc/test/package-info.java    |   16 -
 .../org/apache/tapestry5/test/ioc/MockTester.java  |   89 +
 .../org/apache/tapestry5/test/ioc/TestBase.java    |  139 +
 .../org/apache/tapestry5/test/ioc/TestUtils.java   |  302 +++
 .../apache/tapestry5/test/ioc/package-info.java    |   16 +
 .../apache/tapestry5/upload/components/Upload.java |    2 +-
 .../internal/services/MultipartDecoderImpl.java    |    6 +-
 .../services/MultipartServletRequestFilter.java    |    4 +-
 .../upload/internal/services/ParameterValue.java   |    2 +-
 .../services/ParametersServletRequestWrapper.java  |    7 +-
 .../upload/internal/services/UploadMessages.java   |    4 +-
 .../tapestry5/upload/modules/UploadModule.java     |    8 +-
 .../tapestry5/upload/components/UploadTest.java    |    2 +-
 .../MultipartServletRequestFilterTest.java         |    2 +-
 .../org/example/upload/services/AppModule.java     |    6 +-
 tapestry-version-migrator/build.gradle             |   17 +
 .../tapestry5/versionmigrator/ClassRefactor.java   |  135 +
 .../versionmigrator/FileRefactorCommitParser.java  |   45 +
 .../org/apache/tapestry5/versionmigrator/Main.java |  352 +++
 .../tapestry5/versionmigrator/TapestryVersion.java |   64 +
 .../ArtifactChangeRefactorCommitParser.java        |   49 +
 ...ckageAndArtifactChangeRefactorCommitParser.java |   55 +
 .../PackageChangeRefactorCommitParser.java         |   57 +
 .../tapestry5/versionmigrator/5.7.0.properties     |  129 +
 .../versionmigrator/change-report-5.7.0.html       |    1 +
 .../versionmigrator/ClassRefactorTest.java         |  112 +
 .../ArtifactChangeRefactorCommitParserTest.java    |   41 +
 ...eAndArtifactChangeRefactorCommitParserTest.java |   40 +
 .../PackageChangeRefactorCommitParserTest.java     |   40 +
 .../test-sources/ClassAtRootFolder.java            |   11 +
 .../subfolder/subsubfolder/ClassAtSubFolder.java   |   15 +
 tapestry-webresources/build.gradle                 |    4 +-
 .../platform/yui/compressor/CssCompressor.java     |  531 ----
 .../internal/webresources/CSSMinimizer.java        |    1 -
 .../webresources/CoffeeScriptCompiler.java         |    6 +-
 .../webresources/ContentChangeTracker.java         |    4 +-
 .../internal/webresources/CssCompressor.java       |  531 ++++
 .../DelegatingResourceTransformer.java             |    2 +-
 .../webresources/GoogleClosureMinimizer.java       |    4 +-
 .../webresources/LessResourceTransformer.java      |    9 +-
 .../webresources/ResourceDependenciesSplitter.java |    2 +-
 .../internal/webresources/ResourceLessSource.java  |    2 +-
 .../webresources/ResourceTransformUtils.java       |    4 +-
 .../ResourceTransformerFactoryImpl.java            |    7 +-
 .../internal/webresources/RhinoExecutorPool.java   |    4 +-
 .../internal/webresources/TypeScriptCompiler.java  |    4 +-
 .../webresources/modules/WebResourcesModule.java   |    6 +-
 .../t5/webresources/tests/CssCompressorSpec.groovy |    4 +-
 .../tests/TypeScriptCompilerSpec.groovy            |    8 +-
 .../src/test/java/RunTestWebapp.java               |    9 +
 .../java/t5/webresources/services/AppModule.java   |    4 +-
 .../org/apache/tapestry5/beaneditor/NonVisual.java |    5 +-
 .../tapestry5/beaneditor/RelativePosition.java     |    7 +-
 .../ImmutableSessionPersistedObject.java           |   36 +
 .../apache/tapestry5/ioc/annotations/Advise.java   |    0
 .../tapestry5/ioc/annotations/Autobuild.java       |    6 +-
 .../ioc/annotations/ComponentClasses.java          |   35 +
 .../tapestry5/ioc/annotations/ComponentLayer.java  |   38 +
 .../tapestry5/ioc/annotations/Contribute.java      |    0
 .../apache/tapestry5/ioc/annotations/Decorate.java |    0
 .../tapestry5/ioc/annotations/EagerLoad.java       |    0
 .../tapestry5/ioc/annotations/ImportModule.java    |    0
 .../apache/tapestry5/ioc/annotations/Inject.java   |    6 +-
 .../tapestry5/ioc/annotations/InjectService.java   |    2 +-
 .../ioc/annotations/IntermediateType.java          |    8 +-
 .../apache/tapestry5/ioc/annotations/Marker.java   |   47 +
 .../apache/tapestry5/ioc/annotations/Match.java    |    0
 .../apache/tapestry5/ioc/annotations/NotLazy.java  |    0
 .../tapestry5/ioc/annotations/Operation.java       |    0
 .../apache/tapestry5/ioc/annotations/Optional.java |    0
 .../apache/tapestry5/ioc/annotations/Order.java    |    0
 .../ioc/annotations/PreventServiceDecoration.java  |    0
 .../apache/tapestry5/ioc/annotations/Scope.java    |   47 +
 .../tapestry5/ioc/annotations/ServiceId.java       |    0
 .../apache/tapestry5/ioc/annotations/Startup.java  |    0
 .../tapestry5/ioc/annotations/SubModule.java       |    0
 .../ioc/annotations/UsesConfiguration.java         |    4 +-
 .../ioc/annotations/UsesMappedConfiguration.java   |   10 +-
 .../ioc/annotations/UsesOrderedConfiguration.java  |    4 +-
 .../apache/tapestry5/ioc/annotations/Value.java    |    2 +-
 .../tapestry5/ioc/annotations/package-info.java    |    0
 .../tapestry5/services/ComponentClasses.java       |   35 -
 .../apache/tapestry5/services/ComponentLayer.java  |   37 -
 1742 files changed, 30428 insertions(+), 24974 deletions(-)

diff --git a/.gitignore b/.gitignore
index 828470d..c9a495f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ bin/
 *.ipr
 *.iml
 *.iws
+.metadata
 target
 test-output
 temp-testng*.xml
diff --git a/beanmodel/src/main/antlr/org/apache/tapestry5/beanmodel/internal/antlr/PropertyExpressionLexer.g b/beanmodel/src/main/antlr/org/apache/tapestry5/beanmodel/internal/antlr/PropertyExpressionLexer.g
new file mode 100644
index 0000000..eedf98d
--- /dev/null
+++ b/beanmodel/src/main/antlr/org/apache/tapestry5/beanmodel/internal/antlr/PropertyExpressionLexer.g
@@ -0,0 +1,163 @@
+// Copyright 2008, 2010, 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+lexer grammar PropertyExpressionLexer;
+
+
+options
+{
+  superClass='org.apache.tapestry5.beanmodel.internal.antlr.BaseLexer';
+}
+
+@header
+{
+package org.apache.tapestry5.beanmodel.internal.antlr;
+}
+
+	
+// Integer constant
+fragment INTEGER
+	:	{this.getClass(); /* Fix java.lang.VerifyError: Stack size too large */};	
+	
+// Read a property or invoke a method.
+fragment DEREF 
+	:	{this.getClass(); /* Fix java.lang.VerifyError: Stack size too large */};	
+	
+// Range operator, ".." between two integers.	
+fragment RANGEOP
+	:	{this.getClass(); /* Fix java.lang.VerifyError: Stack size too large */};	
+	
+// Decimal number	
+fragment DECIMAL
+	:	{this.getClass(); /* Fix java.lang.VerifyError: Stack size too large */};	
+			
+fragment LETTER 
+	:	('a'..'z'|'A'..'Z');
+fragment DIGIT 
+	:	'0'..'9';	
+fragment SIGN
+	:	('+'|'-');
+LPAREN 	:	'(';
+RPAREN 	:	')';
+LBRACKET:	'[';
+RBRACKET:	']';
+COMMA	:	',';
+BANG	:	'!';
+LBRACE	:	'{';
+RBRACE	:	'}';
+COLON	:	':';
+
+fragment QUOTE
+	:	'\'';
+
+// Clumsy but effective approach to case-insensitive identifiers.
+
+fragment A
+	:	('a' | 'A');
+fragment E
+	:	('e' | 'E');
+fragment F
+	:	('f' | 'F');	
+fragment H
+	:	('h' | 'H');
+fragment I
+	:	('i' | 'I');
+fragment L 
+	: 	('l' | 'L');
+fragment N 
+	:	('n'|'N');
+fragment R
+	:	('r' | 'R');
+fragment S
+	:	('s' | 'S');
+fragment T 
+	:	('t' | 'T');
+fragment U 
+	:	('u' | 'U');
+
+// Identifiers are case insensitive
+
+NULL 	:	N U L L;
+TRUE	:	T R U E;
+FALSE	:	F A L S E;
+THIS	:	T H I S;
+
+IDENTIFIER 
+    :   JAVA_ID_START (JAVA_ID_PART)*
+    ;
+
+fragment
+JAVA_ID_START
+    :  '\u0024'
+    |  '\u0041'..'\u005a'
+    |  '\u005f'
+    |  '\u0061'..'\u007a'
+    |  '\u00c0'..'\u00d6'
+    |  '\u00d8'..'\u00f6'
+    |  '\u00f8'..'\u00ff'
+    |  '\u0100'..'\u1fff'
+    |  '\u3040'..'\u318f'
+    |  '\u3300'..'\u337f'
+    |  '\u3400'..'\u3d2d'
+    |  '\u4e00'..'\u9fff'
+    |  '\uf900'..'\ufaff'
+    ;
+
+fragment
+JAVA_ID_PART
+    :  JAVA_ID_START
+    |  '\u0030'..'\u0039'
+    ;
+
+
+// The Safe Dereference operator understands not to de-reference through
+// a null.
+
+SAFEDEREF 
+	: 	'?.';
+
+WS 	:	(' '|'\t'|'\n'|'\r')+ { skip(); };
+
+
+// Literal strings are always inside single quotes.
+STRING
+	:	QUOTE (options {greedy=false;} : .)* QUOTE { setText(getText().substring(1, getText().length()-1)); };
+
+
+// Special rule that uses parsing tricks to identify numbers and ranges; it's all about
+// the dot ('.').
+// Recognizes:
+// '.' as DEREF
+// '..' as RANGEOP
+// INTEGER (sign? digit+)
+// DECIMAL (sign? digits* . digits+)
+// Has to watch out for embedded rangeop (i.e. "1..10" is not "1." and ".10").
+
+NUMBER_OR_RANGEOP
+	:	SIGN? DIGIT+
+		(
+			{ input.LA(2) != '.' }? => '.' DIGIT* {   $type = DECIMAL; stripLeadingPlus(); }
+			| {  $type = INTEGER;  stripLeadingPlus(); }
+		)
+		
+	|	SIGN '.' DIGIT+ {  $type = DECIMAL;  stripLeadingPlus(); }
+	
+	|	'.'
+		( 
+			DIGIT+ { $type = DECIMAL; stripLeadingPlus();}
+			| '.' {$type = RANGEOP; }
+			| {$type = DEREF; }
+		)
+	;	
+
diff --git a/beanmodel/src/main/antlr/org/apache/tapestry5/beanmodel/internal/antlr/PropertyExpressionParser.g b/beanmodel/src/main/antlr/org/apache/tapestry5/beanmodel/internal/antlr/PropertyExpressionParser.g
new file mode 100644
index 0000000..db60f5a
--- /dev/null
+++ b/beanmodel/src/main/antlr/org/apache/tapestry5/beanmodel/internal/antlr/PropertyExpressionParser.g
@@ -0,0 +1,105 @@
+// Copyright 2008, 2009, 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+parser grammar PropertyExpressionParser;
+
+
+options
+{
+  superClass='org.apache.tapestry5.beanmodel.internal.antlr.BaseParser';
+  output=AST;		
+  ASTLabelType=CommonTree;
+  tokenVocab=PropertyExpressionLexer;
+  backtrack=true;
+}
+
+tokens
+{	
+	// Parser token representing a method invocation
+    	INVOKE;
+    	// A List (top level, or as method parameter)
+    	LIST;
+		//A Map (top level, or as method parameter)
+		MAP;
+    	// Not operation (invert a boolean)
+    	NOT;
+}
+
+@header
+{
+package org.apache.tapestry5.beanmodel.internal.antlr;
+}
+
+	
+start 	:	expression^ EOF!;
+		
+expression
+	:	keyword
+	|	rangeOp
+	|	constant
+	|	propertyChain
+	|	list
+	|	notOp
+	|	map
+	;
+
+keyword	:	NULL | TRUE | FALSE | THIS;
+
+constant:	INTEGER| DECIMAL | STRING;	
+	
+propertyChain
+	:	term DEREF propertyChain -> ^(DEREF term propertyChain)
+	|	term SAFEDEREF propertyChain -> ^(SAFEDEREF term propertyChain)
+	|	term
+	;	
+	
+term	:	IDENTIFIER
+	|	methodInvocation
+	;
+	
+methodInvocation
+	:	id=IDENTIFIER LPAREN RPAREN -> ^(INVOKE $id)
+	|	id=IDENTIFIER LPAREN expressionList RPAREN -> ^(INVOKE $id expressionList)
+	;	
+	
+expressionList
+	:	expression (COMMA! expression)*
+	;	
+
+rangeOp
+	:	from=rangeopArg  RANGEOP to=rangeopArg -> ^(RANGEOP $from $to)
+	;	
+	
+rangeopArg 
+	:	INTEGER
+	|	propertyChain
+	;	
+	
+list	:	LBRACKET RBRACKET -> ^(LIST)
+	|	LBRACKET expressionList RBRACKET -> ^(LIST expressionList)
+	;	
+	
+notOp 	:	BANG expression -> ^(NOT expression)
+	;
+
+map 	:	LBRACE RBRACE -> ^(MAP)
+	|	LBRACE mapEntryList RBRACE -> ^(MAP mapEntryList)
+    ;
+	
+mapEntryList : mapEntry (COMMA! mapEntry)*;
+
+mapEntry :  mapKey COLON! expression;
+	
+mapKey :	keyword | constant | propertyChain;
+	
diff --git a/beanmodel/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionLexer.g b/beanmodel/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionLexer.g
deleted file mode 100644
index 3b52ba9..0000000
--- a/beanmodel/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionLexer.g
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2008, 2010, 2011 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-lexer grammar PropertyExpressionLexer;
-
-
-options
-{
-  superClass='org.apache.tapestry5.internal.antlr.BaseLexer';
-}
-
-@header
-{
-package org.apache.tapestry5.internal.antlr;
-}
-
-	
-// Integer constant
-fragment INTEGER
-	:	{this.getClass(); /* Fix java.lang.VerifyError: Stack size too large */};	
-	
-// Read a property or invoke a method.
-fragment DEREF 
-	:	{this.getClass(); /* Fix java.lang.VerifyError: Stack size too large */};	
-	
-// Range operator, ".." between two integers.	
-fragment RANGEOP
-	:	{this.getClass(); /* Fix java.lang.VerifyError: Stack size too large */};	
-	
-// Decimal number	
-fragment DECIMAL
-	:	{this.getClass(); /* Fix java.lang.VerifyError: Stack size too large */};	
-			
-fragment LETTER 
-	:	('a'..'z'|'A'..'Z');
-fragment DIGIT 
-	:	'0'..'9';	
-fragment SIGN
-	:	('+'|'-');
-LPAREN 	:	'(';
-RPAREN 	:	')';
-LBRACKET:	'[';
-RBRACKET:	']';
-COMMA	:	',';
-BANG	:	'!';
-LBRACE	:	'{';
-RBRACE	:	'}';
-COLON	:	':';
-
-fragment QUOTE
-	:	'\'';
-
-// Clumsy but effective approach to case-insensitive identifiers.
-
-fragment A
-	:	('a' | 'A');
-fragment E
-	:	('e' | 'E');
-fragment F
-	:	('f' | 'F');	
-fragment H
-	:	('h' | 'H');
-fragment I
-	:	('i' | 'I');
-fragment L 
-	: 	('l' | 'L');
-fragment N 
-	:	('n'|'N');
-fragment R
-	:	('r' | 'R');
-fragment S
-	:	('s' | 'S');
-fragment T 
-	:	('t' | 'T');
-fragment U 
-	:	('u' | 'U');
-
-// Identifiers are case insensitive
-
-NULL 	:	N U L L;
-TRUE	:	T R U E;
-FALSE	:	F A L S E;
-THIS	:	T H I S;
-
-IDENTIFIER 
-    :   JAVA_ID_START (JAVA_ID_PART)*
-    ;
-
-fragment
-JAVA_ID_START
-    :  '\u0024'
-    |  '\u0041'..'\u005a'
-    |  '\u005f'
-    |  '\u0061'..'\u007a'
-    |  '\u00c0'..'\u00d6'
-    |  '\u00d8'..'\u00f6'
-    |  '\u00f8'..'\u00ff'
-    |  '\u0100'..'\u1fff'
-    |  '\u3040'..'\u318f'
-    |  '\u3300'..'\u337f'
-    |  '\u3400'..'\u3d2d'
-    |  '\u4e00'..'\u9fff'
-    |  '\uf900'..'\ufaff'
-    ;
-
-fragment
-JAVA_ID_PART
-    :  JAVA_ID_START
-    |  '\u0030'..'\u0039'
-    ;
-
-
-// The Safe Dereference operator understands not to de-reference through
-// a null.
-
-SAFEDEREF 
-	: 	'?.';
-
-WS 	:	(' '|'\t'|'\n'|'\r')+ { skip(); };
-
-
-// Literal strings are always inside single quotes.
-STRING
-	:	QUOTE (options {greedy=false;} : .)* QUOTE { setText(getText().substring(1, getText().length()-1)); };
-
-
-// Special rule that uses parsing tricks to identify numbers and ranges; it's all about
-// the dot ('.').
-// Recognizes:
-// '.' as DEREF
-// '..' as RANGEOP
-// INTEGER (sign? digit+)
-// DECIMAL (sign? digits* . digits+)
-// Has to watch out for embedded rangeop (i.e. "1..10" is not "1." and ".10").
-
-NUMBER_OR_RANGEOP
-	:	SIGN? DIGIT+
-		(
-			{ input.LA(2) != '.' }? => '.' DIGIT* {   $type = DECIMAL; stripLeadingPlus(); }
-			| {  $type = INTEGER;  stripLeadingPlus(); }
-		)
-		
-	|	SIGN '.' DIGIT+ {  $type = DECIMAL;  stripLeadingPlus(); }
-	
-	|	'.'
-		( 
-			DIGIT+ { $type = DECIMAL; stripLeadingPlus();}
-			| '.' {$type = RANGEOP; }
-			| {$type = DEREF; }
-		)
-	;	
-
diff --git a/beanmodel/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g b/beanmodel/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g
deleted file mode 100644
index 14753e6..0000000
--- a/beanmodel/src/main/antlr/org/apache/tapestry5/internal/antlr/PropertyExpressionParser.g
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2008, 2009, 2011 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-parser grammar PropertyExpressionParser;
-
-
-options
-{
-  superClass='org.apache.tapestry5.internal.antlr.BaseParser';
-  output=AST;		
-  ASTLabelType=CommonTree;
-  tokenVocab=PropertyExpressionLexer;
-  backtrack=true;
-}
-
-tokens
-{	
-	// Parser token representing a method invocation
-    	INVOKE;
-    	// A List (top level, or as method parameter)
-    	LIST;
-		//A Map (top level, or as method parameter)
-		MAP;
-    	// Not operation (invert a boolean)
-    	NOT;
-}
-
-@header
-{
-package org.apache.tapestry5.internal.antlr;
-}
-
-	
-start 	:	expression^ EOF!;
-		
-expression
-	:	keyword
-	|	rangeOp
-	|	constant
-	|	propertyChain
-	|	list
-	|	notOp
-	|	map
-	;
-
-keyword	:	NULL | TRUE | FALSE | THIS;
-
-constant:	INTEGER| DECIMAL | STRING;	
-	
-propertyChain
-	:	term DEREF propertyChain -> ^(DEREF term propertyChain)
-	|	term SAFEDEREF propertyChain -> ^(SAFEDEREF term propertyChain)
-	|	term
-	;	
-	
-term	:	IDENTIFIER
-	|	methodInvocation
-	;
-	
-methodInvocation
-	:	id=IDENTIFIER LPAREN RPAREN -> ^(INVOKE $id)
-	|	id=IDENTIFIER LPAREN expressionList RPAREN -> ^(INVOKE $id expressionList)
-	;	
-	
-expressionList
-	:	expression (COMMA! expression)*
-	;	
-
-rangeOp
-	:	from=rangeopArg  RANGEOP to=rangeopArg -> ^(RANGEOP $from $to)
-	;	
-	
-rangeopArg 
-	:	INTEGER
-	|	propertyChain
-	;	
-	
-list	:	LBRACKET RBRACKET -> ^(LIST)
-	|	LBRACKET expressionList RBRACKET -> ^(LIST expressionList)
-	;	
-	
-notOp 	:	BANG expression -> ^(NOT expression)
-	;
-
-map 	:	LBRACE RBRACE -> ^(MAP)
-	|	LBRACE mapEntryList RBRACE -> ^(MAP mapEntryList)
-    ;
-	
-mapEntryList : mapEntry (COMMA! mapEntry)*;
-
-mapEntry :  mapKey COLON! expression;
-	
-mapKey :	keyword | constant | propertyChain;
-	
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModel.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModel.java
index fdb60ac..c441df0 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModel.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModel.java
@@ -38,7 +38,7 @@ public interface BeanModel<T>
 
 
     /**
-     * Creates a new bean instance.  This is based on {@link org.apache.tapestry5.ioc.ObjectLocator#autobuild(Class)},
+     * Creates a new bean instance.  This is based on {@link org.apache.tapestry5.commons.ObjectLocator#autobuild(Class)},
      * so a public constructor will be used, and dependencies injected.
      *
      * @return new instance of the bean
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
index 031e236..040439b 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
@@ -17,20 +17,20 @@ import org.apache.tapestry5.beanmodel.internal.services.PropertyConduitSourceImp
 import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
-import org.apache.tapestry5.internal.services.StringInterner;
-import org.apache.tapestry5.internal.services.StringInternerImpl;
-import org.apache.tapestry5.ioc.AnnotationProvider;
-import org.apache.tapestry5.ioc.Configuration;
-import org.apache.tapestry5.ioc.ObjectLocator;
-import org.apache.tapestry5.ioc.internal.BasicDataTypeAnalyzers;
-import org.apache.tapestry5.ioc.internal.BasicTypeCoercions;
-import org.apache.tapestry5.ioc.internal.services.TypeCoercerImpl;
-import org.apache.tapestry5.ioc.internal.util.TapestryException;
-import org.apache.tapestry5.ioc.services.CoercionTuple;
-import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
-import org.apache.tapestry5.ioc.services.PropertyAccess;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.services.DataTypeAnalyzer;
+import org.apache.tapestry5.commons.AnnotationProvider;
+import org.apache.tapestry5.commons.Configuration;
+import org.apache.tapestry5.commons.ObjectLocator;
+import org.apache.tapestry5.commons.internal.BasicDataTypeAnalyzers;
+import org.apache.tapestry5.commons.internal.BasicTypeCoercions;
+import org.apache.tapestry5.commons.internal.services.StringInterner;
+import org.apache.tapestry5.commons.internal.services.StringInternerImpl;
+import org.apache.tapestry5.commons.internal.services.TypeCoercerImpl;
+import org.apache.tapestry5.commons.internal.util.TapestryException;
+import org.apache.tapestry5.commons.services.CoercionTuple;
+import org.apache.tapestry5.commons.services.DataTypeAnalyzer;
+import org.apache.tapestry5.commons.services.PlasticProxyFactory;
+import org.apache.tapestry5.commons.services.PropertyAccess;
+import org.apache.tapestry5.commons.services.TypeCoercer;
 import org.slf4j.LoggerFactory;
 
 import java.lang.annotation.Annotation;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelUtils.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelUtils.java
index 41d8866..fd09760 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelUtils.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelUtils.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.beanmodel;
 
-import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
+import org.apache.tapestry5.commons.util.CommonsUtils;
 
 /**
  * Utilities used in a few places to modify an existing {@link BeanModel}.
@@ -53,7 +53,7 @@ public final class BeanModelUtils
 
     private static final String join(String firstList, String optionalSecondList)
     {
-        if (InternalCommonsUtils.isBlank(optionalSecondList))
+        if (CommonsUtils.isBlank(optionalSecondList))
             return firstList;
 
         return firstList + "," + optionalSecondList;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit.java
index c8be9ef..af67c5f 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.beanmodel;
 
-import org.apache.tapestry5.ioc.AnnotationProvider;
+import org.apache.tapestry5.commons.AnnotationProvider;
 
 /**
  * Used to read or update the value associated with a property. A PropertyConduit provides access to the annotations on
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit2.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit2.java
index 36fbf8d..cdb017f 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit2.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit2.java
@@ -23,7 +23,7 @@ import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 /**
  * Extension to {@link PropertyConduit} that adds a method to access the generic property type.
  * {@link PropertyConduitSource} instances should ideally return PropertyConduit2 objects, not PropertyConduit.
- * This is only primarily of interest to {@link Binding2}.
+ * This is only primarily of interest to <a href="https://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Binding2.html">Binding2</a>.
  * 
  * @since 5.4
  */
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyModel.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyModel.java
index 51d9ae3..35aa758 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyModel.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyModel.java
@@ -12,7 +12,7 @@
 
 package org.apache.tapestry5.beanmodel;
 
-import org.apache.tapestry5.ioc.AnnotationProvider;
+import org.apache.tapestry5.commons.AnnotationProvider;
 
 /**
  * Part of a {@link org.apache.tapestry5.beanmodel.BeanModel} that defines the attributes of a single property of a
@@ -20,7 +20,7 @@ import org.apache.tapestry5.ioc.AnnotationProvider;
  *
  *
  * A PropertyModel is also an {@link AnnotationProvider}, as long as the {@link org.apache.tapestry5.beanmodel.PropertyConduit} is
- * non-null.  When there is no property conduit, then {@link org.apache.tapestry5.ioc.AnnotationProvider#getAnnotation(Class)}
+ * non-null.  When there is no property conduit, then {@link org.apache.tapestry5.commons.AnnotationProvider#getAnnotation(Class)}
  * will return null.
  */
 public interface PropertyModel extends AnnotationProvider
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/BeanModelImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/BeanModelImpl.java
index bf51280..cab472e 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/BeanModelImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/BeanModelImpl.java
@@ -20,13 +20,13 @@ import org.apache.tapestry5.beanmodel.PropertyConduit;
 import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.beanmodel.internal.services.CoercingPropertyConduitWrapper;
 import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
-import org.apache.tapestry5.ioc.Messages;
-import org.apache.tapestry5.ioc.ObjectLocator;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.ioc.util.AvailableValues;
-import org.apache.tapestry5.ioc.util.UnknownValueException;
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.ObjectLocator;
+import org.apache.tapestry5.commons.internal.util.InternalCommonsUtils;
+import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.commons.util.AvailableValues;
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.commons.util.UnknownValueException;
 import org.apache.tapestry5.plastic.PlasticUtils;
 
 import java.util.List;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/PropertyModelImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/PropertyModelImpl.java
index 6707d4c..16f34ab 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/PropertyModelImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/PropertyModelImpl.java
@@ -20,9 +20,8 @@ import org.apache.tapestry5.beaneditor.Sortable;
 import org.apache.tapestry5.beanmodel.BeanModel;
 import org.apache.tapestry5.beanmodel.PropertyConduit;
 import org.apache.tapestry5.beanmodel.PropertyModel;
-import org.apache.tapestry5.ioc.Messages;
-import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
-import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.internal.util.InternalCommonsUtils;
 import org.apache.tapestry5.plastic.PlasticUtils;
 
 @SuppressWarnings("all")
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/BeanModelSourceImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/BeanModelSourceImpl.java
index befb8ff..c542cab 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/BeanModelSourceImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/BeanModelSourceImpl.java
@@ -14,6 +14,11 @@
 
 package org.apache.tapestry5.beanmodel.internal.services;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.tapestry5.beaneditor.NonVisual;
 import org.apache.tapestry5.beaneditor.ReorderProperties;
 import org.apache.tapestry5.beanmodel.BeanModel;
@@ -21,19 +26,18 @@ import org.apache.tapestry5.beanmodel.BeanModelUtils;
 import org.apache.tapestry5.beanmodel.internal.beanmodel.BeanModelImpl;
 import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
-import org.apache.tapestry5.ioc.Location;
-import org.apache.tapestry5.ioc.Messages;
-import org.apache.tapestry5.ioc.ObjectLocator;
+import org.apache.tapestry5.commons.Location;
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.ObjectLocator;
+import org.apache.tapestry5.commons.services.ClassPropertyAdapter;
+import org.apache.tapestry5.commons.services.DataTypeAnalyzer;
+import org.apache.tapestry5.commons.services.PlasticProxyFactory;
+import org.apache.tapestry5.commons.services.PropertyAccess;
+import org.apache.tapestry5.commons.services.PropertyAdapter;
+import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.ioc.annotations.ComponentLayer;
 import org.apache.tapestry5.ioc.annotations.Primary;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.services.*;
-import org.apache.tapestry5.services.ComponentLayer;
-import org.apache.tapestry5.services.DataTypeAnalyzer;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-import java.util.List;
 
 public class BeanModelSourceImpl implements BeanModelSource
 {
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/ClassPropertyAdapterImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/ClassPropertyAdapterImpl.java
index c2005f1..ff886c4 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/ClassPropertyAdapterImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/ClassPropertyAdapterImpl.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.beanmodel.internal.services;
 
-import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
+import static org.apache.tapestry5.commons.util.CollectionFactory.newCaseInsensitiveMap;
 
 import java.beans.PropertyDescriptor;
 import java.lang.annotation.Annotation;
@@ -23,12 +23,12 @@ import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.tapestry5.ioc.internal.services.ServiceMessages;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.internal.util.GenericsUtils;
-import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
-import org.apache.tapestry5.ioc.services.ClassPropertyAdapter;
-import org.apache.tapestry5.ioc.services.PropertyAdapter;
+import org.apache.tapestry5.commons.internal.services.ServiceMessages;
+import org.apache.tapestry5.commons.internal.util.GenericsUtils;
+import org.apache.tapestry5.commons.internal.util.InternalCommonsUtils;
+import org.apache.tapestry5.commons.services.ClassPropertyAdapter;
+import org.apache.tapestry5.commons.services.PropertyAdapter;
+import org.apache.tapestry5.commons.util.CollectionFactory;
 
 public class ClassPropertyAdapterImpl implements ClassPropertyAdapter
 {
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/CoercingPropertyConduitWrapper.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/CoercingPropertyConduitWrapper.java
index 7b371a4..a5b9df8 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/CoercingPropertyConduitWrapper.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/CoercingPropertyConduitWrapper.java
@@ -19,7 +19,7 @@ import java.lang.reflect.Type;
 
 import org.apache.tapestry5.beanmodel.PropertyConduit;
 import org.apache.tapestry5.beanmodel.PropertyConduit2;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.apache.tapestry5.commons.services.TypeCoercer;
 
 public class CoercingPropertyConduitWrapper implements PropertyConduit2
 {
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/LiteralPropertyConduit.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/LiteralPropertyConduit.java
index eca1ced..da44de8 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/LiteralPropertyConduit.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/LiteralPropertyConduit.java
@@ -18,8 +18,8 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
 import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
-import org.apache.tapestry5.ioc.AnnotationProvider;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.apache.tapestry5.commons.AnnotationProvider;
+import org.apache.tapestry5.commons.services.TypeCoercer;
 
 /**
  * A PropertyConduit for a literal value in an expression, such as a number, or "true", "false" or "null".
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAccessImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAccessImpl.java
index a2838c6..88eac22 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAccessImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAccessImpl.java
@@ -26,9 +26,9 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.services.ClassPropertyAdapter;
-import org.apache.tapestry5.ioc.services.PropertyAccess;
+import org.apache.tapestry5.commons.services.ClassPropertyAdapter;
+import org.apache.tapestry5.commons.services.PropertyAccess;
+import org.apache.tapestry5.commons.util.CollectionFactory;
 
 @SuppressWarnings("unchecked")
 public class PropertyAccessImpl implements PropertyAccess
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAdapterImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAdapterImpl.java
index 9ee932a..171ffc1 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAdapterImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAdapterImpl.java
@@ -14,19 +14,19 @@
 
 package org.apache.tapestry5.beanmodel.internal.services;
 
-import org.apache.tapestry5.ioc.AnnotationProvider;
-import org.apache.tapestry5.ioc.internal.services.AccessableObjectAnnotationProvider;
-import org.apache.tapestry5.ioc.internal.services.AnnotationProviderChain;
-import org.apache.tapestry5.ioc.internal.services.ServiceMessages;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.services.ClassPropertyAdapter;
-import org.apache.tapestry5.ioc.services.PropertyAdapter;
-import org.apache.tapestry5.ioc.util.ExceptionUtils;
-
 import java.lang.annotation.Annotation;
 import java.lang.reflect.*;
 import java.util.List;
 
+import org.apache.tapestry5.commons.AnnotationProvider;
+import org.apache.tapestry5.commons.internal.services.AccessableObjectAnnotationProvider;
+import org.apache.tapestry5.commons.internal.services.AnnotationProviderChain;
+import org.apache.tapestry5.commons.internal.services.ServiceMessages;
+import org.apache.tapestry5.commons.services.ClassPropertyAdapter;
+import org.apache.tapestry5.commons.services.PropertyAdapter;
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.commons.util.ExceptionUtils;
+
 public class PropertyAdapterImpl implements PropertyAdapter
 {
     private final ClassPropertyAdapter classAdapter;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitDelegate.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitDelegate.java
index 780cd59..bfbdbae 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitDelegate.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitDelegate.java
@@ -17,9 +17,9 @@ package org.apache.tapestry5.beanmodel.internal.services;
 import java.lang.annotation.Annotation;
 
 import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
-import org.apache.tapestry5.internal.util.IntegerRange;
-import org.apache.tapestry5.ioc.AnnotationProvider;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.apache.tapestry5.commons.AnnotationProvider;
+import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.commons.util.IntegerRange;
 
 /**
  * Companion class for {@link org.apache.tapestry5.beanmodel.PropertyConduit} instances created by the
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
index 292d430..46641a8 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
@@ -14,45 +14,74 @@
 
 package org.apache.tapestry5.beanmodel.internal.services;
 
-import org.antlr.runtime.ANTLRInputStream;
-import org.antlr.runtime.CommonTokenStream;
-import org.antlr.runtime.tree.Tree;
-import org.apache.tapestry5.beanmodel.PropertyConduit;
-import org.apache.tapestry5.beanmodel.PropertyConduit2;
-import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
-import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
-import org.apache.tapestry5.internal.antlr.PropertyExpressionLexer;
-import org.apache.tapestry5.internal.antlr.PropertyExpressionParser;
-import org.apache.tapestry5.internal.services.StringInterner;
-import org.apache.tapestry5.internal.util.IntegerRange;
-import org.apache.tapestry5.internal.util.MultiKey;
-import org.apache.tapestry5.ioc.AnnotationProvider;
-import org.apache.tapestry5.ioc.annotations.PostInjection;
-import org.apache.tapestry5.ioc.internal.NullAnnotationProvider;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.internal.util.GenericsUtils;
-import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
-import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
-import org.apache.tapestry5.ioc.services.*;
-import org.apache.tapestry5.ioc.util.AvailableValues;
-import org.apache.tapestry5.ioc.util.ExceptionUtils;
-import org.apache.tapestry5.ioc.util.UnknownValueException;
-import org.apache.tapestry5.plastic.*;
-import org.apache.tapestry5.services.ComponentClasses;
-import org.apache.tapestry5.services.ComponentLayer;
-import org.apache.tapestry5.services.InvalidationEventHub;
-
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.DECIMAL;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.DEREF;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.FALSE;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.IDENTIFIER;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.INTEGER;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.INVOKE;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.LIST;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.MAP;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.NOT;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.NULL;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.RANGEOP;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.SAFEDEREF;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.STRING;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.THIS;
+import static org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser.TRUE;
+
+import org.apache.tapestry5.ioc.annotations.ComponentLayer;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.annotation.Annotation;
-import java.lang.reflect.*;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static org.apache.tapestry5.internal.antlr.PropertyExpressionParser.*;
+import org.antlr.runtime.ANTLRInputStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.tree.Tree;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit2;
+import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
+import org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionLexer;
+import org.apache.tapestry5.beanmodel.internal.antlr.PropertyExpressionParser;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
+import org.apache.tapestry5.commons.AnnotationProvider;
+import org.apache.tapestry5.commons.internal.NullAnnotationProvider;
+import org.apache.tapestry5.commons.internal.services.StringInterner;
+import org.apache.tapestry5.commons.internal.util.GenericsUtils;
+import org.apache.tapestry5.commons.internal.util.InternalCommonsUtils;
+import org.apache.tapestry5.commons.services.ClassPropertyAdapter;
+import org.apache.tapestry5.commons.services.InvalidationEventHub;
+import org.apache.tapestry5.commons.services.PlasticProxyFactory;
+import org.apache.tapestry5.commons.services.PropertyAccess;
+import org.apache.tapestry5.commons.services.PropertyAdapter;
+import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.commons.util.AvailableValues;
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.commons.util.ExceptionUtils;
+import org.apache.tapestry5.commons.util.IntegerRange;
+import org.apache.tapestry5.commons.util.MultiKey;
+import org.apache.tapestry5.commons.util.UnknownValueException;
+import org.apache.tapestry5.ioc.annotations.ComponentClasses;
+import org.apache.tapestry5.ioc.annotations.PostInjection;
+import org.apache.tapestry5.plastic.Condition;
+import org.apache.tapestry5.plastic.InstructionBuilder;
+import org.apache.tapestry5.plastic.InstructionBuilderCallback;
+import org.apache.tapestry5.plastic.MethodDescription;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticClassTransformer;
+import org.apache.tapestry5.plastic.PlasticField;
+import org.apache.tapestry5.plastic.PlasticMethod;
+import org.apache.tapestry5.plastic.PlasticUtils;
 
 public class PropertyConduitSourceImpl implements PropertyConduitSource
 {
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/package-info.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/package-info.java
new file mode 100644
index 0000000..338f52e
--- /dev/null
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/package-info.java
@@ -0,0 +1,19 @@
+// Copyright 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/**
+ * Support classes for the {@link org.apache.tapestry5.corelib.components.BeanEditor}
+ * component.
+ */
+package org.apache.tapestry5.beanmodel;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/BeanModelSource.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/BeanModelSource.java
index 1df5bb4..6399c1f 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/BeanModelSource.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/BeanModelSource.java
@@ -13,7 +13,7 @@
 package org.apache.tapestry5.beanmodel.services;
 
 import org.apache.tapestry5.beanmodel.BeanModel;
-import org.apache.tapestry5.ioc.Messages;
+import org.apache.tapestry5.commons.Messages;
 
 /**
  * Used by a component to create a default {@link org.apache.tapestry5.beanmodel.BeanModel} for a particular bean
@@ -43,8 +43,8 @@ public interface BeanModelSource
      *                                 org.apache.tapestry5.corelib.components.BeanDisplay}).
      * @param messages                 Used to find explicit overrides of
      * @return a model
-     * @deprecated use {@link #createDisplayModel(Class, org.apache.tapestry5.ioc.Messages)} or {@link
-     *             #createEditModel(Class, org.apache.tapestry5.ioc.Messages)}
+     * @deprecated use {@link #createDisplayModel(Class, org.apache.tapestry5.commons.Messages)} or {@link
+     *             #createEditModel(Class, org.apache.tapestry5.commons.Messages)}
      */
     <T> BeanModel<T> create(Class<T> beanClass, boolean filterReadOnlyProperties, Messages messages);
 
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PlasticProxyFactoryImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PlasticProxyFactoryImpl.java
index 0e95f9e..a1edb84 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PlasticProxyFactoryImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PlasticProxyFactoryImpl.java
@@ -15,15 +15,15 @@
 package org.apache.tapestry5.beanmodel.services;
 
 import org.apache.tapestry5.beanmodel.internal.services.PlasticClassListenerLogger;
+import org.apache.tapestry5.commons.Location;
+import org.apache.tapestry5.commons.ObjectCreator;
+import org.apache.tapestry5.commons.internal.services.StringLocation;
+import org.apache.tapestry5.commons.internal.util.InternalCommonsUtils;
+import org.apache.tapestry5.commons.services.PlasticProxyFactory;
+import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.internal.plastic.PlasticInternalUtils;
 import org.apache.tapestry5.internal.plastic.asm.Type;
 import org.apache.tapestry5.internal.plastic.asm.tree.*;
-import org.apache.tapestry5.ioc.Location;
-import org.apache.tapestry5.ioc.ObjectCreator;
-import org.apache.tapestry5.ioc.internal.services.StringLocation;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
-import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.apache.tapestry5.plastic.*;
 import org.slf4j.Logger;
 
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PropertyConduitSource.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PropertyConduitSource.java
index 3f10792..9dd6668 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PropertyConduitSource.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PropertyConduitSource.java
@@ -26,8 +26,8 @@ public interface PropertyConduitSource
      * returns, so despite the name, this method does not always create a <em>new</em> conduit. The cache is cleared if
      * a change to component classes is observed.
      *
-     * Callers of this method should observe notifications from the {@link org.apache.tapestry5.services.InvalidationEventHub}
-     * for {@link org.apache.tapestry5.services.ComponentClasses} and discard any aquired conduits; failure to do so
+     * Callers of this method should observe notifications from the {@link org.apache.tapestry5.commons.services.InvalidationEventHub}
+     * for {@link org.apache.tapestry5.ioc.annotations.ComponentClasses} and discard any aquired conduits; failure to do so
      * will create memory leaks whenever component classes change (the conduits will keep references to the old classes
      * and classloaders).
      *
diff --git a/build.gradle b/build.gradle
index b6d25c8..d7de534 100755
--- a/build.gradle
+++ b/build.gradle
@@ -229,10 +229,20 @@ subprojects {
     }
 
     jar {
+    	// println "JAR projectDir: " + projectDir.getName().replaceAll("5", "").replaceAll("tapestry-", "").replaceAll("-", "");
         from(projectDir) {
             include "*.txt"
             into "META-INF"
         }
+        manifest {
+        	attributes("Automatic-Module-Name": "org.apache.tapestry." + projectDir.getName()
+        		.replaceAll("tapestry5", "tapestry")
+        		.replaceAll("tapestry-", "")
+        		.replaceAll("-", ""))        		
+        	if (projectDir.getName().equals("tapestry-version-migrator")) {
+        		attributes("Main-Class": "org.apache.tapestry5.versionmigrator.Main")
+        	}
+        }
     }
 
     task sourcesJar(type: Jar) {
@@ -407,7 +417,7 @@ dependencies {
 }
 
 task combinedJacocoReport(type:JacocoReport){
-  def subprojectsToConsider = subprojects.findAll {it.name != 'quickstart'}
+  def subprojectsToConsider = subprojects.findAll {it.name != 'quickstart' && it.name != 'beanmodel' && it.name != 'commons' && it.name != 'genericsresolver-guava' && it.name != 'tapestry5-annotations' && it.name != 'tapestry-internal-test' && it.name != 'tapestry-runner' && it.name != 'tapestry-test-constants' && it.name != 'tapestry-test-data' && it.name != 'tapestry-ioc-jcache'}
   dependsOn = subprojectsToConsider.test
   additionalSourceDirs = files(subprojectsToConsider.sourceSets.main.allSource.srcDirs)
   sourceDirectories = files(subprojectsToConsider.sourceSets.main.allSource.srcDirs)
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/AnnotationProvider.java b/commons/src/main/java/org/apache/tapestry5/commons/AnnotationProvider.java
new file mode 100644
index 0000000..ed269e5
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/AnnotationProvider.java
@@ -0,0 +1,33 @@
+// Copyright 2007, 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * A source of annotations. This interface is used to mask where the annotations come from (for example, from a Method,
+ * a Class, or some other source).
+ */
+public interface AnnotationProvider
+{
+    /**
+     * Searches for the specified annotation, returning the matching annotation instance.
+     *
+     * @param <T>
+     * @param annotationClass used to select the annotation to return
+     * @return the annotation, or null if not found
+     */
+    <T extends Annotation> T getAnnotation(Class<T> annotationClass);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/Configuration.java b/commons/src/main/java/org/apache/tapestry5/commons/Configuration.java
new file mode 100644
index 0000000..22022f2
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/Configuration.java
@@ -0,0 +1,51 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+/**
+ * Object passed into a service contributor method that allows the method provide contributed values to the service's
+ * configuration.
+ *
+ * A service can <em>collect</em> contributions in three different ways:
+ * <ul>
+ * <li>As an un-ordered collection of values</li>
+ * <li>As an ordered list of values (where each value has a unique id, pre-requisites and post-requisites)</li>
+ * <li>As a map of keys and values
+ * </ul>
+ *
+ * This implementation is used for un-ordered configuration data.
+ *
+ * The service defines the <em>type</em> of contribution, in terms of a base class or service interface. Contributions
+ * must be compatible with the type.
+ */
+public interface Configuration<T>
+{
+    /**
+     * Adds an object to the service's contribution.
+     * 
+     * @param object
+     *            to add to the service's configuration
+     */
+    void add(T object);
+
+    /**
+     * Automatically instantiates an instance of the class, with dependencies injected, and adds it to the
+     * configuration. When the configuration type is an interface and the class to be contributed is a local file,
+     * then a reloadable proxy for the class will be created and contributed.
+     * 
+     * @param clazz
+     *            what class to instantiate
+     * @since 5.1.0.0
+     */
+    void addInstance(Class<? extends T> clazz);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/Locatable.java b/commons/src/main/java/org/apache/tapestry5/commons/Locatable.java
new file mode 100644
index 0000000..754f598
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/Locatable.java
@@ -0,0 +1,27 @@
+// Copyright 2006, 2008 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+/**
+ * Interface implemented by objects which carry a location tag. Defines a readable property, location.
+ */
+@SuppressWarnings({"JavaDoc"})
+public interface Locatable
+{
+    /**
+     * Returns the location associated with this object for error reporting purposes.
+     */
+    Location getLocation();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/Location.java b/commons/src/main/java/org/apache/tapestry5/commons/Location.java
new file mode 100644
index 0000000..70706eb
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/Location.java
@@ -0,0 +1,38 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+/**
+ * A kind of tag applied to other objects to identify where they came from, in terms of a file (the resource), a line
+ * number, and a column number. This is part of "line precise exception reporting", whereby errors at runtime can be
+ * tracked backwards to the files from which they were parsed or otherwise constructed.
+ */
+public interface Location
+{
+    /**
+     * The resource from which the object tagged with a location was derived.
+     */
+    Resource getResource();
+
+    /**
+     * The line number within the resource, if known, or -1 otherwise.
+     */
+    int getLine();
+
+    /**
+     * The column number within the line if known, or -1 otherwise.
+     */
+    int getColumn();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/MappedConfiguration.java b/commons/src/main/java/org/apache/tapestry5/commons/MappedConfiguration.java
new file mode 100644
index 0000000..1e5011f
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/MappedConfiguration.java
@@ -0,0 +1,79 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+/**
+ * Object passed into a service contributor method that allows the method provide contributed values to the service's
+ * configuration.
+ *
+ * A service can <em>collect</em> contributions in three different ways:
+ * <ul>
+ * <li>As an un-ordered collection of values</li>
+ * <li>As an ordered list of values (where each value has a unique id, pre-requisites and post-requisites)</li>
+ * <li>As a map of keys and values
+ * </ul>
+ *
+ * The service defines the <em>type</em> of contribution, in terms of a base class or service interface. Contributions
+ * must be compatible with the type.
+ */
+public interface MappedConfiguration<K, V>
+{
+
+    /**
+     * Adds a keyed object to the service's contribution.
+     * 
+     * @param key
+     *            unique id for the value
+     * @param value
+     *            to contribute
+     * @throws IllegalArgumentException
+     *             if key is not unique
+     */
+    void add(K key, V value);
+
+    /**
+     * Overrides an existing contribution by its key.
+     * 
+     * @param key
+     *            unique id of value to override
+     * @param value
+     *            new value, or null to remove the key entirely
+     * @since 5.1.0.0
+     */
+    void override(K key, V value);
+
+    /**
+     * Adds a keyed object as an instantiated instance (with dependencies injected) of a class. When the value
+     * type is an interface and the class to be contributed is a local file,
+     * then a reloadable proxy for the value class will be created and contributed.
+     * 
+     * @param key
+     *            unique id for the value
+     * @param clazz
+     *            class to instantiate and contribute
+     * @since 5.1.0.0
+     */
+    void addInstance(K key, Class<? extends V> clazz);
+
+    /**
+     * Overrides an existing contribution with a new instance. When the value
+     * type is an interface and the class to be contributed is a local file,
+     * then a reloadable proxy for the value class will be created and contributed.
+     * 
+     * @param key
+     *            unique id of value to override
+     * @param clazz
+     *            class to instantiate as override
+     */
+    void overrideInstance(K key, Class<? extends V> clazz);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/MessageFormatter.java b/commons/src/main/java/org/apache/tapestry5/commons/MessageFormatter.java
new file mode 100644
index 0000000..871dd2a
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/MessageFormatter.java
@@ -0,0 +1,32 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+/**
+ * Obtained from a <a href="https://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/MessageFormatter.html">org.apache.tapestry5.ioc.Messages</a>, used to format messages for a specific localized message
+ * key.
+ */
+public interface MessageFormatter
+{
+    /**
+     * Formats the message. The arguments are passed to {@link java.util.Formatter} as is with one exception: Object of
+     * type {@link Throwable} are converted to their {@link Throwable#getMessage()} (or, if that is null, to the name of
+     * the class).
+     *
+     * @param args
+     * @return formatted string
+     */
+    String format(Object... args);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/Messages.java b/commons/src/main/java/org/apache/tapestry5/commons/Messages.java
new file mode 100644
index 0000000..a18a251
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/Messages.java
@@ -0,0 +1,61 @@
+// Copyright 2006, 2007, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+import java.util.Set;
+
+/**
+ * Provides access to a messages catalog, a set of properties files that provide localized messages for a particular
+ * locale. The message catalog consists of keys and values and follows the semantics of a Java {@link
+ * java.util.ResourceBundle} with some changes.
+ */
+public interface Messages
+{
+    /**
+     * Returns true if the bundle contains the named key.
+     */
+    boolean contains(String key);
+
+    /**
+     * Returns the localized message for the given key. If catalog does not contain such a key, then a modified version
+     * of the key is returned (converted to upper case and enclosed in brackets).
+     *
+     * @param key
+     * @return localized message for key, or placeholder
+     */
+    String get(String key);
+
+    /**
+     * Returns a formatter for the message, which can be used to substitute arguments (as per {@link
+     * java.util.Formatter}).
+     *
+     * @param key
+     * @return formattable object
+     */
+    MessageFormatter getFormatter(String key);
+
+    /**
+     * Convenience for accessing a formatter and formatting a localized message with arguments.
+     */
+    String format(String key, Object... args);
+
+    /**
+     * Returns a set of all the keys for which this instance may provide a value.
+     *
+     * @return set of keys
+     * @since 5.4
+     */
+    Set<String> getKeys();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/ObjectCreator.java b/commons/src/main/java/org/apache/tapestry5/commons/ObjectCreator.java
new file mode 100644
index 0000000..be18265
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/ObjectCreator.java
@@ -0,0 +1,27 @@
+// Copyright 2006, 2008, 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+/**
+ * Interface used to encapsulate any strategy used defer the creation of some object until just as needed.
+ */
+public interface ObjectCreator<T>
+{
+    /**
+     * Create and return the object. In some limited circumstances, the implementation may cache the result, returning
+     * the same object for repeated calls.
+     */
+    T createObject();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/ObjectLocator.java b/commons/src/main/java/org/apache/tapestry5/commons/ObjectLocator.java
new file mode 100644
index 0000000..a435369
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/ObjectLocator.java
@@ -0,0 +1,137 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+import org.apache.tapestry5.ioc.annotations.Inject;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Defines an object which can provide access to services defined within a {@link org.apache.tapestry5.ioc.Registry}, or
+ * to objects or object instances available by other means. Services are accessed via service id, or
+ * (when appropriate)
+ * by just service interface. The Registry itself implements this interface, as does
+ * {@link org.apache.tapestry5.ioc.ServiceResources}.
+ */
+public interface ObjectLocator
+{
+    /**
+     * Obtains a service via its unique service id. Returns the service's proxy. The service proxy
+     * implements the same
+     * interface as the actual service, and is used to instantiate the actual service only as needed
+     * (this is
+     * transparent to the application).
+     *
+     * @param <T>
+     * @param serviceId        unique Service id used to locate the service object (may contain <em>symbols</em>,
+     *                         which
+     *                         will be expanded), case is ignored
+     * @param serviceInterface the interface implemented by the service (or an interface extended by the service
+     *                         interface)
+     * @return the service instance
+     * @throws RuntimeException if the service is not defined, or if an error occurs instantiating it
+     */
+    <T> T getService(String serviceId, Class<T> serviceInterface);
+
+    /**
+     * Locates a service given a service interface and (optionally) some marker annotation types. A single service must implement the service
+     * interface (which                                                   * can be hard to guarantee) and by marked by all the marker types. The search takes into account inheritance of the service interface
+     * (not the service <em>implementation</em>), which may result in a failure due to extra
+     * matches.
+     *
+     * @param serviceInterface the interface the service implements
+     * @return the service's proxy
+     * @throws RuntimeException if the service does not exist (this is considered programmer error), or multiple
+     *                          services directly implement, or extend from, the service interface
+     * @see org.apache.tapestry5.ioc.annotations.Marker
+     */
+    <T> T getService(Class<T> serviceInterface);
+
+    /**
+     * Locates a service given a service interface and (optionally) some marker annotation types. A single service must implement the service
+     * interface (which                                                   * can be hard to guarantee) and by marked by all the marker types. The search takes into account inheritance of the service interface
+     * (not the service <em>implementation</em>), which may result in a failure due to extra
+     * matches.        The ability to specify marker annotation types was added in 5.3
+     *
+     * @param serviceInterface the interface the service implements
+     * @param markerTypes      Markers used to select a specific service that implements the interface
+     * @return the service's proxy
+     * @throws RuntimeException if the service does not exist (this is considered programmer error), or multiple
+     *                          services directly implement, or extend from, the service interface
+     * @see org.apache.tapestry5.ioc.annotations.Marker
+     * @since 5.3
+     */
+    <T> T getService(Class<T> serviceInterface, Class<? extends Annotation>... markerTypes);
+
+    /**
+     * Obtains an object indirectly, using the {@link org.apache.tapestry5.ioc.services.MasterObjectProvider} service.
+     *
+     * @param objectType         the type of object to be returned
+     * @param annotationProvider provides access to annotations on the field or parameter for which a value is to
+     *                           be
+     *                           obtained, which may be utilized in selecting an appropriate object, use
+     *                           <strong>null</strong> when annotations are not available (in which case, selection
+     *                           will
+     *                           be based only on the object type)
+     * @param <T>
+     * @return the requested object
+     * @see ObjectProvider
+     */
+    <T> T getObject(Class<T> objectType, AnnotationProvider annotationProvider);
+
+    /**
+     * Autobuilds a class by finding the public constructor with the most parameters. Services and other resources or
+     * dependencies will be injected into the parameters of the constructor and into private fields marked with the
+     * {@link Inject} annotation. There are two cases: constructing a service implementation, and constructing
+     * an arbitrary object. In the former case, many <em>service resources</em> are also available for injection, not
+     * just dependencies or objects provided via the MasterObjectProvider service.
+     *
+     * @param <T>
+     * @param clazz the type of object to instantiate
+     * @return the instantiated instance
+     * @throws RuntimeException if the autobuild fails
+     */
+    <T> T autobuild(Class<T> clazz);
+
+    /**
+     * Preferred version of {@link #autobuild(Class)} that tracks the operation using
+     * {@link org.apache.tapestry5.ioc.OperationTracker#invoke(String, org.apache.tapestry5.ioc.Invokable)}.
+     *
+     * @param <T>
+     * @param description description used with {@link org.apache.tapestry5.ioc.OperationTracker}
+     * @param clazz       the type of object to instantiate
+     * @return the instantiated instance
+     * @throws RuntimeException if the autobuild fails
+     * @since 5.2.0
+     */
+    <T> T autobuild(String description, Class<T> clazz);
+
+    /**
+     * Creates a proxy. The proxy will defer invocation of {@link #autobuild(Class)} until
+     * just-in-time (that is, first method invocation). In a limited number of cases, it is necessary to use such a
+     * proxy to prevent service construction cycles, particularly when contributing (directly or indirectly) to the
+     * {@link org.apache.tapestry5.ioc.services.MasterObjectProvider} (which is itself at the heart
+     * of autobuilding).
+     *
+     * If the class file for the class is a file on the file system (not a file packaged in a JAR), then the proxy will
+     * <em>autoreload</em>: changing the class file will result in the new class being reloaded and re-instantiated
+     * (with dependencies).
+     *
+     * @param <T>
+     * @param interfaceClass      the interface implemented by the proxy
+     * @param implementationClass a concrete class that implements the interface
+     * @return a proxy
+     * @see #autobuild(Class)
+     */
+    <T> T proxy(Class<T> interfaceClass, Class<? extends T> implementationClass);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/ObjectProvider.java b/commons/src/main/java/org/apache/tapestry5/commons/ObjectProvider.java
new file mode 100644
index 0000000..db596fb
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/ObjectProvider.java
@@ -0,0 +1,44 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+/**
+ * Object providers represent an alternate way to locate an object provided somewhere in the {@link
+ * org.apache.tapestry5.ioc.Registry}. Instead of using a just the service id to gain access to a service within the
+ * Registry, object providers in different flavors are capable of vending, or even creating, objects of disparate types
+ * from disparate sources.
+ *
+ * Object providers are consulted in a strict order, and the first non-null result is taken.
+ *
+ * In many cases, an object provider searches for additional annotations on the element (usually a parameter, or perhaps
+ * a field) for which a value is required.
+ */
+public interface ObjectProvider
+{
+    /**
+     * Provides an object based on an expression. The process of providing objects occurs within a particular
+     * <em>context</em>, which will typically be a service builder method, service contributor method, or service
+     * decorator method. The locator parameter provides access to the services visible <em>to that context</em>.
+     *
+     * @param objectType         the expected object type
+     * @param annotationProvider provides access to annotations (typically, the field or parameter to which an
+     *                           injection-related annotation is attached); annotations on the field or parameter may
+     *                           also be used when resolving the desired object
+     * @param locator            locator for the <em>context</em> in which the provider is being used
+     * @param <T>
+     * @return the requested object, or null if this object provider can not supply an object
+     * @throws RuntimeException if the expression can not be evaluated, or the type of object identified is not
+     *                          assignable to the type specified by the objectType parameter
+     */
+    <T> T provide(Class<T> objectType, AnnotationProvider annotationProvider, ObjectLocator locator);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/OrderedConfiguration.java b/commons/src/main/java/org/apache/tapestry5/commons/OrderedConfiguration.java
new file mode 100644
index 0000000..dd2abaf
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/OrderedConfiguration.java
@@ -0,0 +1,82 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+/**
+ * Object passed into a service contributor method that allows the method provide contributed values to the service's
+ * configuration.
+ *
+ * A service can <em>collect</em> contributions in three different ways:
+ * <ul>
+ * <li>As an un-ordered collection of values</li>
+ * <li>As an ordered list of values (where each value has a unique id, pre-requisites and post-requisites)</li>
+ * <li>As a map of keys and values
+ * </ul>
+ *
+ * The service defines the <em>type</em> of contribution, in terms of a base class or service interface. Contributions
+ * must be compatible with the type, or be {@linkplain org.apache.tapestry5.commons.services.TypeCoercer coercable} to the type.
+ *
+ * @see org.apache.tapestry5.ioc.annotations.Contribute
+ * @see org.apache.tapestry5.ioc.annotations.UsesConfiguration
+ */
+public interface OrderedConfiguration<T>
+{
+    /**
+     * Adds an ordered object to a service's contribution. Each object has an id (which must be unique). Optionally,
+     * pre-requisites (a list of ids that must precede this object) and post-requisites (ids that must follow) can be
+     * provided.
+     *
+     * If no constraints are supplied, then an implicit constraint is supplied: after the previously
+     * contributed id <em>within the same contribution method</em>.
+     *
+     * @param id          a unique id for the object; the id will be fully qualified with the contributing module's id
+     * @param constraints used to order the object relative to other contributed objects
+     * @param object      to add to the service's configuration
+     */
+    void add(String id, T object, String... constraints);
+
+    /**
+     * Overrides a normally contributed object. Each override must match a single normally contributed object.
+     *
+     * @param id          identifies object to override
+     * @param object      overriding object (may be null)
+     * @param constraints constraints for the overridden object, replacing constraints for the original object (even if
+     *                    omitted, in which case the override object will have no ordering constraints)
+     * @since 5.1.0.0
+     */
+    void override(String id, T object, String... constraints);
+
+    /**
+     * Adds an ordered object by instantiating (with dependencies) the indicated class. When the configuration type is
+     * an interface and the class to be contributed is a local file,
+     * then a reloadable proxy for the class will be created and contributed.
+     *
+     * @param id          of contribution (used for ordering)
+     * @param clazz       class to instantiate
+     * @param constraints used to order the object relative to other contributed objects
+     * @since 5.1.0.0
+     */
+    void addInstance(String id, Class<? extends T> clazz, String... constraints);
+
+    /**
+     * Instantiates an object and adds it as an override. When the configuration type is an interface and the class to
+     * be contributed is a local file, then a reloadable proxy for the class will be created and contributed.
+     *
+     * @param id          of object to override
+     * @param clazz       to instantiate
+     * @param constraints constraints for the overridden object, replacing constraints for the original object (even if
+     *                    omitted, in which case the override object will have no ordering constraints)
+     * @since 5.1.0.0
+     */
+    void overrideInstance(String id, Class<? extends T> clazz, String... constraints);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/Resource.java b/commons/src/main/java/org/apache/tapestry5/commons/Resource.java
new file mode 100644
index 0000000..a71f120
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/Resource.java
@@ -0,0 +1,108 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Locale;
+
+/**
+ * Represents a resource on the server that may be used for server side processing, or may be exposed to the client
+ * side. Generally, this represents an abstraction on top of files on the class path and files stored in the web
+ * application context.
+ *
+ * Resources are often used as map keys; they should be immutable and should implement hashCode() and equals().
+ */
+public interface Resource
+{
+
+    /**
+     * Returns true if the resource exists; if a stream to the content of the file may be opened. A resource exists
+     * if {@link #toURL()} returns a non-null value. Starting in release 5.3.4, the result of this is cached.
+     *
+     * Starting in 5.4, some "virtual resources", may return true even though {@link #toURL()} returns null.
+     *
+     * @return true if the resource exists, false if it does not
+     */
+    boolean exists();
+
+
+    /**
+     * Returns true if the resource is virtual, meaning this is no underlying file. Many operations are unsupported
+     * on virtual resources, including {@link #toURL()}, {@link #forLocale(java.util.Locale)},
+     * {@link #withExtension(String)}, {@link #getFile()}, {@link #getFolder()}, {@link #getPath()}}; these
+     * operations will throw an {@link java.lang.UnsupportedOperationException}.
+     *
+     * @since 5.4
+     */
+    boolean isVirtual();
+
+    /**
+     * Opens a stream to the content of the resource, or returns null if the resource does not exist. The native
+     * input stream supplied by the resource is wrapped in a {@link java.io.BufferedInputStream}.
+     *
+     * @return an open, buffered stream to the content, if available
+     */
+    InputStream openStream() throws IOException;
+
+    /**
+     * Returns the URL for the resource, or null if it does not exist. This value is lazily computed; starting in 5.3.4, subclasses may cache
+     * the result.  Starting in 5.4, some "virtual resources" may return null.
+     */
+    URL toURL();
+
+    /**
+     * Returns a localized version of the resource. May return null if no such resource exists. Starting in release
+     * 5.3.4, the result of this method is cached internally.
+     */
+    Resource forLocale(Locale locale);
+
+    /**
+     * Returns a Resource based on a relative path, relative to the folder containing the resource. Understands the "."
+     * (current folder) and ".." (parent folder) conventions, and treats multiple sequential slashes as a single slash.
+     *
+     * Virtual resources (resources fabricated at runtime) return themselves.
+     */
+    Resource forFile(String relativePath);
+
+    /**
+     * Returns a new Resource with the extension changed (or, if the resource does not have an extension, the extension
+     * is added). The new Resource may not exist (that is, {@link #toURL()} may return null.
+     *
+     * @param extension
+     *         to apply to the resource, such as "html" or "properties"
+     * @return the new resource
+     */
+    Resource withExtension(String extension);
+
+    /**
+     * Returns the portion of the path up to the last forward slash; this is the directory or folder portion of the
+     * Resource.
+     */
+    String getFolder();
+
+    /**
+     * Returns the file portion of the Resource path, everything that follows the final forward slash.
+     *
+     * Starting in 5.4, certain kinds of "virtual resources" may return null here.
+     */
+    String getFile();
+
+    /**
+     * Return the path (the combination of folder and file).
+     *
+     * Starting in 5.4, certain "virtual resources", may return an arbitrary value here.
+     */
+    String getPath();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/BasicDataTypeAnalyzers.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/BasicDataTypeAnalyzers.java
new file mode 100644
index 0000000..c552f80
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/BasicDataTypeAnalyzers.java
@@ -0,0 +1,138 @@
+// Copyright 2014 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.commons.internal;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tapestry5.beaneditor.DataTypeConstants;
+import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.commons.internal.services.AnnotationDataTypeAnalyzer;
+import org.apache.tapestry5.commons.internal.services.DefaultDataTypeAnalyzer;
+import org.apache.tapestry5.commons.services.DataTypeAnalyzer;
+import org.apache.tapestry5.commons.services.PropertyAdapter;
+
+/**
+ * Class that provides Tapestry's basic default data type analyzers.
+ */
+public class BasicDataTypeAnalyzers
+{
+    
+    public static void contributeDataTypeAnalyzer(
+            OrderedConfiguration<DataTypeAnalyzer> configuration,
+            DataTypeAnalyzer defaultDataTypeAnalyzer) {
+        configuration.add("Annotation", new AnnotationDataTypeAnalyzer());
+        if (defaultDataTypeAnalyzer == null)
+        {
+            defaultDataTypeAnalyzer = createDefaultDataTypeAnalyzer();
+        }
+        configuration.add("Default", defaultDataTypeAnalyzer, "after:*");
+    }
+
+    public static DataTypeAnalyzer createDefaultDataTypeAnalyzer() 
+    {
+        DefaultDataTypeAnalyzerMappedConfiguration mappedConfiguration = new DefaultDataTypeAnalyzerMappedConfiguration();
+        provideDefaultDataTypeAnalyzers(mappedConfiguration);
+        return new CombinedDataTypeAnalyzer(new AnnotationDataTypeAnalyzer(), new DefaultDataTypeAnalyzer(mappedConfiguration.getMap()));
+    }
+    
+    /**
+     * Maps property types to data type names:
+     * <ul>
+     * <li>String --&gt; text
+     * <li>Number --&gt; number
+     * <li>Enum --&gt; enum
+     * <li>Boolean --&gt; boolean
+     * <li>Date --&gt; date
+     * </ul>
+     */
+    public static void provideDefaultDataTypeAnalyzers(MappedConfiguration<Class, String> configuration)
+    {
+        // This is a special case contributed to avoid exceptions when a
+        // property type can't be
+        // matched. DefaultDataTypeAnalyzer converts the empty string to null.
+
+        configuration.add(Object.class, "");
+
+        configuration.add(String.class, DataTypeConstants.TEXT);
+        configuration.add(Number.class, DataTypeConstants.NUMBER);
+        configuration.add(Enum.class, DataTypeConstants.ENUM);
+        configuration.add(Boolean.class, DataTypeConstants.BOOLEAN);
+        configuration.add(Date.class, DataTypeConstants.DATE);
+        configuration.add(Calendar.class, DataTypeConstants.CALENDAR);
+    }
+
+    final private static class DefaultDataTypeAnalyzerMappedConfiguration implements MappedConfiguration<Class, String> 
+    {
+        
+        final Map<Class, String> map = new HashMap<Class, String>();
+
+        @Override
+        public void add(Class key, String value) {
+            map.put(key, value);
+        }
+
+        @Override
+        public void override(Class key, String value) {
+            throw new RuntimeException("Not implemented");
+        }
+
+        @Override
+        public void addInstance(Class key, Class<? extends String> clazz) {
+            throw new RuntimeException("Not implemented");            
+        }
+
+        @Override
+        public void overrideInstance(Class key, Class<? extends String> clazz) {
+            throw new RuntimeException("Not implemented");
+        }
+
+        public Map<Class, String> getMap() {
+            return map;
+        }
+        
+    }
+    
+    final private static class CombinedDataTypeAnalyzer implements DataTypeAnalyzer 
+    {
+
+        final private DataTypeAnalyzer[] analyzers;
+
+        public CombinedDataTypeAnalyzer(DataTypeAnalyzer... analyzers) 
+        {
+        	this.analyzers = analyzers;
+        }
+
+        @Override
+        public String identifyDataType(PropertyAdapter adapter) 
+        {
+        	String type = null;
+        	for (DataTypeAnalyzer analyzer : analyzers) 
+        	{
+				type = analyzer.identifyDataType(adapter);
+				if (type != null)
+				{
+					break;
+				}
+			}
+        	return type;
+        }
+
+    }
+
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/BasicTypeCoercions.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/BasicTypeCoercions.java
new file mode 100644
index 0000000..12e756c
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/BasicTypeCoercions.java
@@ -0,0 +1,342 @@
+// Copyright 2014 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.commons.internal;
+
+import java.io.File;
+import java.lang.reflect.Array;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.tapestry5.commons.Configuration;
+import org.apache.tapestry5.commons.services.Coercion;
+import org.apache.tapestry5.commons.services.CoercionTuple;
+import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.commons.util.TimeInterval;
+import org.apache.tapestry5.func.Flow;
+
+/**
+ * Class that provides Tapestry-IoC's basic type coercions.
+ * @see TypeCoercer
+ * @see Coercion
+ */
+public class BasicTypeCoercions
+{
+    /**
+     * Provides the basic type coercions to a {@link Configuration} instance. 
+     */
+    public static void provideBasicTypeCoercions(Configuration<CoercionTuple> configuration)
+    {
+        add(configuration, Object.class, String.class, new Coercion<Object, String>()
+        {
+            @Override
+            public String coerce(Object input)
+            {
+                return input.toString();
+            }
+        });
+
+        add(configuration, Object.class, Boolean.class, new Coercion<Object, Boolean>()
+        {
+            @Override
+            public Boolean coerce(Object input)
+            {
+                return input != null;
+            }
+        });
+
+        add(configuration, String.class, Double.class, new Coercion<String, Double>()
+        {
+            @Override
+            public Double coerce(String input)
+            {
+                return Double.valueOf(input);
+            }
+        });
+
+        // String to BigDecimal is important, as String->Double->BigDecimal would lose
+        // precision.
+
+        add(configuration, String.class, BigDecimal.class, new Coercion<String, BigDecimal>()
+        {
+            @Override
+            public BigDecimal coerce(String input)
+            {
+                return new BigDecimal(input);
+            }
+        });
+
+        add(configuration, BigDecimal.class, Double.class, new Coercion<BigDecimal, Double>()
+        {
+            @Override
+            public Double coerce(BigDecimal input)
+            {
+                return input.doubleValue();
+            }
+        });
+
+        add(configuration, String.class, BigInteger.class, new Coercion<String, BigInteger>()
+        {
+            @Override
+            public BigInteger coerce(String input)
+            {
+                return new BigInteger(input);
+            }
+        });
+
+        add(configuration, String.class, Long.class, new Coercion<String, Long>()
+        {
+            @Override
+            public Long coerce(String input)
+            {
+                return Long.valueOf(input);
+            }
+        });
+
+        add(configuration, Long.class, Byte.class, new Coercion<Long, Byte>()
+        {
+            @Override
+            public Byte coerce(Long input)
+            {
+                return input.byteValue();
+            }
+        });
+
+        add(configuration, Long.class, Short.class, new Coercion<Long, Short>()
+        {
+            @Override
+            public Short coerce(Long input)
+            {
+                return input.shortValue();
+            }
+        });
+
+        add(configuration, Long.class, Integer.class, new Coercion<Long, Integer>()
+        {
+            @Override
+            public Integer coerce(Long input)
+            {
+                return input.intValue();
+            }
+        });
+
+        add(configuration, Number.class, Long.class, new Coercion<Number, Long>()
+        {
+            @Override
+            public Long coerce(Number input)
+            {
+                return input.longValue();
+            }
+        });
+
+        add(configuration, Double.class, Float.class, new Coercion<Double, Float>()
+        {
+            @Override
+            public Float coerce(Double input)
+            {
+                return input.floatValue();
+            }
+        });
+
+        add(configuration, Long.class, Double.class, new Coercion<Long, Double>()
+        {
+            @Override
+            public Double coerce(Long input)
+            {
+                return input.doubleValue();
+            }
+        });
+
+        add(configuration, String.class, Boolean.class, new Coercion<String, Boolean>()
+        {
+            @Override
+            public Boolean coerce(String input)
+            {
+                String trimmed = input == null ? "" : input.trim();
+
+                if (trimmed.equalsIgnoreCase("false") || trimmed.length() == 0)
+                    return false;
+
+                // Any non-blank string but "false"
+
+                return true;
+            }
+        });
+
+        add(configuration, Number.class, Boolean.class, new Coercion<Number, Boolean>()
+        {
+            @Override
+            public Boolean coerce(Number input)
+            {
+                return input.longValue() != 0;
+            }
+        });
+
+        add(configuration, Void.class, Boolean.class, new Coercion<Void, Boolean>()
+        {
+            @Override
+            public Boolean coerce(Void input)
+            {
+                return false;
+            }
+        });
+
+        add(configuration, Collection.class, Boolean.class, new Coercion<Collection, Boolean>()
+        {
+            @Override
+            public Boolean coerce(Collection input)
+            {
+                return !input.isEmpty();
+            }
+        });
+
+        add(configuration, Object.class, List.class, new Coercion<Object, List>()
+        {
+            @Override
+            public List coerce(Object input)
+            {
+                return Collections.singletonList(input);
+            }
+        });
+
+        add(configuration, Object[].class, List.class, new Coercion<Object[], List>()
+        {
+            @Override
+            public List coerce(Object[] input)
+            {
+                return Arrays.asList(input);
+            }
+        });
+
+        add(configuration, Object[].class, Boolean.class, new Coercion<Object[], Boolean>()
+        {
+            @Override
+            public Boolean coerce(Object[] input)
+            {
+                return input != null && input.length > 0;
+            }
+        });
+
+        add(configuration, Float.class, Double.class, new Coercion<Float, Double>()
+        {
+            @Override
+            public Double coerce(Float input)
+            {
+                return input.doubleValue();
+            }
+        });
+
+        Coercion primitiveArrayCoercion = new Coercion<Object, List>()
+        {
+            @Override
+            public List<Object> coerce(Object input)
+            {
+                int length = Array.getLength(input);
+                Object[] array = new Object[length];
+                for (int i = 0; i < length; i++)
+                {
+                    array[i] = Array.get(input, i);
+                }
+                return Arrays.asList(array);
+            }
+        };
+
+        add(configuration, byte[].class, List.class, primitiveArrayCoercion);
+        add(configuration, short[].class, List.class, primitiveArrayCoercion);
+        add(configuration, int[].class, List.class, primitiveArrayCoercion);
+        add(configuration, long[].class, List.class, primitiveArrayCoercion);
+        add(configuration, float[].class, List.class, primitiveArrayCoercion);
+        add(configuration, double[].class, List.class, primitiveArrayCoercion);
+        add(configuration, char[].class, List.class, primitiveArrayCoercion);
+        add(configuration, boolean[].class, List.class, primitiveArrayCoercion);
+
+        add(configuration, String.class, File.class, new Coercion<String, File>()
+        {
+            @Override
+            public File coerce(String input)
+            {
+                return new File(input);
+            }
+        });
+
+        add(configuration, String.class, TimeInterval.class, new Coercion<String, TimeInterval>()
+        {
+            @Override
+            public TimeInterval coerce(String input)
+            {
+                return new TimeInterval(input);
+            }
+        });
+
+        add(configuration, TimeInterval.class, Long.class, new Coercion<TimeInterval, Long>()
+        {
+            @Override
+            public Long coerce(TimeInterval input)
+            {
+                return input.milliseconds();
+            }
+        });
+
+        add(configuration, Object.class, Object[].class, new Coercion<Object, Object[]>()
+        {
+            @Override
+            public Object[] coerce(Object input)
+            {
+                return new Object[]
+                        {input};
+            }
+        });
+
+        add(configuration, Collection.class, Object[].class, new Coercion<Collection, Object[]>()
+        {
+            @Override
+            public Object[] coerce(Collection input)
+            {
+                return input.toArray();
+            }
+        });
+        
+        configuration.add(CoercionTuple.create(Flow.class, List.class, new Coercion<Flow, List>()
+        {
+            @Override
+            public List coerce(Flow input)
+            {
+                return input.toList();
+            }
+        }));
+
+        configuration.add(CoercionTuple.create(Flow.class, Boolean.class, new Coercion<Flow, Boolean>()
+        {
+            @Override
+            public Boolean coerce(Flow input)
+            {
+                return !input.isEmpty();
+            }
+        }));
+        
+
+    }
+
+    private static <S, T> void add(Configuration<CoercionTuple> configuration, Class<S> sourceType,
+                                   Class<T> targetType, Coercion<S, T> coercion)
+    {
+        configuration.add(CoercionTuple.create(sourceType, targetType, coercion));
+    }
+    
+    
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/NullAnnotationProvider.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/NullAnnotationProvider.java
new file mode 100644
index 0000000..ea955ca
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/NullAnnotationProvider.java
@@ -0,0 +1,35 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal;
+
+import java.lang.annotation.Annotation;
+
+import org.apache.tapestry5.commons.AnnotationProvider;
+
+/**
+ * A null implementation of {@link AnnotationProvider}, used when there is not appropriate source of annotations.
+ */
+public class NullAnnotationProvider implements AnnotationProvider
+{
+    /**
+     * Always returns null.
+     */
+    @Override
+    public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+    {
+        return null;
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AccessableObjectAnnotationProvider.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AccessableObjectAnnotationProvider.java
new file mode 100644
index 0000000..7269dd3
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AccessableObjectAnnotationProvider.java
@@ -0,0 +1,46 @@
+// Copyright 2008 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AccessibleObject;
+
+import org.apache.tapestry5.commons.AnnotationProvider;
+
+/**
+ * Provides access to annotations of an accessable object such as a {@link java.lang.reflect.Method} or {@link
+ * java.lang.reflect.Field}.
+ */
+public class AccessableObjectAnnotationProvider implements AnnotationProvider
+{
+    private final AccessibleObject object;
+
+    public AccessableObjectAnnotationProvider(AccessibleObject object)
+    {
+        this.object = object;
+    }
+
+    @Override
+    public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+    {
+        return object.getAnnotation(annotationClass);
+    }
+
+    @Override
+    public String toString()
+    {
+        return String.format("AnnotationProvider[%s]", object);
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AnnotationDataTypeAnalyzer.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AnnotationDataTypeAnalyzer.java
new file mode 100644
index 0000000..17e270a
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AnnotationDataTypeAnalyzer.java
@@ -0,0 +1,32 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import org.apache.tapestry5.beaneditor.DataType;
+import org.apache.tapestry5.commons.services.DataTypeAnalyzer;
+import org.apache.tapestry5.commons.services.PropertyAdapter;
+
+/**
+ * Checks for the {@link DataType} annotation, returning its value if present.
+ */
+public class AnnotationDataTypeAnalyzer implements DataTypeAnalyzer
+{
+    public String identifyDataType(PropertyAdapter adapter)
+    {
+        DataType annotation = adapter.getAnnotation(DataType.class);
+
+        return annotation == null ? null : annotation.value();
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AnnotationProviderChain.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AnnotationProviderChain.java
new file mode 100644
index 0000000..7b4b07f
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/AnnotationProviderChain.java
@@ -0,0 +1,59 @@
+// Copyright 2008 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import org.apache.tapestry5.commons.AnnotationProvider;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+/**
+ * Chain of command for {@link org.apache.tapestry5.commons.AnnotationProvider}.
+ */
+public class AnnotationProviderChain implements AnnotationProvider
+{
+    private final AnnotationProvider[] providers;
+
+    public AnnotationProviderChain(AnnotationProvider[] providers)
+    {
+        this.providers = providers;
+    }
+
+    /**
+     * Creates an AnnotationProvider from the list of providers.  Returns either an {@link AnnotationProviderChain} or
+     * the sole element in the list.
+     */
+    public static AnnotationProvider create(List<AnnotationProvider> providers)
+    {
+        int size = providers.size();
+
+        if (size == 1) return providers.get(0);
+
+        return new AnnotationProviderChain(providers.toArray(new AnnotationProvider[providers.size()]));
+    }
+
+    @Override
+    public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+    {
+        for (AnnotationProvider p : providers)
+        {
+            T result = p.getAnnotation(annotationClass);
+
+            if (result != null) return result;
+        }
+
+        return null;
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/CompoundCoercion.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/CompoundCoercion.java
new file mode 100644
index 0000000..a188438
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/CompoundCoercion.java
@@ -0,0 +1,54 @@
+// Copyright 2006, 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import org.apache.tapestry5.commons.services.Coercion;
+
+/**
+ * Combines two coercions to create a coercion through an intermediate type.
+ *
+ * @param <S> The source (input) type
+ * @param <I> The intermediate type
+ * @param <T> The target (output) type
+ */
+public class CompoundCoercion<S, I, T> implements Coercion<S, T>
+{
+    private final Coercion<S, I> op1;
+
+    private final Coercion<I, T> op2;
+
+    public CompoundCoercion(Coercion<S, I> op1, Coercion<I, T> op2)
+    {
+        this.op1 = op1;
+        this.op2 = op2;
+    }
+
+    @Override
+    public T coerce(S input)
+    {
+        // Run the input through the first operation (S --> I), then run the result of that through
+        // the second operation (I --> T).
+
+        I intermediate = op1.coerce(input);
+
+        return op2.coerce(intermediate);
+    }
+
+    @Override
+    public String toString()
+    {
+        return String.format("%s, %s", op1, op2);
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/DefaultDataTypeAnalyzer.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/DefaultDataTypeAnalyzer.java
new file mode 100644
index 0000000..515d70d
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/DefaultDataTypeAnalyzer.java
@@ -0,0 +1,60 @@
+// Copyright 2007, 2008, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import java.util.Map;
+
+import org.apache.tapestry5.commons.services.DataTypeAnalyzer;
+import org.apache.tapestry5.commons.services.PropertyAdapter;
+import org.apache.tapestry5.commons.util.StrategyRegistry;
+
+/**
+ * The default data type analyzer, which is based entirely on the type of the property (and not on annotations or naming
+ * conventions). This is based on a configuration of property type class to string provided as an IoC service
+ * configuration.
+ */
+public class DefaultDataTypeAnalyzer implements DataTypeAnalyzer, Runnable
+{
+    private final StrategyRegistry<String> registry;
+
+    public DefaultDataTypeAnalyzer(Map<Class, String> configuration)
+    {
+        registry = StrategyRegistry.newInstance(String.class, configuration);
+    }
+
+    /**
+     * Clears the registry on an invalidation event (this is because the registry caches results, and the keys are
+     * classes that may be component classes from the invalidated component class loader).
+     */
+    public void run()
+    {
+        registry.clearCache();
+    }
+
+    public String identifyDataType(PropertyAdapter adapter)
+    {
+        Class propertyType = adapter.getType();
+
+        String dataType = registry.get(propertyType);
+
+        // To avoid "no strategy" exceptions, we expect a contribution of Object.class to the empty
+        // string. We convert that back to a null.
+
+        if (dataType.equals(""))
+            return null;
+
+        return dataType;
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/GenericsResolverImpl.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/GenericsResolverImpl.java
new file mode 100644
index 0000000..aa2c780
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/GenericsResolverImpl.java
@@ -0,0 +1,627 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.GenericDeclaration;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
+import java.util.LinkedList;
+
+import org.apache.tapestry5.commons.services.GenericsResolver;
+
+/**
+ * Implementation copied from Tapestry 5.4's GenericUtils (commons package).
+ */
+@SuppressWarnings("rawtypes")
+public class GenericsResolverImpl implements GenericsResolver
+{
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost. If you want
+     * to preserve the type parameters of the return type consider using
+     * {@link #extractActualType(java.lang.reflect.Type, java.lang.reflect.Method)}.
+     *
+     * @param containingClass class which either contains or inherited the method
+     * @param method          method from which to extract the return type
+     * @return the class represented by the methods generic return type, resolved based on the context .
+     * @see #extractActualType(java.lang.reflect.Type, java.lang.reflect.Method)
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     * @see #asClass(java.lang.reflect.Type)
+     */
+    public Class<?> extractGenericReturnType(Class<?> containingClass, Method method)
+    {
+        return asClass(resolve(method.getGenericReturnType(), containingClass));
+    }
+
+
+    /**
+     * Analyzes the field in the context of containingClass and returns the Class that is represented by
+     * the field's generic type. Any parameter information in the generic type is lost, if you want
+     * to preserve the type parameters of the return type consider using
+     * {@link #getTypeVariableIndex(java.lang.reflect.TypeVariable)}.
+     *
+     * @param containingClass class which either contains or inherited the field
+     * @param field           field from which to extract the type
+     * @return the class represented by the field's generic type, resolved based on the containingClass.
+     * @see #extractActualType(java.lang.reflect.Type, java.lang.reflect.Field)
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     * @see #asClass(java.lang.reflect.Type)
+     */
+    public Class extractGenericFieldType(Class containingClass, Field field)
+    {
+        return asClass(resolve(field.getGenericType(), containingClass));
+    }
+
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost.
+     *
+     * @param containingType Type which is/represents the class that either contains or inherited the method
+     * @param method         method from which to extract the generic return type
+     * @return the generic type represented by the methods generic return type, resolved based on the containingType.
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     */
+    public Type extractActualType(Type containingType, Method method)
+    {
+        return resolve(method.getGenericReturnType(), containingType);
+    }
+
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost.
+     *
+     * @param containingType Type which is/represents the class that either contains or inherited the field
+     * @param field          field from which to extract the generic return type
+     * @return the generic type represented by the methods generic return type, resolved based on the containingType.
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     */
+    public Type extractActualType(Type containingType, Field field)
+    {
+        return resolve(field.getGenericType(), containingType);
+    }
+
+    /**
+     * Resolves the type parameter based on the context of the containingType.
+     *
+     * {@link java.lang.reflect.TypeVariable} will be unwrapped to the type argument resolved form the class
+     * hierarchy. This may be something other than a simple Class if the type argument is a ParameterizedType for
+     * instance (e.g. {@code List<E>; List<Map<Long, String>>}, E would be returned as a ParameterizedType with the raw
+     * type Map and type arguments Long and String.
+     *
+     *
+     * @param type
+     *          the generic type (ParameterizedType, GenericArrayType, WildcardType, TypeVariable) to be resolved
+     * @param containingType
+     *          the type which his
+     * @return
+     *          the type resolved to the best of our ability.
+     * @since 5.2.?
+     */
+    public Type resolve(final Type type, final Type containingType)
+    {
+        // The type isn't generic. (String, Long, etc)
+        if (type instanceof Class)
+            return type;
+
+        // List<T>, List<String>, List<T extends Number>
+        if (type instanceof ParameterizedType)
+            return resolve((ParameterizedType) type, containingType);
+
+        // T[], List<String>[], List<T>[]
+        if (type instanceof GenericArrayType)
+            return resolve((GenericArrayType) type, containingType);
+
+        // List<? extends T>, List<? extends Object & Comparable & Serializable>
+        if (type instanceof WildcardType)
+            return resolve((WildcardType) type, containingType);
+
+        // T
+        if (type instanceof TypeVariable)
+            return resolve((TypeVariable) type, containingType);
+
+        // I'm leaning towards an exception here.
+        return type;
+    }
+
+
+    /**
+     * Determines if the suspected super type is assignable from the suspected sub type.
+     *
+     * @param suspectedSuperType
+     *          e.g. {@code GenericDAO<Pet, String>}
+     * @param suspectedSubType
+     *          e.g. {@code PetDAO extends GenericDAO<Pet,String>}
+     * @return
+     *          true if (sourceType)targetClass is a valid cast
+     */
+    @SuppressWarnings({ "unused", "unchecked" })
+    private boolean isAssignableFrom(Type suspectedSuperType, Type suspectedSubType)
+    {
+        final Class suspectedSuperClass = asClass(suspectedSuperType);
+        final Class suspectedSubClass = asClass(suspectedSubType);
+
+        // The raw types need to be compatible.
+        if (!suspectedSuperClass.isAssignableFrom(suspectedSubClass))
+        {
+            return false;
+        }
+
+        // From this point we know that the raw types are assignable.
+        // We need to figure out what the generic parameters in the targetClass are
+        // as they pertain to the sourceType.
+
+        if (suspectedSuperType instanceof WildcardType)
+        {
+            // ? extends Number
+            // needs to match all the bounds (there will only be upper bounds or lower bounds
+            for (Type t : ((WildcardType) suspectedSuperType).getUpperBounds())
+            {
+                if (!isAssignableFrom(t, suspectedSubType)) return false;
+            }
+            for (Type t : ((WildcardType) suspectedSuperType).getLowerBounds())
+            {
+                if (!isAssignableFrom(suspectedSubType, t)) return false;
+            }
+            return true;
+        }
+
+        Type curType = suspectedSubType;
+        Class curClass;
+
+        while (curType != null && !curType.equals(Object.class))
+        {
+            curClass = asClass(curType);
+
+            if (curClass.equals(suspectedSuperClass))
+            {
+                final Type resolved = resolve(curType, suspectedSubType);
+
+                if (suspectedSuperType instanceof Class)
+                {
+                    if ( resolved instanceof Class )
+                        return suspectedSuperType.equals(resolved);
+
+                    // They may represent the same class, but the suspectedSuperType is not parameterized. The parameter
+                    // types default to Object so they must be a match.
+                    // e.g. Pair p = new StringLongPair();
+                    //      Pair p = new Pair<? extends Number, String>
+
+                    return true;
+                }
+
+                if (suspectedSuperType instanceof ParameterizedType)
+                {
+                    if (resolved instanceof ParameterizedType)
+                    {
+                        final Type[] type1Arguments = ((ParameterizedType) suspectedSuperType).getActualTypeArguments();
+                        final Type[] type2Arguments = ((ParameterizedType) resolved).getActualTypeArguments();
+                        if (type1Arguments.length != type2Arguments.length) return false;
+
+                        for (int i = 0; i < type1Arguments.length; ++i)
+                        {
+                            if (!isAssignableFrom(type1Arguments[i], type2Arguments[i])) return false;
+                        }
+                        return true;
+                    }
+                }
+                else if (suspectedSuperType instanceof GenericArrayType)
+                {
+                    if (resolved instanceof GenericArrayType)
+                    {
+                        return isAssignableFrom(
+                                ((GenericArrayType) suspectedSuperType).getGenericComponentType(),
+                                ((GenericArrayType) resolved).getGenericComponentType()
+                        );
+                    }
+                }
+
+                return false;
+            }
+
+            final Type[] types = curClass.getGenericInterfaces();
+            for (Type t : types)
+            {
+                final Type resolved = resolve(t, suspectedSubType);
+                if (isAssignableFrom(suspectedSuperType, resolved))
+                    return true;
+            }
+
+            curType = curClass.getGenericSuperclass();
+        }
+        return false;
+    }
+
+    /**
+     * Get the class represented by the reflected type.
+     * This method is lossy; You cannot recover the type information from the class that is returned.
+     *
+     * {@code TypeVariable} the first bound is returned. If your type variable extends multiple interfaces that information
+     * is lost.
+     *
+     * {@code WildcardType} the first lower bound is returned. If the wildcard is defined with upper bounds
+     * then {@code Object} is returned.
+     *
+     * @param actualType
+     *           a Class, ParameterizedType, GenericArrayType
+     * @return the un-parameterized class associated with the type.
+     */
+    public Class asClass(Type actualType)
+    {
+        if (actualType instanceof Class) return (Class) actualType;
+
+        if (actualType instanceof ParameterizedType)
+        {
+            final Type rawType = ((ParameterizedType) actualType).getRawType();
+            // The sun implementation returns getRawType as Class<?>, but there is room in the interface for it to be
+            // some other Type. We'll assume it's a Class.
+            // TODO: consider logging or throwing our own exception for that day when "something else" causes some confusion
+            return (Class) rawType;
+        }
+
+        if (actualType instanceof GenericArrayType)
+        {
+            final Type type = ((GenericArrayType) actualType).getGenericComponentType();
+            return Array.newInstance(asClass(type), 0).getClass();
+        }
+
+        if (actualType instanceof TypeVariable)
+        {
+            // Support for List<T extends Number>
+            // There is always at least one bound. If no bound is specified in the source then it will be Object.class
+            return asClass(((TypeVariable) actualType).getBounds()[0]);
+        }
+
+        if (actualType instanceof WildcardType)
+        {
+            final WildcardType wildcardType = (WildcardType) actualType;
+            final Type[] bounds = wildcardType.getLowerBounds();
+            if (bounds != null && bounds.length > 0)
+            {
+                return asClass(bounds[0]);
+            }
+            // If there is no lower bounds then the only thing that makes sense is Object.
+            return Object.class;
+        }
+
+        throw new RuntimeException(String.format("Unable to convert %s to Class.", actualType));
+    }
+
+    /**
+     * Convert the type into a string. The string representation approximates the code that would be used to define the
+     * type.
+     *
+     * @param type - the type.
+     * @return a string representation of the type, similar to how it was declared.
+     */
+    public static String toString(Type type)
+    {
+        if ( type instanceof ParameterizedType ) return toString((ParameterizedType)type);
+        if ( type instanceof WildcardType ) return toString((WildcardType)type);
+        if ( type instanceof GenericArrayType) return toString((GenericArrayType)type);
+        if ( type instanceof Class )
+        {
+            final Class theClass = (Class) type;
+            return (theClass.isArray() ? theClass.getName() + "[]" : theClass.getName());
+        }
+        return type.toString();
+    }
+
+    /**
+     * Method to resolve a TypeVariable to its most
+     * <a href="http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#112582">reifiable</a> form.
+     *
+     *
+     * How to resolve a TypeVariable:<br/>
+     * All of the TypeVariables defined by a generic class will be given a Type by any class that extends it. The Type
+     * given may or may not be reifiable; it may be another TypeVariable for instance.
+     *
+     * Consider <br/>
+     * <i>class Pair&gt;A,B> { A getA(){...}; ...}</i><br/>
+     * <i>class StringLongPair extends Pair&gt;String, Long> { }</i><br/>
+     *
+     * To resolve the actual return type of Pair.getA() you must first resolve the TypeVariable "A".
+     * We can do that by first finding the index of "A" in the Pair.class.getTypeParameters() array of TypeVariables.
+     *
+     * To get to the Type provided by StringLongPair you access the generics information by calling
+     * StringLongPair.class.getGenericSuperclass; this will be a ParameterizedType. ParameterizedType gives you access
+     * to the actual type arguments provided to Pair by StringLongPair. The array is in the same order as the array in
+     * Pair.class.getTypeParameters so you can use the index we discovered earlier to extract the Type; String.class.
+     *
+     * When extracting Types we only have to consider the superclass hierarchy and not the interfaces implemented by
+     * the class. When a class implements a generic interface it must provide types for the interface and any generic
+     * methods implemented from the interface will be re-defined by the class with its generic type variables.
+     *
+     * @param typeVariable   - the type variable to resolve.
+     * @param containingType - the shallowest class in the class hierarchy (furthest from Object) where typeVariable is defined.
+     * @return a Type that has had all possible TypeVariables resolved that have been defined between the type variable
+     *         declaration and the containingType.
+     */
+    private Type resolve(TypeVariable typeVariable, Type containingType)
+    {
+        // The generic declaration is either a Class, Method or Constructor
+        final GenericDeclaration genericDeclaration = typeVariable.getGenericDeclaration();
+
+        if (!(genericDeclaration instanceof Class))
+        {
+            // It's a method or constructor. The best we can do here is try to resolve the bounds
+            // e.g. <T extends E> T getT(T param){} where E is defined by the class.
+            final Type bounds0 = typeVariable.getBounds()[0];
+            return resolve(bounds0, containingType);
+        }
+
+        final Class typeVariableOwner = (Class) genericDeclaration;
+
+        // find the typeOwner in the containingType's hierarchy
+        final LinkedList<Type> stack = new LinkedList<Type>();
+
+        // If you pass a List<Long> as the containingType then the TypeVariable is going to be resolved by the
+        // containingType and not the super class.
+        if (containingType instanceof ParameterizedType)
+        {
+            stack.add(containingType);
+        }
+
+        Class theClass = asClass(containingType);
+        Type genericSuperclass = theClass.getGenericSuperclass();
+        while (genericSuperclass != null && // true for interfaces with no superclass
+                !theClass.equals(Object.class) &&
+                !theClass.equals(typeVariableOwner))
+        {
+            stack.addFirst(genericSuperclass);
+            theClass = asClass(genericSuperclass);
+            genericSuperclass = theClass.getGenericSuperclass();
+        }
+
+        int i = getTypeVariableIndex(typeVariable);
+        Type resolved = typeVariable;
+        for (Type t : stack)
+        {
+            if (t instanceof ParameterizedType)
+            {
+                resolved = ((ParameterizedType) t).getActualTypeArguments()[i];
+                if (resolved instanceof Class) return resolved;
+                if (resolved instanceof TypeVariable)
+                {
+                    // Need to look at the next class in the hierarchy
+                    i = getTypeVariableIndex((TypeVariable) resolved);
+                    continue;
+                }
+                return resolve(resolved, containingType);
+            }
+        }
+
+        // the only way we get here is if resolved is still a TypeVariable, otherwise an
+        // exception is thrown or a value is returned.
+        return ((TypeVariable) resolved).getBounds()[0];
+    }
+
+    /**
+     * @param type           - something like List&lt;T>[] or List&lt;? extends T>[] or T[]
+     * @param containingType - the shallowest type in the hierarchy where type is defined.
+     * @return either the passed type if no changes required or a copy with a best effort resolve of the component type.
+     */
+    private GenericArrayType resolve(GenericArrayType type, Type containingType)
+    {
+        final Type componentType = type.getGenericComponentType();
+
+        if (!(componentType instanceof Class))
+        {
+            final Type resolved = resolve(componentType, containingType);
+            return create(resolved);
+        }
+
+        return type;
+    }
+
+    /**
+     * @param type           - something like List&lt;T>, List&lt;T extends Number>
+     * @param containingType - the shallowest type in the hierarchy where type is defined.
+     * @return the passed type if nothing to resolve or a copy of the type with the type arguments resolved.
+     */
+    private ParameterizedType resolve(ParameterizedType type, Type containingType)
+    {
+        // Use a copy because we're going to modify it.
+        final Type[] types = type.getActualTypeArguments().clone();
+
+        boolean modified = resolve(types, containingType);
+        return modified ? create(type.getRawType(), type.getOwnerType(), types) : type;
+    }
+
+    /**
+     * @param type           - something like List&lt;? super T>, List<&lt;? extends T>, List&lt;? extends T & Comparable&lt? super T>>
+     * @param containingType - the shallowest type in the hierarchy where type is defined.
+     * @return the passed type if nothing to resolve or a copy of the type with the upper and lower bounds resolved.
+     */
+    private WildcardType resolve(WildcardType type, Type containingType)
+    {
+        // Use a copy because we're going to modify them.
+        final Type[] upper = type.getUpperBounds().clone();
+        final Type[] lower = type.getLowerBounds().clone();
+
+        boolean modified = resolve(upper, containingType);
+        modified = modified || resolve(lower, containingType);
+
+        return modified ? create(upper, lower) : type;
+    }
+
+    /**
+     * @param types          - Array of types to resolve. The unresolved type is replaced in the array with the resolved type.
+     * @param containingType - the shallowest type in the hierarchy where type is defined.
+     * @return true if any of the types were resolved.
+     */
+    private boolean resolve(Type[] types, Type containingType)
+    {
+        boolean modified = false;
+        for (int i = 0; i < types.length; ++i)
+        {
+            Type t = types[i];
+            if (!(t instanceof Class))
+            {
+                modified = true;
+                final Type resolved = resolve(t, containingType);
+                if (!resolved.equals(t))
+                {
+                    types[i] = resolved;
+                    modified = true;
+                }
+            }
+        }
+        return modified;
+    }
+
+    /**
+     * @param rawType       - the un-parameterized type.
+     * @param ownerType     - the outer class or null if the class is not defined within another class.
+     * @param typeArguments - type arguments.
+     * @return a copy of the type with the typeArguments replaced.
+     */
+    static ParameterizedType create(final Type rawType, final Type ownerType, final Type[] typeArguments)
+    {
+        return new ParameterizedType()
+        {
+            @Override
+            public Type[] getActualTypeArguments()
+            {
+                return typeArguments;
+            }
+
+            @Override
+            public Type getRawType()
+            {
+                return rawType;
+            }
+
+            @Override
+            public Type getOwnerType()
+            {
+                return ownerType;
+            }
+
+            @Override
+            public String toString()
+            {
+                return GenericsResolverImpl.toString(this);
+            }
+        };
+    }
+
+    static GenericArrayType create(final Type componentType)
+    {
+        return new GenericArrayType()
+        {
+            @Override
+            public Type getGenericComponentType()
+            {
+                return componentType;
+            }
+
+            @Override
+            public String toString()
+            {
+                return GenericsResolverImpl.toString(this);
+            }
+        };
+    }
+
+    /**
+     * @param upperBounds - e.g. ? extends Number
+     * @param lowerBounds - e.g. ? super Long
+     * @return An new copy of the type with the upper and lower bounds replaced.
+     */
+    static WildcardType create(final Type[] upperBounds, final Type[] lowerBounds)
+    {
+
+        return new WildcardType()
+        {
+            @Override
+            public Type[] getUpperBounds()
+            {
+                return upperBounds;
+            }
+
+            @Override
+            public Type[] getLowerBounds()
+            {
+                return lowerBounds;
+            }
+
+            @Override
+            public String toString()
+            {
+                return GenericsResolverImpl.toString(this);
+            }
+        };
+    }
+
+    static String toString(ParameterizedType pt)
+    {
+        String s = toString(pt.getActualTypeArguments());
+        return String.format("%s<%s>", toString(pt.getRawType()), s);
+    }
+
+    static String toString(GenericArrayType gat)
+    {
+        return String.format("%s[]", toString(gat.getGenericComponentType()));
+    }
+
+    static String toString(WildcardType wt)
+    {
+        final boolean isSuper = wt.getLowerBounds().length > 0;
+        return String.format("? %s %s",
+                isSuper ? "super" : "extends",
+                toString(wt.getLowerBounds()));
+    }
+
+    static String toString(Type[] types)
+    {
+        StringBuilder sb = new StringBuilder();
+        for ( Type t : types )
+        {
+            sb.append(toString(t)).append(", ");
+        }
+        return sb.substring(0, sb.length() - 2);// drop last ,
+    }
+
+    /**
+     * Find the index of the TypeVariable in the classes parameters. The offset can be used on a subclass to find
+     * the actual type.
+     *
+     * @param typeVariable - the type variable in question.
+     * @return the index of the type variable in its declaring class/method/constructor's type parameters.
+     */
+    private static int getTypeVariableIndex(final TypeVariable typeVariable)
+    {
+        // the label from the class (the T in List<T>, the K or V in Map<K,V>, etc)
+        final String typeVarName = typeVariable.getName();
+        final TypeVariable[] typeParameters = typeVariable.getGenericDeclaration().getTypeParameters();
+        for (int typeArgumentIndex = 0; typeArgumentIndex < typeParameters.length; typeArgumentIndex++)
+        {
+            // The .equals for TypeVariable may not be compatible, a name check should be sufficient.
+            if (typeParameters[typeArgumentIndex].getName().equals(typeVarName))
+                return typeArgumentIndex;
+        }
+
+        // The only way this could happen is if the TypeVariable is hand built incorrectly, or it's corrupted.
+        throw new RuntimeException(
+                String.format("%s does not have a TypeVariable matching %s", typeVariable.getGenericDeclaration(), typeVariable));
+    }
+    
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/ServiceMessages.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/ServiceMessages.java
new file mode 100644
index 0000000..5c9445b
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/ServiceMessages.java
@@ -0,0 +1,68 @@
+// Copyright 2006, 2007, 2011, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.internal.util.MessagesImpl;
+import org.apache.tapestry5.commons.services.Coercion;
+import org.apache.tapestry5.plastic.PlasticUtils;
+
+public class ServiceMessages
+{
+    private final static Messages MESSAGES = MessagesImpl.forClass(ServiceMessages.class);
+
+    private ServiceMessages()
+    {
+    }
+
+    public static String noSuchProperty(Class clazz, String propertyName)
+    {
+        return MESSAGES.format("no-such-property", clazz.getName(), propertyName);
+    }
+
+
+    public static String readFailure(String propertyName, Object instance, Throwable cause)
+    {
+        return MESSAGES.format("read-failure", propertyName, instance, cause);
+    }
+
+    public static String propertyTypeMismatch(String propertyName, Class sourceClass, Class propertyType,
+                                              Class expectedType)
+    {
+        return MESSAGES.format("property-type-mismatch", propertyName, sourceClass.getName(), propertyType.getName(),
+                expectedType.getName());
+    }
+
+    public static String shutdownListenerError(Object listener, Throwable cause)
+    {
+        return MESSAGES.format("shutdown-listener-error", listener, cause);
+    }
+
+    public static String failedCoercion(Object input, Class targetType, Coercion coercion, Throwable cause)
+    {
+        return MESSAGES.format("failed-coercion", String.valueOf(input), PlasticUtils.toTypeName(targetType),
+                coercion, cause);
+    }
+
+    public static String registryShutdown(String serviceId)
+    {
+        return MESSAGES.format("registry-shutdown", serviceId);
+    }
+
+    public static String serviceBuildFailure(String serviceId, Throwable cause)
+    {
+        return MESSAGES.format("service-build-failure", serviceId, cause);
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringInterner.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringInterner.java
new file mode 100644
index 0000000..c592583
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringInterner.java
@@ -0,0 +1,43 @@
+// Copyright 2009 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+/**
+ * Creates "interned" strings that are unique for the same content. This is used for common description strings,
+ * particularly those used by {@link org.apache.tapestry5.Binding} instances.  The internal cache of interned strings id
+ * cleared whenever the {@link org.apache.tapestry5.ioc.annotations.ComponentClasses} 
+ * <a href="https://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/InvalidationEventHub.html">InvalidationEventHub</a> is invalidated (i.e., when component class files change).
+ *
+ * @since 5.1.0.0
+ */
+public interface StringInterner
+{
+    /**
+     * Interns a string.
+     *
+     * @param string the string to intern
+     * @return the input string, or another string instance with the same content
+     */
+    String intern(String string);
+
+    /**
+     * Formats a string (using {@link String#format(String, Object[])}) and returns the interned result.
+     *
+     * @param format    string format
+     * @param arguments used inside the format
+     * @return formatted and interned string
+     */
+    String format(String format, Object... arguments);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringInternerImpl.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringInternerImpl.java
new file mode 100644
index 0000000..b699fb3
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringInternerImpl.java
@@ -0,0 +1,53 @@
+// Copyright 2009, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import java.util.Map;
+
+import org.apache.tapestry5.commons.services.InvalidationEventHub;
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.ioc.annotations.ComponentClasses;
+import org.apache.tapestry5.ioc.annotations.PostInjection;
+
+public class StringInternerImpl implements StringInterner
+{
+    private final Map<String, String> cache = CollectionFactory.newConcurrentMap();
+
+    @PostInjection
+    public void setupInvalidation(@ComponentClasses InvalidationEventHub hub)
+    {
+        hub.clearOnInvalidation(cache);
+    }
+
+    public String intern(String string)
+    {
+        String result = cache.get(string);
+
+        // Not yet in the cache?  Add it.
+
+        if (result == null)
+        {
+            cache.put(string, string);
+            result = string;
+        }
+
+        return result;
+    }
+
+    public String format(String format, Object... arguments)
+    {
+        return intern(String.format(format, arguments));
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringLocation.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringLocation.java
new file mode 100644
index 0000000..d2d1d20
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/StringLocation.java
@@ -0,0 +1,65 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import org.apache.tapestry5.commons.Location;
+import org.apache.tapestry5.commons.Resource;
+
+/**
+ * Implementation of {@link Location} used when the underlying resource isn't really known.
+ */
+public final class StringLocation implements Location
+{
+    private final String description;
+
+    private final int line;
+
+    public StringLocation(String description, int line)
+    {
+        this.description = description;
+        this.line = line;
+    }
+
+    @Override
+    public String toString()
+    {
+        return description;
+    }
+
+    /**
+     * Returns 0.
+     */
+    @Override
+    public int getColumn()
+    {
+        return 0;
+    }
+
+    @Override
+    public int getLine()
+    {
+        return line;
+    }
+
+    /**
+     * Returns null; we don't know where the file really is (it's probably a class on the class path).
+     */
+    @Override
+    public Resource getResource()
+    {
+        return null;
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/services/TypeCoercerImpl.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/TypeCoercerImpl.java
new file mode 100644
index 0000000..e0d3f1d
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/services/TypeCoercerImpl.java
@@ -0,0 +1,517 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.services;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
+
+import org.apache.tapestry5.commons.internal.util.InheritanceSearch;
+import org.apache.tapestry5.commons.internal.util.InternalCommonsUtils;
+import org.apache.tapestry5.commons.internal.util.LockSupport;
+import org.apache.tapestry5.commons.services.Coercion;
+import org.apache.tapestry5.commons.services.CoercionTuple;
+import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.commons.util.AvailableValues;
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.commons.util.StringToEnumCoercion;
+import org.apache.tapestry5.commons.util.UnknownValueException;
+import org.apache.tapestry5.func.F;
+import org.apache.tapestry5.plastic.PlasticUtils;
+
+@SuppressWarnings("all")
+public class TypeCoercerImpl extends LockSupport implements TypeCoercer
+{
+    // Constructed from the service's configuration.
+
+    private final Map<Class, List<CoercionTuple>> sourceTypeToTuple = CollectionFactory.newMap();
+
+    /**
+     * A coercion to a specific target type. Manages a cache of coercions to specific types.
+     */
+    private class TargetCoercion
+    {
+        private final Class type;
+
+        private final Map<Class, Coercion> cache = CollectionFactory.newConcurrentMap();
+
+        TargetCoercion(Class type)
+        {
+            this.type = type;
+        }
+
+        void clearCache()
+        {
+            cache.clear();
+        }
+
+        Object coerce(Object input)
+        {
+            Class sourceType = input != null ? input.getClass() : Void.class;
+
+            if (type.isAssignableFrom(sourceType))
+            {
+                return input;
+            }
+
+            Coercion c = getCoercion(sourceType);
+
+            try
+            {
+                return type.cast(c.coerce(input));
+            } catch (Exception ex)
+            {
+                throw new RuntimeException(ServiceMessages.failedCoercion(input, type, c, ex), ex);
+            }
+        }
+
+        String explain(Class sourceType)
+        {
+            return getCoercion(sourceType).toString();
+        }
+
+        private Coercion getCoercion(Class sourceType)
+        {
+            Coercion c = cache.get(sourceType);
+
+            if (c == null)
+            {
+                c = findOrCreateCoercion(sourceType, type);
+                cache.put(sourceType, c);
+            }
+
+            return c;
+        }
+    }
+
+    /**
+     * Map from a target type to a TargetCoercion for that type.
+     */
+    private final Map<Class, TargetCoercion> typeToTargetCoercion = new WeakHashMap<Class, TargetCoercion>();
+
+    private static final Coercion NO_COERCION = new Coercion<Object, Object>()
+    {
+        @Override
+        public Object coerce(Object input)
+        {
+            return input;
+        }
+    };
+
+    private static final Coercion COERCION_NULL_TO_OBJECT = new Coercion<Void, Object>()
+    {
+        @Override
+        public Object coerce(Void input)
+        {
+            return null;
+        }
+
+        @Override
+        public String toString()
+        {
+            return "null --> null";
+        }
+    };
+
+    public TypeCoercerImpl(Collection<CoercionTuple> tuples)
+    {
+        for (CoercionTuple tuple : tuples)
+        {
+            Class key = tuple.getSourceType();
+
+            InternalCommonsUtils.addToMapList(sourceTypeToTuple, key, tuple);
+        }
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Object coerce(Object input, Class targetType)
+    {
+        assert targetType != null;
+
+        Class effectiveTargetType = PlasticUtils.toWrapperType(targetType);
+
+        if (effectiveTargetType.isInstance(input))
+        {
+            return input;
+        }
+
+
+        return getTargetCoercion(effectiveTargetType).coerce(input);
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public <S, T> Coercion<S, T> getCoercion(Class<S> sourceType, Class<T> targetType)
+    {
+        assert sourceType != null;
+        assert targetType != null;
+
+        Class effectiveSourceType = PlasticUtils.toWrapperType(sourceType);
+        Class effectiveTargetType = PlasticUtils.toWrapperType(targetType);
+
+        if (effectiveTargetType.isAssignableFrom(effectiveSourceType))
+        {
+            return NO_COERCION;
+        }
+
+        return getTargetCoercion(effectiveTargetType).getCoercion(effectiveSourceType);
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public <S, T> String explain(Class<S> sourceType, Class<T> targetType)
+    {
+        assert sourceType != null;
+        assert targetType != null;
+
+        Class effectiveTargetType = PlasticUtils.toWrapperType(targetType);
+        Class effectiveSourceType = PlasticUtils.toWrapperType(sourceType);
+
+        // Is a coercion even necessary? Not if the target type is assignable from the
+        // input value.
+
+        if (effectiveTargetType.isAssignableFrom(effectiveSourceType))
+        {
+            return "";
+        }
+
+        return getTargetCoercion(effectiveTargetType).explain(effectiveSourceType);
+    }
+
+    private TargetCoercion getTargetCoercion(Class targetType)
+    {
+        try
+        {
+            acquireReadLock();
+
+            TargetCoercion tc = typeToTargetCoercion.get(targetType);
+
+            return tc != null ? tc : createAndStoreNewTargetCoercion(targetType);
+        } finally
+        {
+            releaseReadLock();
+        }
+    }
+
+    private TargetCoercion createAndStoreNewTargetCoercion(Class targetType)
+    {
+        try
+        {
+            upgradeReadLockToWriteLock();
+
+            // Inner check since some other thread may have beat us to it.
+
+            TargetCoercion tc = typeToTargetCoercion.get(targetType);
+
+            if (tc == null)
+            {
+                tc = new TargetCoercion(targetType);
+                typeToTargetCoercion.put(targetType, tc);
+            }
+
+            return tc;
+        } finally
+        {
+            downgradeWriteLockToReadLock();
+        }
+    }
+
+    @Override
+    public void clearCache()
+    {
+        try
+        {
+            acquireReadLock();
+
+            // There's no need to clear the typeToTargetCoercion map, as it is a WeakHashMap and
+            // will release the keys for classes that are no longer in existence. On the other hand,
+            // there's likely all sorts of references to unloaded classes inside each TargetCoercion's
+            // individual cache, so clear all those.
+
+            for (TargetCoercion tc : typeToTargetCoercion.values())
+            {
+                // Can tc ever be null?
+
+                tc.clearCache();
+            }
+        } finally
+        {
+            releaseReadLock();
+        }
+    }
+
+    /**
+     * Here's the real meat; we do a search of the space to find coercions, or a system of
+     * coercions, that accomplish
+     * the desired coercion.
+     *
+     * There's <strong>TREMENDOUS</strong> room to improve this algorithm. For example, inheritance lists could be
+     * cached. Further, there's probably more ways to early prune the search. However, even with dozens or perhaps
+     * hundreds of tuples, I suspect the search will still grind to a conclusion quickly.
+     *
+     * The order of operations should help ensure that the most efficient tuple chain is located. If you think about how
+     * tuples are added to the queue, there are two factors: size (the number of steps in the coercion) and
+     * "class distance" (that is, number of steps up the inheritance hiearchy). All the appropriate 1 step coercions
+     * will be considered first, in class distance order. Along the way, we'll queue up all the 2 step coercions, again
+     * in class distance order. By the time we reach some of those, we'll have begun queueing up the 3 step coercions, and
+     * so forth, until we run out of input tuples we can use to fabricate multi-step compound coercions, or reach a
+     * final response.
+     *
+     * This does create a good number of short lived temporary objects (the compound tuples), but that's what the GC is
+     * really good at.
+     *
+     * @param sourceType
+     * @param targetType
+     * @return coercer from sourceType to targetType
+     */
+    @SuppressWarnings("unchecked")
+    private Coercion findOrCreateCoercion(Class sourceType, Class targetType)
+    {
+        if (sourceType == Void.class)
+        {
+            return searchForNullCoercion(targetType);
+        }
+
+        // These are instance variables because this method may be called concurrently.
+        // On a true race, we may go to the work of seeking out and/or fabricating
+        // a tuple twice, but it's more likely that different threads are looking
+        // for different source/target coercions.
+
+        Set<CoercionTuple> consideredTuples = CollectionFactory.newSet();
+        LinkedList<CoercionTuple> queue = CollectionFactory.newLinkedList();
+
+        seedQueue(sourceType, targetType, consideredTuples, queue);
+
+        while (!queue.isEmpty())
+        {
+            CoercionTuple tuple = queue.removeFirst();
+
+            // If the tuple results in a value type that is assignable to the desired target type,
+            // we're done! Later, we may add a concept of "cost" (i.e. number of steps) or
+            // "quality" (how close is the tuple target type to the desired target type). Cost
+            // is currently implicit, as compound tuples are stored deeper in the queue,
+            // so simpler coercions will be located earlier.
+
+            Class tupleTargetType = tuple.getTargetType();
+
+            if (targetType.isAssignableFrom(tupleTargetType))
+            {
+                return tuple.getCoercion();
+            }
+
+            // So .. this tuple doesn't get us directly to the target type.
+            // However, it *may* get us part of the way. Each of these
+            // represents a coercion from the source type to an intermediate type.
+            // Now we're going to look for conversions from the intermediate type
+            // to some other type.
+
+            queueIntermediates(sourceType, targetType, tuple, consideredTuples, queue);
+        }
+
+        // Not found anywhere. Identify the source and target type and a (sorted) list of
+        // all the known coercions.
+
+        throw new UnknownValueException(String.format("Could not find a coercion from type %s to type %s.",
+                sourceType.getName(), targetType.getName()), buildCoercionCatalog());
+    }
+
+    /**
+     * Coercion from null is special; we match based on the target type and its not a spanning
+     * search. In many cases, we
+     * return a pass-thru that leaves the value as null.
+     *
+     * @param targetType
+     *         desired type
+     * @return the coercion
+     */
+    private Coercion searchForNullCoercion(Class targetType)
+    {
+        List<CoercionTuple> tuples = getTuples(Void.class, targetType);
+
+        for (CoercionTuple tuple : tuples)
+        {
+            Class tupleTargetType = tuple.getTargetType();
+
+            if (targetType.equals(tupleTargetType))
+                return tuple.getCoercion();
+        }
+
+        // Typical case: no match, this coercion passes the null through
+        // as null.
+
+        return COERCION_NULL_TO_OBJECT;
+    }
+
+    /**
+     * Builds a string listing all the coercions configured for the type coercer, sorted
+     * alphabetically.
+     */
+    @SuppressWarnings("unchecked")
+    private AvailableValues buildCoercionCatalog()
+    {
+        List<CoercionTuple> masterList = CollectionFactory.newList();
+
+        for (List<CoercionTuple> list : sourceTypeToTuple.values())
+        {
+            masterList.addAll(list);
+        }
+
+        return new AvailableValues("Configured coercions", masterList);
+    }
+
+    /**
+     * Seeds the pool with the initial set of coercions for the given type.
+     */
+    private void seedQueue(Class sourceType, Class targetType, Set<CoercionTuple> consideredTuples,
+                           LinkedList<CoercionTuple> queue)
+    {
+        // Work from the source type up looking for tuples
+
+        for (Class c : new InheritanceSearch(sourceType))
+        {
+            List<CoercionTuple> tuples = getTuples(c, targetType);
+
+            if (tuples == null)
+            {
+                continue;
+            }
+
+            for (CoercionTuple tuple : tuples)
+            {
+                queue.addLast(tuple);
+                consideredTuples.add(tuple);
+            }
+
+            // Don't pull in Object -> type coercions when doing
+            // a search from null.
+
+            if (sourceType == Void.class)
+            {
+                return;
+            }
+        }
+    }
+
+    /**
+     * Creates and adds to the pool a new set of coercions based on an intermediate tuple. Adds
+     * compound coercion tuples
+     * to the end of the queue.
+     *
+     * @param sourceType
+     *         the source type of the coercion
+     * @param targetType
+     *         TODO
+     * @param intermediateTuple
+     *         a tuple that converts from the source type to some intermediate type (that is not
+     *         assignable to the target type)
+     * @param consideredTuples
+     *         set of tuples that have already been added to the pool (directly, or as a compound
+     *         coercion)
+     * @param queue
+     *         the work queue of tuples
+     */
+    @SuppressWarnings("unchecked")
+    private void queueIntermediates(Class sourceType, Class targetType, CoercionTuple intermediateTuple,
+                                    Set<CoercionTuple> consideredTuples, LinkedList<CoercionTuple> queue)
+    {
+        Class intermediateType = intermediateTuple.getTargetType();
+
+        for (Class c : new InheritanceSearch(intermediateType))
+        {
+            for (CoercionTuple tuple : getTuples(c, targetType))
+            {
+                if (consideredTuples.contains(tuple))
+                {
+                    continue;
+                }
+
+                Class newIntermediateType = tuple.getTargetType();
+
+                // If this tuple is for coercing from an intermediate type back towards our
+                // initial source type, then ignore it. This should only be an optimization,
+                // as branches that loop back towards the source type will
+                // eventually be considered and discarded.
+
+                if (sourceType.isAssignableFrom(newIntermediateType))
+                {
+                    continue;
+                }
+
+                // The intermediateTuple coercer gets from S --> I1 (an intermediate type).
+                // The current tuple's coercer gets us from I2 --> X. where I2 is assignable
+                // from I1 (i.e., I2 is a superclass/superinterface of I1) and X is a new
+                // intermediate type, hopefully closer to our eventual target type.
+
+                Coercion compoundCoercer = new CompoundCoercion(intermediateTuple.getCoercion(), tuple.getCoercion());
+
+                CoercionTuple compoundTuple = new CoercionTuple(sourceType, newIntermediateType, compoundCoercer, false);
+
+                // So, every tuple that is added to the queue can take as input the sourceType.
+                // The target type may be another intermediate type, or may be something
+                // assignable to the target type, which will bring the search to a successful
+                // conclusion.
+
+                queue.addLast(compoundTuple);
+                consideredTuples.add(tuple);
+            }
+        }
+    }
+
+    /**
+     * Returns a non-null list of the tuples from the source type.
+     *
+     * @param sourceType
+     *         used to locate tuples
+     * @param targetType
+     *         used to add synthetic tuples
+     * @return non-null list of tuples
+     */
+    private List<CoercionTuple> getTuples(Class sourceType, Class targetType)
+    {
+        List<CoercionTuple> tuples = sourceTypeToTuple.get(sourceType);
+
+        if (tuples == null)
+        {
+            tuples = Collections.emptyList();
+        }
+
+        // So, when we see String and an Enum type, we add an additional synthetic tuple to the end
+        // of the real list. This is the easiest way to accomplish this is a thread-safe and class-reloading
+        // safe way (i.e., what if the Enum is defined by a class loader that gets discarded?  Don't want to cause
+        // memory leaks by retaining an instance). In any case, there are edge cases where we may create
+        // the tuple unnecessarily (such as when an explicit string-to-enum coercion is part of the TypeCoercer
+        // configuration), but on the whole, this is cheap and works.
+
+        if (sourceType == String.class && Enum.class.isAssignableFrom(targetType))
+        {
+            tuples = extend(tuples, new CoercionTuple(sourceType, targetType, new StringToEnumCoercion(targetType)));
+        }
+        else if (Enum.class.isAssignableFrom(sourceType) && targetType == String.class)
+        {
+            // TAP5-2565
+            tuples = extend(tuples, new CoercionTuple(sourceType, targetType, (value)->((Enum) value).name()));
+        }
+
+        return tuples;
+    }
+
+    private static <T> List<T> extend(List<T> list, T extraValue)
+    {
+        return F.flow(list).append(extraValue).toList();
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/util/GenericsUtils.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/GenericsUtils.java
new file mode 100644
index 0000000..aa8e9ae
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/GenericsUtils.java
@@ -0,0 +1,134 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.util;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+
+import org.apache.tapestry5.commons.services.GenericsResolver;
+
+/**
+ * Static methods related to the use of JDK 1.5 generics. From Tapestry 5.5.0,
+ * this class just delegates to {@link GenericsResolver}.
+ */
+public class GenericsUtils
+{
+    final private static GenericsResolver GENERICS_RESOLVER = GenericsResolver.Provider.getInstance();
+    
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost. If you want
+     * to preserve the type parameters of the return type consider using
+     * {@link #extractActualType(java.lang.reflect.Type, java.lang.reflect.Method)}.
+     *
+     * @param containingClass class which either contains or inherited the method
+     * @param method          method from which to extract the return type
+     * @return the class represented by the methods generic return type, resolved based on the context .
+     * @see #extractActualType(java.lang.reflect.Type, java.lang.reflect.Method)
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     * @see #asClass(java.lang.reflect.Type)
+     */
+    public static Class<?> extractGenericReturnType(Class<?> containingClass, Method method)
+    {
+        return GENERICS_RESOLVER.extractGenericReturnType(containingClass, method);
+    }
+
+    /**
+     * Analyzes the field in the context of containingClass and returns the Class that is represented by
+     * the field's generic type. Any parameter information in the generic type is lost, if you want
+     * to preserve the type parameters of the return type consider using
+     * #getTypeVariableIndex(java.lang.reflect.TypeVariable).
+     *
+     * @param containingClass class which either contains or inherited the field
+     * @param field           field from which to extract the type
+     * @return the class represented by the field's generic type, resolved based on the containingClass.
+     * @see #extractActualType(java.lang.reflect.Type, java.lang.reflect.Field)
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     * @see #asClass(java.lang.reflect.Type)
+     */
+    public static Class extractGenericFieldType(Class containingClass, Field field)
+    {
+        return GENERICS_RESOLVER.extractGenericFieldType(containingClass, field);
+    }
+
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost.
+     *
+     * @param containingType Type which is/represents the class that either contains or inherited the method
+     * @param method         method from which to extract the generic return type
+     * @return the generic type represented by the methods generic return type, resolved based on the containingType.
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     */
+    public static Type extractActualType(Type containingType, Method method)
+    {
+        return GENERICS_RESOLVER.extractActualType(containingType, method);
+    }
+
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost.
+     *
+     * @param containingType Type which is/represents the class that either contains or inherited the field
+     * @param field          field from which to extract the generic return type
+     * @return the generic type represented by the methods generic return type, resolved based on the containingType.
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     */
+    public static Type extractActualType(Type containingType, Field field)
+    {
+        return GENERICS_RESOLVER.extractActualType(containingType, field);
+    }
+
+    /**
+     * Resolves the type parameter based on the context of the containingType.
+     *
+     * {@link java.lang.reflect.TypeVariable} will be unwrapped to the type argument resolved form the class
+     * hierarchy. This may be something other than a simple Class if the type argument is a ParameterizedType for
+     * instance (e.g. {@code List<E>; List<Map<Long, String>>}, E would be returned as a ParameterizedType with the raw
+     * type Map and type arguments Long and String.
+     *
+     *
+     * @param type
+     *          the generic type (ParameterizedType, GenericArrayType, WildcardType, TypeVariable) to be resolved
+     * @param containingType
+     *          the type which his
+     * @return
+     *          the type resolved to the best of our ability.
+     * @since 5.2.?
+     */
+    public static Type resolve(final Type type, final Type containingType)
+    {
+        return GENERICS_RESOLVER.resolve(type, containingType);
+    }
+    
+    /**
+     * Get the class represented by the reflected type.
+     * This method is lossy; You cannot recover the type information from the class that is returned.
+     *
+     * {@code TypeVariable} the first bound is returned. If your type variable extends multiple interfaces that information
+     * is lost.
+     *
+     * {@code WildcardType} the first lower bound is returned. If the wildcard is defined with upper bounds
+     * then {@code Object} is returned.
+     *
+     * @param actualType
+     *           a Class, ParameterizedType, GenericArrayType
+     * @return the un-parameterized class associated with the type.
+     */
+    public static Class asClass(Type actualType)
+    {
+        return GENERICS_RESOLVER.asClass(actualType);
+    }
+    
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/util/InheritanceSearch.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/InheritanceSearch.java
new file mode 100644
index 0000000..74cca9d
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/InheritanceSearch.java
@@ -0,0 +1,158 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.util;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Set;
+
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.plastic.PlasticUtils;
+
+/**
+ * Used to search from a particular class up the inheritance hierarchy of extended classes and implemented interfaces.
+ *
+ * The search starts with the initial class (provided in the constructor). It progresses up the inheritance chain, but
+ * skips java.lang.Object.
+ *
+ * Once classes are exhausted, the inheritance hierarchy is searched. This is a breadth-first search, rooted in the
+ * interfaces implemented by the initial class at its super classes.
+ *
+ * Once all interfaces are exhausted, java.lang.Object is returned (it is always returned last).
+ *
+ * Two minor tweak to normal inheritance rules: <ul> <li> Normally, the parent class of an <em>object</em> array is
+ * java.lang.Object, which is odd because FooService[] is assignable to Object[]. Thus, we tweak the search so that the
+ * effective super class of FooService[] is Object[]. <li> The "super class" of a primtive type is its <em>wrapper type</em>,
+ * with the exception of void, whose "super class" is left at its normal value (Object.class) </ul>
+ *
+ * This class implements the {@link Iterable} interface, so it can be used directly in a for loop: <code> for (Class
+ * search : new InheritanceSearch(startClass)) { ... } </code>
+ *
+ * This class is not thread-safe.
+ */
+public class InheritanceSearch implements Iterator<Class>, Iterable<Class>
+{
+    private Class searchClass;
+
+    private final Set<Class> addedInterfaces = CollectionFactory.newSet();
+
+    private final LinkedList<Class> interfaceQueue = CollectionFactory.newLinkedList();
+
+    private enum State
+    {
+        CLASS, INTERFACE, DONE
+    }
+
+    private State state;
+
+    public InheritanceSearch(Class searchClass)
+    {
+        this.searchClass = searchClass;
+
+        queueInterfaces(searchClass);
+
+        state = searchClass == Object.class ? State.INTERFACE : State.CLASS;
+    }
+
+    private void queueInterfaces(Class searchClass)
+    {
+        for (Class intf : searchClass.getInterfaces())
+        {
+            if (addedInterfaces.contains(intf)) continue;
+
+            interfaceQueue.addLast(intf);
+            addedInterfaces.add(intf);
+        }
+    }
+
+    @Override
+    public Iterator<Class> iterator()
+    {
+        return this;
+    }
+
+    @Override
+    public boolean hasNext()
+    {
+        return state != State.DONE;
+    }
+
+    @Override
+    public Class next()
+    {
+        switch (state)
+        {
+            case CLASS:
+
+                Class result = searchClass;
+
+                searchClass = parentOf(searchClass);
+
+                if (searchClass == null) state = State.INTERFACE;
+                else queueInterfaces(searchClass);
+
+                return result;
+
+            case INTERFACE:
+
+                if (interfaceQueue.isEmpty())
+                {
+                    state = State.DONE;
+                    return Object.class;
+                }
+
+                Class intf = interfaceQueue.removeFirst();
+
+                queueInterfaces(intf);
+
+                return intf;
+
+            default:
+                throw new IllegalStateException();
+        }
+
+    }
+
+    /**
+     * Returns the parent of the given class. Tweaks inheritance for object arrays. Returns null instead of
+     * Object.class.
+     */
+    private Class parentOf(Class clazz)
+    {
+        if (clazz != void.class && clazz.isPrimitive()) return PlasticUtils.toWrapperType(clazz);
+
+        if (clazz.isArray() && clazz != Object[].class)
+        {
+            Class componentType = clazz.getComponentType();
+
+            while (componentType.isArray()) componentType = componentType.getComponentType();
+
+            if (!componentType.isPrimitive()) return Object[].class;
+        }
+
+        Class parent = clazz.getSuperclass();
+
+        return parent != Object.class ? parent : null;
+    }
+
+    /**
+     * @throws UnsupportedOperationException
+     *         always
+     */
+    @Override
+    public void remove()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/util/InternalCommonsUtils.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/InternalCommonsUtils.java
new file mode 100644
index 0000000..07eb1e7
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/InternalCommonsUtils.java
@@ -0,0 +1,381 @@
+// Copyright 2006-2014 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.commons.internal.util;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.tapestry5.commons.AnnotationProvider;
+import org.apache.tapestry5.commons.Locatable;
+import org.apache.tapestry5.commons.Location;
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.internal.NullAnnotationProvider;
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.commons.util.CommonsUtils;
+
+/**
+ * Utility methods class for the Commons package.
+ */
+public class InternalCommonsUtils {
+
+    /**
+     * @since 5.3
+     */
+    public final static AnnotationProvider NULL_ANNOTATION_PROVIDER = new NullAnnotationProvider();
+    private static final Pattern NON_WORD_PATTERN = Pattern.compile("[^\\w]");
+
+    /**
+     * Adds a value to a specially organized map where the values are lists of objects. This somewhat simulates a map
+     * that allows multiple values for the same key.
+     *
+     * @param map
+     *         to store value into
+     * @param key
+     *         for which a value is added
+     * @param value
+     *         to add
+     * @param <K>
+     *         the type of key
+     * @param <V>
+     *         the type of the list
+     */
+    public static <K, V> void addToMapList(Map<K, List<V>> map, K key, V value)
+    {
+        List<V> list = map.get(key);
+
+        if (list == null)
+        {
+            list = CollectionFactory.newList();
+            map.put(key, list);
+        }
+
+        list.add(value);
+    }
+
+    /**
+     * Sniffs the object to see if it is a {@link Location} or {@link Locatable}. Returns null if null or not
+     * convertable to a location.
+     */
+    
+    public static Location locationOf(Object location)
+    {
+        if (location == null)
+            return null;
+    
+        if (location instanceof Location)
+            return (Location) location;
+    
+        if (location instanceof Locatable)
+            return ((Locatable) location).getLocation();
+    
+        return null;
+    }
+
+    public static AnnotationProvider toAnnotationProvider(final Method element)
+    {
+        if (element == null)
+            return NULL_ANNOTATION_PROVIDER;
+    
+        return new AnnotationProvider()
+        {
+            @Override
+            public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+            {
+                return element.getAnnotation(annotationClass);
+            }
+        };
+    }
+
+    /**
+     * Used to convert a property expression into a key that can be used to locate various resources (Blocks, messages,
+     * etc.). Strips out any punctuation characters, leaving just words characters (letters, number and the
+     * underscore).
+     *
+     * @param expression a property expression
+     * @return the expression with punctuation removed
+     */
+    public static String extractIdFromPropertyExpression(String expression)
+    {
+        return replace(expression, NON_WORD_PATTERN, "");
+    }
+
+    public static String replace(String input, Pattern pattern, String replacement)
+    {
+        return pattern.matcher(input).replaceAll(replacement);
+    }
+
+    /**
+     * Looks for a label within the messages based on the id. If found, it is used, otherwise the name is converted to a
+     * user presentable form.
+     */
+    public static String defaultLabel(String id, Messages messages, String propertyExpression)
+    {
+        String key = id + "-label";
+    
+        if (messages.contains(key))
+            return messages.get(key);
+    
+        return toUserPresentable(extractIdFromPropertyExpression(InternalCommonsUtils.lastTerm(propertyExpression)));
+    }
+
+    /**
+     * Capitalizes the string, and inserts a space before each upper case character (or sequence of upper case
+     * characters). Thus "userId" becomes "User Id", etc. Also, converts underscore into space (and capitalizes the
+     * following word), thus "user_id" also becomes "User Id".
+     */
+    public static String toUserPresentable(String id)
+    {
+        StringBuilder builder = new StringBuilder(id.length() * 2);
+    
+        char[] chars = id.toCharArray();
+        boolean postSpace = true;
+        boolean upcaseNext = true;
+    
+        for (char ch : chars)
+        {
+            if (upcaseNext)
+            {
+                builder.append(Character.toUpperCase(ch));
+                upcaseNext = false;
+    
+                continue;
+            }
+    
+            if (ch == '_')
+            {
+                builder.append(' ');
+                upcaseNext = true;
+                continue;
+            }
+    
+            boolean upperCase = Character.isUpperCase(ch);
+    
+            if (upperCase && !postSpace)
+                builder.append(' ');
+    
+            builder.append(ch);
+    
+            postSpace = upperCase;
+        }
+    
+        return builder.toString();
+    }
+
+    /**
+     * @since 5.3
+     */
+    public static AnnotationProvider toAnnotationProvider(final Class element)
+    {
+        return new AnnotationProvider()
+        {
+            @Override
+            public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+            {
+                return annotationClass.cast(element.getAnnotation(annotationClass));
+            }
+        };
+    }
+
+    /**
+     * Pattern used to eliminate leading and trailing underscores and dollar signs.
+     */
+    static final Pattern NAME_PATTERN = Pattern.compile("^[_|$]*([\\p{javaJavaIdentifierPart}]+?)[_|$]*$",
+            Pattern.CASE_INSENSITIVE);
+
+    /**
+     * Converts a method to a user presentable string consisting of the containing class name, the method name, and the
+     * short form of the parameter list (the class name of each parameter type, shorn of the package name portion).
+     *
+     * @param method
+     * @return short string representation
+     */
+    public static String asString(Method method)
+    {
+        StringBuilder buffer = new StringBuilder();
+    
+        buffer.append(method.getDeclaringClass().getName());
+        buffer.append('.');
+        buffer.append(method.getName());
+        buffer.append('(');
+    
+        for (int i = 0; i < method.getParameterTypes().length; i++)
+        {
+            if (i > 0)
+                buffer.append(", ");
+    
+            String name = method.getParameterTypes()[i].getSimpleName();
+    
+            buffer.append(name);
+        }
+    
+        return buffer.append(')').toString();
+    }
+
+    /**
+     * Strips leading "_" and "$" and trailing "_" from the name.
+     */
+    public static String stripMemberName(String memberName)
+    {
+        assert InternalCommonsUtils.isNonBlank(memberName);
+        Matcher matcher = NAME_PATTERN.matcher(memberName);
+    
+        if (!matcher.matches())
+            throw new IllegalArgumentException(String.format("Input '%s' is not a valid Java identifier.", memberName));
+    
+        return matcher.group(1);
+    }
+
+    /**
+     * Joins together some number of elements to form a comma separated list.
+     */
+    public static String join(List elements)
+    {
+        return InternalCommonsUtils.join(elements, ", ");
+    }
+
+    /**
+     * Joins together some number of elements. If a value in the list is the empty string, it is replaced with the
+     * string "(blank)".
+     *
+     * @param elements
+     *         objects to be joined together
+     * @param separator
+     *         used between elements when joining
+     */
+    public static String join(List elements, String separator)
+    {
+        switch (elements.size())
+        {
+            case 0:
+                return "";
+    
+            case 1:
+                return String.valueOf(elements.get(0));
+    
+            default:
+    
+                StringBuilder buffer = new StringBuilder();
+                boolean first = true;
+    
+                for (Object o : elements)
+                {
+                    if (!first)
+                        buffer.append(separator);
+    
+                    String string = String.valueOf(o);
+    
+                    if (string.equals(""))
+                        string = "(blank)";
+    
+                    buffer.append(string);
+    
+                    first = false;
+                }
+    
+                return buffer.toString();
+        }
+    }
+
+    /**
+     * Creates a sorted copy of the provided elements, then turns that into a comma separated list.
+     *
+     * @return the elements converted to strings, sorted, joined with comma ... or "(none)" if the elements are null or
+     *         empty
+     */
+    public static String joinSorted(Collection elements)
+    {
+        if (elements == null || elements.isEmpty())
+            return "(none)";
+    
+        List<String> list = CollectionFactory.newList();
+    
+        for (Object o : elements)
+            list.add(String.valueOf(o));
+    
+        Collections.sort(list);
+    
+        return join(list);
+    }
+
+    /**
+     * Capitalizes a string, converting the first character to uppercase.
+     */
+    public static String capitalize(String input)
+    {
+        if (input.length() == 0)
+            return input;
+    
+        return input.substring(0, 1).toUpperCase() + input.substring(1);
+    }
+
+    public static boolean isNonBlank(String input)
+    {
+        return !CommonsUtils.isBlank(input);
+    }
+
+    /**
+     * Return true if the input string contains the marker for symbols that must be expanded.
+     */
+    public static boolean containsSymbols(String input)
+    {
+        return input.contains("${");
+    }
+
+    /**
+     * Searches the string for the final period ('.') character and returns everything after that. The input string is
+     * generally a fully qualified class name, though tapestry-core also uses this method for the occasional property
+     * expression (which is also dot separated). Returns the input string unchanged if it does not contain a period
+     * character.
+     */
+    public static String lastTerm(String input)
+    {
+        assert isNonBlank(input);
+        int dotx = input.lastIndexOf('.');
+    
+        if (dotx < 0)
+            return input;
+    
+        return input.substring(dotx + 1);
+    }
+
+    /**
+     * Extracts the string keys from a map and returns them in sorted order. The keys are converted to strings.
+     *
+     * @param map
+     *         the map to extract keys from (may be null)
+     * @return the sorted keys, or the empty set if map is null
+     */
+    
+    public static List<String> sortedKeys(Map map)
+    {
+        if (map == null)
+            return Collections.emptyList();
+    
+        List<String> keys = CollectionFactory.newList();
+    
+        for (Object o : map.keySet())
+            keys.add(String.valueOf(o));
+    
+        Collections.sort(keys);
+    
+        return keys;
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/util/LockSupport.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/LockSupport.java
new file mode 100644
index 0000000..ca6c35a
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/LockSupport.java
@@ -0,0 +1,89 @@
+// Copyright 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.util;
+
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Base class for classes that need to manage a ReadWriteLock.
+ */
+public abstract class LockSupport
+{
+    private final Lock readLock, writeLock;
+
+    protected LockSupport()
+    {
+        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+
+        readLock = lock.readLock();
+        writeLock = lock.writeLock();
+    }
+
+    /**
+     * Locks the shared read lock. Any number of threads may lock the read lock at the same time.
+     */
+    protected final void acquireReadLock()
+    {
+        readLock.lock();
+    }
+
+    /**
+     * Takes the exclusive write lock. Once started, no other thread lock the read or write lock. When this method returns,
+     * this thread will have locked the write lock and no other thread will have either the read or write lock.
+     * Note that this thread must first drop the read lock (if it has it) before attempting to take the write lock, or this method will block forever.
+     */
+    protected final void takeWriteLock()
+    {
+        writeLock.lock();
+    }
+
+    /**
+     * Releases the shared read lock.
+     */
+    protected final void releaseReadLock()
+    {
+        readLock.unlock();
+    }
+
+    /**
+     * Releases the  exclusive read lock.
+     */
+    protected final void releaseWriteLock()
+    {
+        writeLock.unlock();
+    }
+
+    /**
+     * Releases the read lock, then takes the write lock. There's a short window where the thread will have neither lock:
+     * during that window, some other thread may have a chance to take the write lock. In code, you'll often see a second check
+     * inside the code that has the write lock to see if the update to perform is still necessary.
+     */
+    protected final void upgradeReadLockToWriteLock()
+    {
+        releaseReadLock();
+        // This is that instant where another thread may grab the write lock. Very rare, but possible.
+        takeWriteLock();
+    }
+
+    /**
+     * Takes the read lock then releases the write lock.
+     */
+    protected final void downgradeWriteLockToReadLock()
+    {
+        acquireReadLock();
+        releaseWriteLock();
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/util/MessageFormatterImpl.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/MessageFormatterImpl.java
new file mode 100644
index 0000000..46acb97
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/MessageFormatterImpl.java
@@ -0,0 +1,65 @@
+// Copyright 2006-2013 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.util;
+
+import java.util.Locale;
+
+import org.apache.tapestry5.commons.MessageFormatter;
+import org.apache.tapestry5.commons.util.ExceptionUtils;
+
+
+public class MessageFormatterImpl implements MessageFormatter
+{
+    private final String format;
+
+    private final Locale locale;
+
+    public MessageFormatterImpl(String format, Locale locale)
+    {
+        this.format = format;
+        this.locale = locale;
+    }
+
+    @Override
+    public String format(Object... args)
+    {
+        for (int i = 0; i < args.length; i++)
+        {
+            Object arg = args[i];
+
+            if (Throwable.class.isInstance(arg))
+            {
+                args[i] = ExceptionUtils.toMessage((Throwable) arg);
+            }
+        }
+
+        // Might be tempting to create a Formatter object and just keep reusing it ... but
+        // Formatters are not threadsafe.
+
+        return String.format(locale, format, args);
+    }
+
+    /**
+     * Returns the underlying format string for this formatter.
+     *
+     * @since 5.4
+     */
+    @Override
+    public String toString()
+    {
+        return format;
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/util/MessagesImpl.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/MessagesImpl.java
new file mode 100644
index 0000000..0c7c231
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/MessagesImpl.java
@@ -0,0 +1,79 @@
+// Copyright 2006, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.util;
+
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.util.AbstractMessages;
+import org.apache.tapestry5.commons.util.CollectionFactory;
+
+/**
+ * Implementation of {@link org.apache.tapestry5.commons.Messages} based around a {@link java.util.ResourceBundle}.
+ */
+public class MessagesImpl extends AbstractMessages
+{
+    private final Map<String, String> properties = CollectionFactory.newCaseInsensitiveMap();
+
+    /**
+     * Finds the messages for a given Messages utility class. Strings the trailing "Messages" and replaces it with
+     * "Strings" to form the base path. Loads the bundle using the default locale, and the class' class loader.
+     *
+     * @param forClass
+     * @return Messages for the class
+     */
+    public static Messages forClass(Class forClass)
+    {
+        String className = forClass.getName();
+        String stringsClassName = className.replaceAll("Messages$", "Strings");
+
+        Locale locale = Locale.getDefault();
+
+        ResourceBundle bundle = ResourceBundle.getBundle(stringsClassName, locale, forClass.getClassLoader());
+
+        return new MessagesImpl(locale, bundle);
+    }
+
+    public MessagesImpl(Locale locale, ResourceBundle bundle)
+    {
+        super(locale);
+
+        // Our best (threadsafe) chance to determine all the available keys.
+        Enumeration<String> e = bundle.getKeys();
+        while (e.hasMoreElements())
+        {
+            String key = e.nextElement();
+            String value = bundle.getString(key);
+
+            properties.put(key, value);
+        }
+    }
+
+    @Override
+    protected String valueForKey(String key)
+    {
+        return properties.get(key);
+    }
+
+    @Override
+    public Set<String> getKeys()
+    {
+        return properties.keySet();
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/internal/util/TapestryException.java b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/TapestryException.java
new file mode 100644
index 0000000..957dc40
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/internal/util/TapestryException.java
@@ -0,0 +1,75 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.internal.util;
+
+import org.apache.tapestry5.commons.Locatable;
+import org.apache.tapestry5.commons.Location;
+
+/**
+ * Exception class used as a replacement for {@link java.lang.RuntimeException} when the exception is related to a
+ * particular location.
+ */
+public class TapestryException extends RuntimeException implements Locatable
+{
+    private static final long serialVersionUID = 6396903640977182682L;
+
+    private transient final Location location;
+
+    /**
+     * @param message  a message (may be null)
+     * @param location implements {@link Location} or {@link Locatable}
+     * @param cause    if not null, the root cause of the exception
+     */
+    public TapestryException(String message, Object location, Throwable cause)
+    {
+        this(message, InternalCommonsUtils.locationOf(location), cause);
+    }
+
+    /**
+     * @param message a message (may be null)
+     * @param cause   if not null, the root cause of the exception, also used to set the location
+     */
+    public TapestryException(String message, Throwable cause)
+    {
+        this(message, cause, cause);
+    }
+
+    /**
+     * @param message  a message (may be null)
+     * @param location location to associated with the exception, or null if not known
+     * @param cause    if not null, the root cause of the exception
+     */
+    public TapestryException(String message, Location location, Throwable cause)
+    {
+        super(message, cause);
+
+        this.location = location;
+    }
+
+    @Override
+    public Location getLocation()
+    {
+        return location;
+    }
+
+    @Override
+    public String toString()
+    {
+        if (location == null) return super.toString();
+
+        return String.format("%s [at %s]", super.toString(), location);
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/ClassPropertyAdapter.java b/commons/src/main/java/org/apache/tapestry5/commons/services/ClassPropertyAdapter.java
new file mode 100644
index 0000000..1523819
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/ClassPropertyAdapter.java
@@ -0,0 +1,83 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+/**
+ * Organizes all {@link org.apache.tapestry5.commons.services.PropertyAdapter}s for a particular class.
+ *
+ * Only provides access to <em>simple</em> properties. Indexed properties are ignored.
+ *
+ * When accessing properties by name, the case of the name is ignored.
+ */
+public interface ClassPropertyAdapter
+{
+    /**
+     * Returns the names of all properties, sorted into alphabetic order. This includes true properties
+     * (as defined in the JavaBeans specification), but also public fields. Starting in Tapestry 5.3, even public static fields are included.
+     * @return the property names.
+     */
+    List<String> getPropertyNames();
+
+    /**
+     * Returns the type of bean this adapter provides properties for.
+     * @return the type of the bean.
+     */
+    @SuppressWarnings("rawtypes")
+    Class getBeanType();
+
+    /**
+     * Returns the property adapter with the given name, or null if no such adapter exists.
+     *
+     * @param name of the property (case is ignored)
+     * @return the PropertyAdapter instance associated with that property
+     */
+    PropertyAdapter getPropertyAdapter(String name);
+
+    /**
+     * Reads the value of a property.
+     *
+     * @param instance     the object to read a value from
+     * @param propertyName the name of the property to read (case is ignored)
+     * @throws UnsupportedOperationException if the property is write only
+     * @throws IllegalArgumentException      if property does not exist
+     * @return the value
+     */
+    Object get(Object instance, String propertyName);
+
+    /**
+     * Updates the value of a property.
+     *
+     * @param instance     the object to update
+     * @param propertyName the name of the property to update (case is ignored)
+     * @param value        the value to be set
+     * @throws UnsupportedOperationException if the property is read only
+     * @throws IllegalArgumentException      if property does not exist
+     */
+    void set(Object instance, String propertyName, Object value);
+
+    /**
+     * Returns the annotation of a given property for the specified type if such an annotation is present, else null.
+     *
+     * @param instance     the object to read a value from
+     * @param propertyName the name of the property to read (case is ignored)
+     * @param annotationClass the type of annotation to return
+     * @return the Annotation instance
+     * @throws IllegalArgumentException      if property does not exist
+     *
+     * @since 5.4
+     */
+    Annotation getAnnotation(Object instance, String propertyName, Class<? extends Annotation> annotationClass);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/Coercion.java b/commons/src/main/java/org/apache/tapestry5/commons/services/Coercion.java
new file mode 100644
index 0000000..414332b
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/Coercion.java
@@ -0,0 +1,31 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+/**
+ * Responsible for converting from one type to another. This is used primarily around component parameters.
+ *
+ * @param <S> the source type (input)
+ * @param <T> the target type (output)
+ */
+public interface Coercion<S, T>
+{
+    /**
+     * Converts an input value.
+     *
+     * @param input the input value
+     */
+    T coerce(S input);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/CoercionTuple.java b/commons/src/main/java/org/apache/tapestry5/commons/services/CoercionTuple.java
new file mode 100644
index 0000000..c315dfe
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/CoercionTuple.java
@@ -0,0 +1,145 @@
+// Copyright 2006, 2007, 2008, 2010, 2011, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import org.apache.tapestry5.plastic.PlasticUtils;
+
+/**
+ * An immutable object that represents a mapping from one type to another. This is also the contribution type when
+ * building the {@link org.apache.tapestry5.commons.services.TypeCoercer} service. Wraps a
+ * {@link org.apache.tapestry5.commons.services.Coercion} object that performs the work with additional properties that
+ * describe
+ * the input and output types of the coercion, needed when searching for an appropriate coercion (or sequence of
+ * coercions).
+ *
+ * @param <S>
+ *         source (input) type
+ * @param <T>
+ *         target (output) type
+ */
+public final class CoercionTuple<S, T>
+{
+    private final Class<S> sourceType;
+
+    private final Class<T> targetType;
+
+    private final Coercion<S, T> coercion;
+
+    /**
+     * Wraps an arbitrary coercion with an implementation of toString() that identifies the source and target types.
+     */
+    private class CoercionWrapper<WS, WT> implements Coercion<WS, WT>
+    {
+        private final Coercion<WS, WT> coercion;
+
+        public CoercionWrapper(Coercion<WS, WT> coercion)
+        {
+            this.coercion = coercion;
+        }
+
+        @Override
+        public WT coerce(WS input)
+        {
+            return coercion.coerce(input);
+        }
+
+        @Override
+        public String toString()
+        {
+            return String.format("%s --> %s", convert(sourceType), convert(targetType));
+        }
+    }
+
+    private String convert(Class type)
+    {
+        if (Void.class.equals(type))
+            return "null";
+
+        String name = PlasticUtils.toTypeName(type);
+
+        int dotx = name.lastIndexOf('.');
+
+        // Strip off a package name of "java.lang"
+
+        if (dotx > 0 && name.substring(0, dotx).equals("java.lang"))
+            return name.substring(dotx + 1);
+
+        return name;
+    }
+
+    /**
+     * Standard constructor, which defaults wrap to true.
+     */
+    public CoercionTuple(Class<S> sourceType, Class<T> targetType, Coercion<S, T> coercion)
+    {
+        this(sourceType, targetType, coercion, true);
+    }
+
+    /**
+     * Convenience constructor to help with generics.
+     *
+     * @since 5.2.0
+     */
+    public static <S, T> CoercionTuple<S, T> create(Class<S> sourceType, Class<T> targetType, Coercion<S, T> coercion)
+    {
+        return new CoercionTuple<S, T>(sourceType, targetType, coercion);
+    }
+
+    /**
+     * Internal-use constructor.
+     *
+     * @param sourceType
+     *         the source (or input) type of the coercion, may be Void.class to indicate a coercion from null
+     * @param targetType
+     *         the target (or output) type of the coercion
+     * @param coercion
+     *         the object that performs the coercion
+     * @param wrap
+     *         if true, the coercion is wrapped to provide a useful toString()
+     */
+    @SuppressWarnings("unchecked")
+    public CoercionTuple(Class<S> sourceType, Class<T> targetType, Coercion<S, T> coercion, boolean wrap)
+    {
+        assert sourceType != null;
+        assert targetType != null;
+        assert coercion != null;
+
+        this.sourceType = PlasticUtils.toWrapperType(sourceType);
+        this.targetType = PlasticUtils.toWrapperType(targetType);
+        this.coercion = wrap ? new CoercionWrapper<S, T>(coercion) : coercion;
+    }
+
+    @Override
+    public String toString()
+    {
+        return coercion.toString();
+    }
+
+    public Coercion<S, T> getCoercion()
+    {
+        return coercion;
+    }
+
+    public Class<S> getSourceType()
+    {
+        return sourceType;
+    }
+
+    public Class<T> getTargetType()
+    {
+        return targetType;
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/DataTypeAnalyzer.java b/commons/src/main/java/org/apache/tapestry5/commons/services/DataTypeAnalyzer.java
new file mode 100644
index 0000000..7ccb99f
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/DataTypeAnalyzer.java
@@ -0,0 +1,45 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+
+/**
+ * Used by {@link org.apache.tapestry5.beanmodel.services.BeanModelSource} to identify the type of data associated with a particular property (represented as a
+ * {@link PropertyAdapter}). The data type is a string used to determine what kind of interface to use for displaying
+ * the value of the property, or what kind of interface to use for editing the value of the property. Common property
+ * types are "text", "enum", "checkbox", but the list is extensible.
+ *
+ * Different strategies for identifying the data type are encapsulated in the DataTypeAnalyzer service, forming a
+ * chain of command.
+ *
+ * The DefaultDataTypeAnalyzer service maps property types to data type names.
+ *
+ * The DataTypeAnalyzer service is an extensible {@linkplain org.apache.tapestry5.ioc.services.ChainBuilder chain of
+ * command}), that (by default) includes {@link org.apache.tapestry5.commons.internal.services.AnnotationDataTypeAnalyzer} and
+ * the {@link org.apache.tapestry5.commons.internal.services.DefaultDataTypeAnalyzer} service (ordered last).   It uses an ordered configuration.
+ *
+ * @see org.apache.tapestry5.corelib.components.Grid
+ * @see org.apache.tapestry5.corelib.components.BeanEditForm
+ * @see org.apache.tapestry5.services.BeanBlockSource
+ */
+@UsesOrderedConfiguration(DataTypeAnalyzer.class)
+@UsesMappedConfiguration(key = Class.class, value = String.class)
+public interface DataTypeAnalyzer
+{
+    /**
+     * Identifies the data type, if known, or returns null if not known.
+     */
+    String identifyDataType(PropertyAdapter adapter);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/GenericsResolver.java b/commons/src/main/java/org/apache/tapestry5/commons/services/GenericsResolver.java
new file mode 100644
index 0000000..af4a627
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/GenericsResolver.java
@@ -0,0 +1,159 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.util.Iterator;
+import java.util.ServiceLoader;
+
+import org.apache.tapestry5.commons.internal.services.GenericsResolverImpl;
+
+/**
+ * <p>Methods related to the use of Java 5+ generics.
+ * Instances should be obtained through {@link GenericsResolver.Provider#getInstance()}.</p>
+ * 
+ * <p>
+ * If you have exceptions or bad results with classes using Generics, such as exceptions
+ * or missing BeanModel properties,
+ * you should try adding the <code>genericsresolver-guava</code> Tapestry subproject to our classpath.
+ * </p>
+ * 
+ * @since 5.5.0
+ */
+@SuppressWarnings("unchecked")
+public interface GenericsResolver
+{
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost. If you want
+     * to preserve the type parameters of the return type consider using
+     * {@link #extractActualType(java.lang.reflect.Type, java.lang.reflect.Method)}.
+     *
+     * @param containingClass class which either contains or inherited the method
+     * @param method          method from which to extract the return type
+     * @return the class represented by the methods generic return type, resolved based on the context .
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     * @see #asClass(java.lang.reflect.Type)
+     */
+    Class<?> extractGenericReturnType(Class<?> containingClass, Method method);
+
+    /**
+     * Analyzes the field in the context of containingClass and returns the Class that is represented by
+     * the field's generic type. Any parameter information in the generic type is lost, if you want
+     * to preserve the type parameters of the return type consider using
+     * #getTypeVariableIndex(java.lang.reflect.TypeVariable).
+     *
+     * @param containingClass class which either contains or inherited the field
+     * @param field           field from which to extract the type
+     * @return the class represented by the field's generic type, resolved based on the containingClass.
+     * @see #extractActualType(java.lang.reflect.Type, java.lang.reflect.Field)
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     * @see #asClass(java.lang.reflect.Type)
+     */
+    Class extractGenericFieldType(Class containingClass, Field field);
+
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost.
+     *
+     * @param containingType Type which is/represents the class that either contains or inherited the method
+     * @param method         method from which to extract the generic return type
+     * @return the generic type represented by the methods generic return type, resolved based on the containingType.
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     */
+    Type extractActualType(Type containingType, Method method);
+
+    /**
+     * Analyzes the method in the context of containingClass and returns the Class that is represented by
+     * the method's generic return type. Any parameter information in the generic return type is lost.
+     *
+     * @param containingType Type which is/represents the class that either contains or inherited the field
+     * @param field          field from which to extract the generic return type
+     * @return the generic type represented by the methods generic return type, resolved based on the containingType.
+     * @see #resolve(java.lang.reflect.Type,java.lang.reflect.Type)
+     */
+    Type extractActualType(Type containingType, Field field);
+
+    /**
+     * Resolves the type parameter based on the context of the containingType.
+     *
+     * {@link java.lang.reflect.TypeVariable} will be unwrapped to the type argument resolved form the class
+     * hierarchy. This may be something other than a simple Class if the type argument is a ParameterizedType for
+     * instance (e.g. {@code List<E>; List<Map<Long, String>>}, E would be returned as a ParameterizedType with the raw
+     * type Map and type arguments Long and String.
+     *
+     *
+     * @param type
+     *          the generic type (ParameterizedType, GenericArrayType, WildcardType, TypeVariable) to be resolved
+     * @param containingType
+     *          the type which his
+     * @return
+     *          the type resolved to the best of our ability.
+     */
+    Type resolve(final Type type, final Type containingType);
+    
+    /**
+     * Convenience class for getting a {@link GenericsResolver} instance.
+     */
+    final static public class Provider 
+    {
+
+        final private static GenericsResolver instance;
+        
+        static 
+        {
+            
+            ServiceLoader<GenericsResolver> serviceLoader = ServiceLoader.load(GenericsResolver.class);
+            Iterator<GenericsResolver> iterator = serviceLoader.iterator();
+            if (iterator.hasNext()) 
+            {
+                instance = iterator.next();
+            }
+            else 
+            {
+                instance = new GenericsResolverImpl();
+            }
+        }
+        
+        /**
+         * Returns a cached {@linkplain GenericsResolver} instance. 
+         * If {@link ServiceLoader} finds one instance, it returns the first one found. If not,
+         * it returns {@link GenericsResolverImpl}.
+         * @return a {@link GenericsResolver} instance.
+         */
+        public static GenericsResolver getInstance() 
+        {
+            return instance;
+        }
+        
+    }
+    
+    /**
+     * Get the class represented by the reflected type.
+     * This method is lossy; You cannot recover the type information from the class that is returned.
+     *
+     * {@code TypeVariable} the first bound is returned. If your type variable extends multiple interfaces that information
+     * is lost.
+     *
+     * {@code WildcardType} the first lower bound is returned. If the wildcard is defined with upper bounds
+     * then {@code Object} is returned.
+     *
+     * @param actualType
+     *           a Class, ParameterizedType, GenericArrayType
+     * @return the un-parameterized class associated with the type.
+     */
+    Class asClass(Type actualType);
+    
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/InvalidationEventHub.java b/commons/src/main/java/org/apache/tapestry5/commons/services/InvalidationEventHub.java
new file mode 100644
index 0000000..d583172
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/InvalidationEventHub.java
@@ -0,0 +1,58 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import java.util.Map;
+
+/**
+ * An object which manages a list of {@link org.apache.tapestry5.commons.services.InvalidationListener}s. There are multiple
+ * event hub services implementing this interface, each with a specific marker annotation; each can register listeners
+ * and fire events; these are based on the type of resource that has been invalidated. Tapestry has built-in support
+ * for:
+ * <dl>
+ * <dt>message catalog resources
+ * <dd><a href="https://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ComponentMessages.html">ComponentMessages</a> marker annotation
+ * <dt>component templates
+ * <dd><a href="https://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ComponentTemplates.html">ComponentTemplates</a> marker annotation
+ * <dt>component classes
+ * <dd><a href="https://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ComponentClasses.html">ComponentClasses</a> marker annotation
+ * </dl>
+ *
+ * Starting in Tapestry 5.3, these services are disabled in production (it does nothing).
+ *
+ * @since 5.1.0.0
+ */
+public interface InvalidationEventHub
+{
+    /**
+     * Adds a listener, who needs to know when an underlying resource of a given category has changed (so that the
+     * receiver may discard any cached data that may have been invalidated). Does nothing in production mode.
+     *
+     * @deprecated in 5.4, use {@link #addInvalidationCallback(Runnable)} instead}
+     */
+    void addInvalidationListener(InvalidationListener listener);
+
+    /**
+     * Adds a callback that is invoked when an underlying tracked resource has changed. Does nothing in production mode.
+     *
+     * @since  5.4
+     */
+    void addInvalidationCallback(Runnable callback);
+
+    /**
+     * Adds a callback that clears the map.
+     *
+     * @since 5.4
+     */
+    void clearOnInvalidation(Map<?,?> map);
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/InvalidationListener.java b/commons/src/main/java/org/apache/tapestry5/commons/services/InvalidationListener.java
new file mode 100644
index 0000000..56b3b26
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/InvalidationListener.java
@@ -0,0 +1,33 @@
+// Copyright 2006, 2007, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+/**
+ * Interface for objects that may cache information that can be invalidated. Invalidation occurs when external files,
+ * from which in-memory data is cached, is determined to have changed. Granularity is very limited; when any external
+ * file is found to have changed, the event is fired (with the expectation that the cleared cache will be repopulated as
+ * necessary).
+ *
+ * @see org.apache.tapestry5.commons.services.InvalidationEventHub
+ * @since 5.1.0.0
+ * @deprecated In 5.4; use {@link InvalidationEventHub#addInvalidationCallback(Runnable)} instead
+ */
+public interface InvalidationListener
+{
+    /**
+     * Invoked to indicate that some object is invalid. The receiver should clear its cache.
+     */
+    void objectWasInvalidated();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/PlasticProxyFactory.java b/commons/src/main/java/org/apache/tapestry5/commons/services/PlasticProxyFactory.java
new file mode 100644
index 0000000..3b8b9bc
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/PlasticProxyFactory.java
@@ -0,0 +1,174 @@
+// Copyright 2011, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+import org.apache.tapestry5.commons.Location;
+import org.apache.tapestry5.commons.ObjectCreator;
+import org.apache.tapestry5.ioc.annotations.IncompatibleChange;
+import org.apache.tapestry5.plastic.ClassInstantiator;
+import org.apache.tapestry5.plastic.PlasticClassListenerHub;
+import org.apache.tapestry5.plastic.PlasticClassTransformation;
+import org.apache.tapestry5.plastic.PlasticClassTransformer;
+
+/**
+ * A service used to create proxies of varying types. As a secondary concern, manages to identify the
+ * location of methods and constructors, which is important for exception reporting.
+ *
+ * @since 5.3
+ */
+public interface PlasticProxyFactory extends PlasticClassListenerHub
+{
+    /**
+     * Returns the class loader used when creating new classes, this is a child class loader
+     * of another class loader (usually, the thread's context class loader).
+     */
+    ClassLoader getClassLoader();
+
+    /**
+     * Creates a proxy object that implements the indicated interface, then invokes the callback to further
+     * configure the proxy.
+     *
+     * @param interfaceType
+     *         interface implemented by proxy
+     * @param callback
+     *         configures the proxy
+     * @return instantiator that can be used to create an instance of the proxy class
+     */
+    <T> ClassInstantiator<T> createProxy(Class<T> interfaceType, PlasticClassTransformer callback);
+
+    /**
+     * Creates a proxy object that implements the indicated interface and indicated service implementation type,
+     * then invokes the callback to further configure the proxy.
+     *
+     * @param interfaceType
+     *         interface implemented by proxy
+     * @param implementationType
+     *         a class that implements the interfaceType. It can be null.
+     * @param callback
+     *         configures the proxy
+     * @return instantiator that can be used to create an instance of the proxy class
+     */
+    @IncompatibleChange(release = "5.4.5", details = "TAP5-2528")
+    <T> ClassInstantiator<T> createProxy(Class<T> interfaceType, Class<? extends T> implementationType, PlasticClassTransformer callback, boolean introduceInterface);
+
+    /**
+     * Same as <code>createProxy(interfacetype, implementationType, callback, true)</code>
+     *
+     * @param interfaceType
+     *         interface implemented by proxy
+     * @param implementationType
+     *         a class that implements the interfaceType. It can be null.
+     * @param callback
+     *         configures the proxy
+     * @return instantiator that can be used to create an instance of the proxy class
+     */
+    @IncompatibleChange(release = "5.4", details = "TAP5-2029")
+    <T> ClassInstantiator<T> createProxy(Class<T> interfaceType, Class<? extends T> implementationType, PlasticClassTransformer callback);
+
+    /**
+     * Creates the underlying {@link PlasticClassTransformation} for an interface proxy. This should only be
+     * used in the cases where encapsulating the PlasticClass construction into a {@linkplain PlasticClassTransformer
+     * callback} is not feasible (which is the case for some of the older APIs inside Tapestry IoC).
+     *
+     * @param interfaceType
+     *         class proxy will extend from
+     * @return transformation from which an instantiator may be created
+     */
+    <T> PlasticClassTransformation<T> createProxyTransformation(Class<T> interfaceType);
+
+    /**
+     * Creates the underlying {@link PlasticClassTransformation} for an interface proxy with a given
+     * implementation class. This should only be
+     * used in the cases where encapsulating the PlasticClass construction into a {@linkplain PlasticClassTransformer
+     * callback} is not feasible (which is the case for some of the older APIs inside Tapestry IoC).
+     *
+     * @param interfaceType
+     *         class proxy will extend from
+     * @param implementationType
+     *         a class that implements the interfaceType. It can be null.
+     * @return transformation from which an instantiator may be created
+     */
+    @IncompatibleChange(release = "5.4", details = "TAP5-2029")
+    <T> PlasticClassTransformation<T> createProxyTransformation(Class<T> interfaceType, Class<? extends T> implementationType);
+
+    /**
+     * Creates a proxy instance that delegates all methods through a corresponding
+     * ObjectCreator. Each method invocation on the proxy will route through {@link ObjectCreator#createObject()} (the
+     * creator implementation may decide to
+     * cache the return value as appropriate).
+     *
+     * @param <T>
+     *         type of proxy
+     * @param interfaceType
+     *         interface class for proxy
+     * @param creator
+     *         object responsible for creating the real object
+     * @param description
+     *         the <code>toString()</code> of the proxy
+     * @return proxy instance
+     */
+    <T> T createProxy(Class<T> interfaceType, ObjectCreator<T> creator, String description);
+    
+    /**
+     * Creates a proxy instance that delegates all methods through a corresponding
+     * ObjectCreator. Each method invocation on the proxy will route through {@link ObjectCreator#createObject()} (the
+     * creator implementation may decide to
+     * cache the return value as appropriate).
+     *
+     * @param <T>
+     *         type of proxy
+     * @param interfaceType
+     *         interface class for proxy
+     * @param implementationType
+     *         class that implements the interface type. It may be null
+     * @param creator
+     *         object responsible for creating the real object
+     * @param description
+     *         the <code>toString()</code> of the proxy
+     * @return proxy instance
+     */
+    @IncompatibleChange(release = "5.4", details = "Added for TAP5-2029")
+    <T> T createProxy(Class<T> interfaceType, Class<? extends T> implementationType, ObjectCreator<T> creator, String description);
+
+    /**
+     * Converts a method to a {@link Location}, which includes information about the source file name and line number.
+     *
+     * @param method
+     *         to look up
+     * @return the location (identifying the method and possibly, the line number within the method)
+     */
+    Location getMethodLocation(Method method);
+
+    /**
+     * Return a string representation for the constructor (including class and parameters) and (if available) file name
+     * and line number.
+     *
+     * @return the location (identifying the constructor and possibly, the line number within the method)
+     */
+    Location getConstructorLocation(Constructor constructor);
+
+    /**
+     * Clears any cached information stored by the proxy factory; this is useful in Tapestry development mode
+     * when a class loader may have been discarded (because the proxy factory may indirectly keep references
+     * to classes loaded by the old class loader).
+     *
+     * @since 5.3.3
+     */
+    void clearCache();
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/PropertyAccess.java b/commons/src/main/java/org/apache/tapestry5/commons/services/PropertyAccess.java
new file mode 100644
index 0000000..0e68e08
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/PropertyAccess.java
@@ -0,0 +1,75 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * A wrapper around the JavaBean Introspector that allows more manageable access to JavaBean properties of objects.
+ *
+ * Only provides access to <em>simple</em> properties. Indexed properties are ignored.
+ *
+ * Starting in Tapestry 5.2, public fields can now be accessed as if they were properly JavaBean properties. Where there
+ * is a name conflict, the true property will be favored over the field access.
+ */
+public interface PropertyAccess
+{
+    /**
+     * Reads the value of a property.
+     *
+     * @throws UnsupportedOperationException
+     *             if the property is write only
+     * @throws IllegalArgumentException
+     *             if property does not exist
+     */
+    Object get(Object instance, String propertyName);
+
+    /**
+     * Updates the value of a property.
+     *
+     * @throws UnsupportedOperationException
+     *             if the property is read only
+     * @throws IllegalArgumentException
+     *             if property does not exist
+     */
+    void set(Object instance, String propertyName, Object value);
+
+    /**
+     * Returns the annotation of a given property for the specified type if such an annotation is present, else null.
+     * A convenience over invoking {@link #getAdapter(Object)}.{@link ClassPropertyAdapter#getPropertyAdapter(String)}.{@link PropertyAdapter#getAnnotation(Class)}
+     *
+     * @param instance     the object to read a value from
+     * @param propertyName the name of the property to read (case is ignored)
+     * @param annotationClass the type of annotation to return
+     * @throws IllegalArgumentException
+     *             if property does not exist
+     *
+     * @since 5.4
+     */
+    Annotation getAnnotation(Object instance, String propertyName, Class<? extends Annotation> annotationClass);
+
+    /**
+     * Returns the adapter for a particular object instance. A convienience over invoking {@link #getAdapter(Class)}.
+     */
+    ClassPropertyAdapter getAdapter(Object instance);
+
+    /**
+     * Returns the adapter used to access properties within the indicated class.
+     */
+    ClassPropertyAdapter getAdapter(Class forClass);
+
+    /**
+     * Discards all stored property access information, discarding all created class adapters.
+     */
+    void clearCache();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/PropertyAdapter.java b/commons/src/main/java/org/apache/tapestry5/commons/services/PropertyAdapter.java
new file mode 100644
index 0000000..8c3c861
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/PropertyAdapter.java
@@ -0,0 +1,118 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.apache.tapestry5.commons.AnnotationProvider;
+
+/**
+ * Provides access to a single property within a class. Acts as an {@link org.apache.tapestry5.commons.AnnotationProvider};
+ * when searching for annotations, the read method (if present) is checked first, followed by the write method, followed
+ * by the underlying field (when the property name matches the field name).
+ *
+ * Starting in release 5.2, this property may actually be a public field. In 5.3, it may be a public static field.
+ *
+ * @see org.apache.tapestry5.commons.services.ClassPropertyAdapter
+ */
+public interface PropertyAdapter extends AnnotationProvider
+{
+    /**
+     * Returns the name of the property (or public field).
+     */
+    String getName();
+
+    /**
+     * Returns true if the property is readable (i.e., has a getter method or is a public field).
+     */
+    boolean isRead();
+
+    /**
+     * Returns the method used to read the property, or null if the property is not readable (or is a public field).
+     */
+    public Method getReadMethod();
+
+    /**
+     * Returns true if the property is writeable (i.e., has a setter method or is a non-final field).
+     */
+    boolean isUpdate();
+
+    /**
+     * Returns the method used to update the property, or null if the property is not writeable (or a public field).
+     */
+    public Method getWriteMethod();
+
+    /**
+     * Reads the property value.
+     *
+     * @param instance to read from
+     * @throws UnsupportedOperationException if the property is write only
+     */
+    Object get(Object instance);
+
+    /**
+     * Updates the property value. The provided value must not be null if the property type is primitive, and must
+     * otherwise be of the proper type.
+     *
+     * @param instance to update
+     * @param value    new value for the property
+     * @throws UnsupportedOperationException if the property is read only
+     */
+    void set(Object instance, Object value);
+
+    /**
+     * Returns the type of the property.
+     */
+    Class getType();
+
+    /**
+     * Returns true if the return type of the read method is not the same as the property type. This can occur when the
+     * property has been defined using generics, in which case, the method's type may be Object when the property type
+     * is something more specific. This method is primarily used when generating runtime code related to the property.
+     */
+    boolean isCastRequired();
+
+    /**
+     * Returns the {@link org.apache.tapestry5.commons.services.ClassPropertyAdapter} that provides access to other
+     * properties defined by the same class.
+     */
+    ClassPropertyAdapter getClassAdapter();
+
+    /**
+     * Returns the type of bean to which this property belongs. This is the same as
+     * {@link org.apache.tapestry5.commons.services.ClassPropertyAdapter#getBeanType()}.
+     */
+    Class getBeanType();
+
+    /**
+     * Returns true if the property is actually a public field (possibly, a public static field).
+     *
+     * @since 5.2
+     */
+    boolean isField();
+
+    /**
+     * Returns the field if the property is a public field or null if the property is accessed via the read method.
+     *
+     * @since 5.2
+     */
+    Field getField();
+
+    /**
+     * The class in which the property (or public field) is defined.
+     *
+     * @since 5.2
+     */
+    Class getDeclaringClass();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/services/TypeCoercer.java b/commons/src/main/java/org/apache/tapestry5/commons/services/TypeCoercer.java
new file mode 100644
index 0000000..bcb59cd
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/services/TypeCoercer.java
@@ -0,0 +1,86 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.services;
+
+import org.apache.tapestry5.ioc.annotations.UsesConfiguration;
+
+/**
+ * Makes use of {@link org.apache.tapestry5.commons.services.Coercion}s to convert between an input value (of some specific
+ * type) and a desired output type. Smart about coercing, even if it requires multiple coercion steps (i.e., via an
+ * intermediate type, such as String).
+ */
+@UsesConfiguration(CoercionTuple.class)
+public interface TypeCoercer
+{
+    /**
+     * Performs a coercion from an input type to a desired output type. When the target type is a primitive, the actual
+     * conversion will be to the equivalent wrapper type. In some cases, the TypeCoercer will need to search for an
+     * appropriate coercion, and may even combine existing coercions to form new ones; in those cases, the results of
+     * the search are cached.
+     *
+     * The TypeCoercer also caches the results of a coercion search.
+     * 
+     * @param <S>
+     *            source type (input)
+     * @param <T>
+     *            target type (output)
+     * @param input
+     * @param targetType
+     *            defines the target type
+     * @return the coerced value
+     * @throws RuntimeException
+     *             if the input can not be coerced
+     */
+    <S, T> T coerce(S input, Class<T> targetType);
+
+    /**
+     * Given a source and target type, computes the coercion that will be used.
+     *
+     * Note: holding the returned coercion past the time when {@linkplain #clearCache() the cache is cleared} can cause
+     * a memory leak, especially in the context of live reloading (wherein holding a reference to a single class make
+     * keep an entire ClassLoader from being reclaimed).
+     * 
+     * @since 5.2.0
+     * @param <S>
+     *            source type (input)
+     * @param <T>
+     *            target type (output)
+     * @param sourceType
+     *            type to coerce from
+     * @param targetType
+     *            defines the target type
+     * @return the coercion that will ultimately be used
+     */
+    <S, T> Coercion<S, T> getCoercion(Class<S> sourceType, Class<T> targetType);
+
+    /**
+     * Used primarily inside test suites, this method performs the same steps as {@link #coerce(Object, Class)}, but
+     * returns a string describing the series of coercions, such as "Object --&gt; String --&gt; Long --&gt; Integer".
+     * 
+     * @param <S>
+     *            source type (input)
+     * @param <T>
+     *            target type (output)
+     * @param sourceType
+     *            the source coercion type (use void.class for coercions from null)
+     * @param targetType
+     *            defines the target type
+     * @return a string identifying the series of coercions, or the empty string if no coercion is necessary
+     */
+    <S, T> String explain(Class<S> sourceType, Class<T> targetType);
+
+    /**
+     * Clears cached information stored by the TypeCoercer.
+     */
+    void clearCache();
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/AbstractMessages.java b/commons/src/main/java/org/apache/tapestry5/commons/util/AbstractMessages.java
new file mode 100644
index 0000000..f13b876
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/AbstractMessages.java
@@ -0,0 +1,93 @@
+// Copyright 2006, 2009, 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.tapestry5.commons.MessageFormatter;
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.internal.util.MessageFormatterImpl;
+
+/**
+ * Abstract implementation of {@link Messages} that doesn't know where values come from (that information is supplied in
+ * a subclass, via the {@link #valueForKey(String)} method).
+ */
+public abstract class AbstractMessages implements Messages
+{
+    /**
+     * String key to MF instance.
+     */
+    private final Map<String, MessageFormatter> cache = CollectionFactory.newConcurrentMap();
+
+    private final Locale locale;
+
+    protected AbstractMessages(Locale locale)
+    {
+        this.locale = locale;
+    }
+
+    /**
+     * Invoked to provide the value for a particular key. This may be invoked multiple times even for the same key. The
+     * implementation should <em>ignore the case of the key</em>.
+     *
+     * @param key the key to obtain a value for (case insensitive)
+     * @return the value for the key, or null if this instance can not provide the value
+     */
+    protected abstract String valueForKey(String key);
+
+
+    @Override
+    public boolean contains(String key)
+    {
+        return valueForKey(key) != null;
+    }
+
+    @Override
+    public String get(String key)
+    {
+        if (contains(key)) return valueForKey(key);
+
+        return String.format("[[missing key: %s]]", key);
+    }
+
+    @Override
+    public MessageFormatter getFormatter(String key)
+    {
+        MessageFormatter result = cache.get(key);
+
+        if (result == null)
+        {
+            result = buildMessageFormatter(key);
+            cache.put(key, result);
+        }
+
+        return result;
+    }
+
+    private MessageFormatter buildMessageFormatter(String key)
+    {
+        String format = get(key);
+
+        return new MessageFormatterImpl(format, locale);
+    }
+
+    @Override
+    public String format(String key, Object... args)
+    {
+        return getFormatter(key).format(args);
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/AvailableValues.java b/commons/src/main/java/org/apache/tapestry5/commons/util/AvailableValues.java
new file mode 100644
index 0000000..9fd649a
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/AvailableValues.java
@@ -0,0 +1,86 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tapestry5.commons.internal.util.InternalCommonsUtils;
+
+/**
+ * Used (as part of a {@link UnknownValueException} to identify what available values
+ * are present.
+ * 
+ * @since 5.2.0
+ */
+public class AvailableValues
+{
+    private final String valueType;
+
+    private final List<String> values;
+
+    /**
+     * @param valueType
+     *            a word or phrase that describes what the values are such as "component types" or "service ids"
+     *@param values
+     *            a set of objects defining the values; the values will be converted to strings and sorted into
+     *            ascending order
+     */
+    public AvailableValues(String valueType, Collection<?> values)
+    {
+        this.valueType = valueType;
+        this.values = sortValues(values);
+    }
+
+    public AvailableValues(String valueType, Map<?, ?> map)
+    {
+        this(valueType, map.keySet());
+    }
+
+    private static List<String> sortValues(Collection<?> values)
+    {
+        List<String> result = CollectionFactory.newList();
+
+        for (Object v : values)
+        {
+            result.add(String.valueOf(v));
+        }
+
+        Collections.sort(result);
+
+        return Collections.unmodifiableList(result);
+    }
+
+    /** The type of value, i.e., "component types" or "service ids". */
+    public String getValueType()
+    {
+        return valueType;
+    }
+
+    /** The values, as strings, in sorted order. */
+    public List<String> getValues()
+    {
+        return values;
+    }
+
+    @Override
+    public String toString()
+    {
+        return String.format("AvailableValues[%s: %s]", valueType, InternalCommonsUtils.join(values));
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/CaseInsensitiveMap.java b/commons/src/main/java/org/apache/tapestry5/commons/util/CaseInsensitiveMap.java
new file mode 100644
index 0000000..f83e4eb
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/CaseInsensitiveMap.java
@@ -0,0 +1,573 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * An mapped collection where the keys are always strings and access to values is case-insensitive. The case of keys in
+ * the map is <em>maintained</em>, but on any access to a key (directly or indirectly), all key comparisons are
+ * performed in a case-insensitive manner. The map implementation is intended to support a reasonably finite number
+ * (dozens or hundreds, not thousands or millions of key/value pairs. Unlike HashMap, it is based on a sorted list of
+ * entries rather than hash bucket. It is also geared towards a largely static map, one that is created and then used
+ * without modification.
+ *
+ * @param <V> the type of value stored
+ */
+public class CaseInsensitiveMap<V> extends AbstractMap<String, V> implements Serializable
+{
+
+    private static final long serialVersionUID = -3162531976817110908L;
+
+    private static final int NULL_HASH = Integer.MIN_VALUE;
+
+    private static final int DEFAULT_SIZE = 20;
+
+    private static class CIMEntry<V> implements Map.Entry<String, V>, Serializable
+    {
+        private static final long serialVersionUID = 6713986085221148350L;
+
+        private String key;
+
+        private final int hashCode;
+
+        V value;
+
+        public CIMEntry(final String key, final int hashCode, V value)
+        {
+            this.key = key;
+            this.hashCode = hashCode;
+            this.value = value;
+        }
+
+        @Override
+        public String getKey()
+        {
+            return key;
+        }
+
+        @Override
+        public V getValue()
+        {
+            return value;
+        }
+
+        @Override
+        public V setValue(V value)
+        {
+            V result = this.value;
+
+            this.value = value;
+
+            return result;
+        }
+
+        /**
+         * Returns true if both keys are null, or if the provided key is the same as, or case-insensitively equal to,
+         * the entrie's key.
+         *
+         * @param key to compare against
+         * @return true if equal
+         */
+        @SuppressWarnings({ "StringEquality" })
+        boolean matches(String key)
+        {
+            return key == this.key || (key != null && key.equalsIgnoreCase(this.key));
+        }
+
+        boolean valueMatches(Object value)
+        {
+            return value == this.value || (value != null && value.equals(this.value));
+        }
+
+        @Override
+        public String toString() {
+          StringBuilder builder = new StringBuilder();
+          builder.append("CIMEntry [key=").append(key).append(", value=").append(value).append(']');
+          return builder.toString();
+        }
+
+    }
+
+    private class EntrySetIterator implements Iterator<Entry<String, V>>
+    {
+        int expectedModCount = modCount;
+
+        int index;
+
+        int current = -1;
+
+        @Override
+        public boolean hasNext()
+        {
+            return index < size;
+        }
+
+        @Override
+        public Entry<String, V> next()
+        {
+            check();
+
+            if (index >= size) throw new NoSuchElementException();
+
+            current = index++;
+
+            return entries[current];
+        }
+
+        @Override
+        public void remove()
+        {
+            check();
+
+            if (current < 0) throw new NoSuchElementException();
+
+            new Position(current, true).remove();
+
+            expectedModCount = modCount;
+        }
+
+        private void check()
+        {
+            if (expectedModCount != modCount) throw new ConcurrentModificationException();
+        }
+
+        @Override
+        public String toString() {
+           return "EntrySetIterator, current key: "+entries[current].key;
+        }
+    }
+
+    private class EntrySet extends AbstractSet<Entry<String, V>>
+    {
+        @Override
+        public Iterator<Entry<String, V>> iterator()
+        {
+            return new EntrySetIterator();
+        }
+
+        @Override
+        public int size()
+        {
+            return size;
+        }
+
+        @Override
+        public void clear()
+        {
+            CaseInsensitiveMap.this.clear();
+        }
+
+        @Override
+        public boolean contains(Object o)
+        {
+            if (!(o instanceof Map.Entry)) return false;
+
+            @SuppressWarnings("rawtypes")
+            Map.Entry e = (Map.Entry) o;
+
+            Position position = select(e.getKey());
+
+            return position.isFound() && position.entry().valueMatches(e.getValue());
+        }
+
+        @Override
+        public boolean remove(Object o)
+        {
+            if (!(o instanceof Map.Entry)) return false;
+
+            @SuppressWarnings("rawtypes")
+            Map.Entry e = (Map.Entry) o;
+
+            Position position = select(e.getKey());
+
+            if (position.isFound() && position.entry().valueMatches(e.getValue()))
+            {
+                position.remove();
+                return true;
+            }
+
+            return false;
+        }
+
+    }
+
+    private class Position
+    {
+        private final int cursor;
+
+        private final boolean found;
+
+        Position(int cursor, boolean found)
+        {
+            this.cursor = cursor;
+            this.found = found;
+        }
+
+        boolean isFound()
+        {
+            return found;
+        }
+
+        CIMEntry<V> entry()
+        {
+            return entries[cursor];
+        }
+
+        V get()
+        {
+            return found ? entries[cursor].value : null;
+        }
+
+        V remove()
+        {
+            if (!found) return null;
+
+            V result = entries[cursor].value;
+
+            // Remove the entry by shifting everything else down.
+
+            System.arraycopy(entries, cursor + 1, entries, cursor, size - cursor - 1);
+
+            // We shifted down, leaving one (now duplicate) entry behind.
+
+            entries[--size] = null;
+
+            // A structural change for sure
+
+            modCount++;
+
+            return result;
+        }
+
+        @SuppressWarnings("unchecked")
+        V put(String key, int hashCode, V newValue)
+        {
+            if (found)
+            {
+                CIMEntry<V> e = entries[cursor];
+
+                V result = e.value;
+
+                // Not a structural change, so no change to modCount
+
+                // Update the key (to maintain case). By definition, the hash code
+                // will not change.
+
+                e.key = key;
+                e.value = newValue;
+
+                return result;
+            }
+
+            // Not found, we're going to add it.
+
+            int newSize = size + 1;
+
+            try
+            {
+                if (newSize == entries.length)
+                {
+                    // Time to expand!
+
+                    int newCapacity = (size * 3) / 2 + 1;
+
+                    CIMEntry<V>[] newEntries = new CIMEntry[newCapacity];
+
+                    System.arraycopy(entries, 0, newEntries, 0, cursor);
+
+                    System.arraycopy(entries, cursor, newEntries, cursor + 1, size - cursor);
+
+                    entries = newEntries;
+                }
+                else
+                {
+                    // Open up a space for the new entry
+                    System.arraycopy(entries, cursor, entries, cursor + 1, size - cursor);
+                }
+            } catch (ArrayIndexOutOfBoundsException e)
+            {
+                // TAP5-2526
+                throw new ConcurrentModificationException();
+            }
+
+            CIMEntry<V> newEntry = new CIMEntry<V>(key, hashCode, newValue);
+            entries[cursor] = newEntry;
+
+            size++;
+
+            // This is definitely a structural change
+
+            modCount++;
+
+            return null;
+        }
+
+    }
+
+    // The list of entries. This is kept sorted by hash code. In some cases, there may be different
+    // keys with the same hash code in adjacent indexes.
+    private CIMEntry<V>[] entries;
+
+    private int size = 0;
+
+    // Used by iterators to check for concurrent modifications
+
+    private transient int modCount = 0;
+
+    private transient Set<Map.Entry<String, V>> entrySet;
+
+    public CaseInsensitiveMap()
+    {
+        this(DEFAULT_SIZE);
+    }
+
+    @SuppressWarnings("unchecked")
+    public CaseInsensitiveMap(int size)
+    {
+        entries = new CIMEntry[Math.max(size, 3)];
+    }
+
+    public CaseInsensitiveMap(Map<String, ? extends V> map)
+    {
+        this(map.size());
+
+        for (Map.Entry<String, ? extends V> entry : map.entrySet())
+        {
+            put(entry.getKey(), entry.getValue());
+        }
+    }
+
+    @Override
+    public void clear()
+    {
+        for (int i = 0; i < size; i++)
+            entries[i] = null;
+
+        size = 0;
+        modCount++;
+    }
+
+    @Override
+    public boolean isEmpty()
+    {
+        return size == 0;
+    }
+
+    @Override
+    public int size()
+    {
+        return size;
+    }
+
+    @Override
+    public V put(String key, V value)
+    {
+        int hashCode = caseInsenitiveHashCode(key);
+
+        return select(key, hashCode).put(key, hashCode, value);
+    }
+
+    @Override
+    public boolean containsKey(Object key)
+    {
+        return select(key).isFound();
+    }
+
+    @Override
+    public V get(Object key)
+    {
+        return select(key).get();
+    }
+
+    @Override
+    public V remove(Object key)
+    {
+        return select(key).remove();
+    }
+
+    @Override
+    public Set<Map.Entry<String, V>> entrySet()
+    {
+        if (entrySet == null) entrySet = new EntrySet();
+
+        return entrySet;
+    }
+
+    @Override
+    public Set<String> keySet() {
+
+        AbstractSet<String> set = new AbstractSet<String>() {
+
+          @Override
+          public Iterator<String> iterator() {
+
+            final Iterator<java.util.Map.Entry<String, V>> entrySetIterator = entrySet().iterator();
+
+            return new Iterator<String>() {
+              @Override
+              public boolean hasNext() {
+                return entrySetIterator.hasNext();
+              }
+              @Override
+              public String next() {
+                String nextKey = entrySetIterator.next().getKey();
+                return nextKey;
+              }
+
+              @Override
+              public void remove() {
+                throw new UnsupportedOperationException("Modifications to the key set are not allowed.");
+              }
+            };
+          }
+
+          @Override
+          public boolean contains(Object o) {
+            return containsKey(o);
+          }
+
+          @Override
+          public int size() {
+            return size;
+          }
+        };
+
+        return Collections.unmodifiableSet(set);
+    }
+
+    private Position select(Object key)
+    {
+        if (key == null || key instanceof String)
+        {
+            String keyString = (String) key;
+            return select(keyString, caseInsenitiveHashCode(keyString));
+        }
+
+        return new Position(0, false);
+    }
+
+    /**
+     * Searches the elements for the index of the indicated key and (case insensitive) hash code. Sets the _cursor and
+     * _found attributes.
+     */
+    private Position select(String key, int hashCode)
+    {
+        if (size == 0) return new Position(0, false);
+
+        int low = 0;
+        int high = size - 1;
+
+        int cursor;
+
+        try
+        {
+            while (low <= high)
+            {
+                cursor = (low + high) >> 1;
+
+                CIMEntry<V> e = entries[cursor];
+
+                if (e == null)
+                {
+                    // TAP5-2520
+                    throw new ConcurrentModificationException();
+                }
+
+                if (e.hashCode < hashCode)
+                {
+                    low = cursor + 1;
+                    continue;
+                }
+
+                if (e.hashCode > hashCode)
+                {
+                    high = cursor - 1;
+                    continue;
+                }
+
+                return tunePosition(key, hashCode, cursor);
+            }
+        } catch (ArrayIndexOutOfBoundsException e)
+        {
+            // TAP5-2526
+            throw new ConcurrentModificationException();
+        }
+
+        return new Position(low, false);
+    }
+
+    /**
+     * select() has located a matching hashCode, but there's an outlying possibility that multiple keys share the same
+     * hashCode. Backup the cursor until we get to locate the initial hashCode match, then march forward until the key
+     * is located, or the hashCode stops matching.
+     *
+     * @param key
+     * @param hashCode
+     */
+    private Position tunePosition(String key, int hashCode, int cursor)
+    {
+        boolean found = false;
+
+        while (cursor > 0)
+        {
+            if (entries[cursor - 1].hashCode != hashCode) break;
+
+            cursor--;
+        }
+
+        while (true)
+        {
+            if (entries[cursor].matches(key))
+            {
+                found = true;
+                break;
+            }
+
+            // Advance to the next entry.
+
+            cursor++;
+
+            // If out of entries,
+            if (cursor >= size || entries[cursor].hashCode != hashCode) break;
+        }
+
+        return new Position(cursor, found);
+    }
+
+    static int caseInsenitiveHashCode(String input)
+    {
+        if (input == null) return NULL_HASH;
+
+        int length = input.length();
+        int hash = 0;
+
+        // This should end up more or less equal to input.toLowerCase().hashCode(), unless String
+        // changes its implementation. Let's hope this is reasonably fast.
+
+        for (int i = 0; i < length; i++)
+        {
+            int ch = input.charAt(i);
+
+            int caselessCh = Character.toLowerCase(ch);
+
+            hash = 31 * hash + caselessCh;
+        }
+
+        return hash;
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/CollectionFactory.java b/commons/src/main/java/org/apache/tapestry5/commons/util/CollectionFactory.java
new file mode 100644
index 0000000..1ba56ab
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/CollectionFactory.java
@@ -0,0 +1,142 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Static factory methods to ease the creation of new collection types (when using generics). Most of these method
+ * leverage the compiler's ability to match generic types by return value. Typical usage (with a static import):
+ *
+ * <pre>
+ * Map&lt;Foo, Bar&gt; map = newMap();
+ * </pre>
+ *
+ *
+ * This is a replacement for:
+ *
+ * <pre>
+ * Map&lt;Foo, Bar&gt; map = new HashMap&lt;Foo, Bar&gt;();
+ * </pre>
+ */
+public final class CollectionFactory
+{
+    /**
+     * Constructs and returns a generic {@link HashMap} instance.
+     */
+    public static <K, V> Map<K, V> newMap()
+    {
+        return new HashMap<K, V>();
+    }
+
+    /**
+     * Constructs and returns a generic {@link java.util.HashSet} instance.
+     */
+    public static <T> Set<T> newSet()
+    {
+        return new HashSet<T>();
+    }
+
+    /**
+     * Contructs a new {@link HashSet} and initializes it using the provided collection.
+     */
+    public static <T, V extends T> Set<T> newSet(Collection<V> values)
+    {
+        return new HashSet<T>(values);
+    }
+
+    public static <T, V extends T> Set<T> newSet(V... values)
+    {
+        // Was a call to newSet(), but Sun JDK can't handle that. Fucking generics.
+        return new HashSet<T>(Arrays.asList(values));
+    }
+
+    /**
+     * Constructs a new {@link java.util.HashMap} instance by copying an existing Map instance.
+     */
+    public static <K, V> Map<K, V> newMap(Map<? extends K, ? extends V> map)
+    {
+        return new HashMap<K, V>(map);
+    }
+
+    /**
+     * Constructs a new concurrent map, which is safe to access via multiple threads.
+     */
+    public static <K, V> ConcurrentMap<K, V> newConcurrentMap()
+    {
+        return new ConcurrentHashMap<K, V>();
+    }
+
+    /**
+     * Contructs and returns a new generic {@link java.util.ArrayList} instance.
+     */
+    public static <T> List<T> newList()
+    {
+        return new ArrayList<T>();
+    }
+
+    /**
+     * Creates a new, fully modifiable list from an initial set of elements.
+     */
+    public static <T, V extends T> List<T> newList(V... elements)
+    {
+        // Was call to newList(), but Sun JDK can't handle that.
+        return new ArrayList<T>(Arrays.asList(elements));
+    }
+
+    /**
+     * Useful for queues.
+     */
+    public static <T> LinkedList<T> newLinkedList()
+    {
+        return new LinkedList<T>();
+    }
+
+    /**
+     * Constructs and returns a new {@link java.util.ArrayList} as a copy of the provided collection.
+     */
+    public static <T, V extends T> List<T> newList(Collection<V> list)
+    {
+        return new ArrayList<T>(list);
+    }
+
+    /**
+     * Constructs and returns a new {@link java.util.concurrent.CopyOnWriteArrayList}.
+     */
+    public static <T> List<T> newThreadSafeList()
+    {
+        return new CopyOnWriteArrayList<T>();
+    }
+
+    public static <T> Stack<T> newStack()
+    {
+        return new Stack<T>();
+    }
+
+    public static <V> Map<String, V> newCaseInsensitiveMap()
+    {
+        return new CaseInsensitiveMap<V>();
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/CommonsUtils.java b/commons/src/main/java/org/apache/tapestry5/commons/util/CommonsUtils.java
new file mode 100644
index 0000000..8048fda
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/CommonsUtils.java
@@ -0,0 +1,61 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.regex.Pattern;
+
+/**
+ * Some utility methods used in different Tapestry subprojects.
+ */
+public class CommonsUtils
+{
+
+    private static final String SLASH = "/";
+
+    private static final Pattern SLASH_PATTERN = Pattern.compile(SLASH);
+
+    private static final Pattern COMMA_PATTERN = Pattern.compile("\\s*,\\s*");
+    
+    /**
+     * Splits a path at each slash.
+     */
+    public static String[] splitPath(String path)
+    {
+        return SLASH_PATTERN.split(path);
+    }
+
+    /**
+     * Splits a value around commas. Whitespace around the commas is removed, as is leading and trailing whitespace.
+     *
+     * @since 5.1.0.0
+     */
+    public static String[] splitAtCommas(String value)
+    {
+        if (isBlank(value))
+            return EMPTY_STRING_ARRAY;
+
+        return COMMA_PATTERN.split(value.trim());
+    }
+
+    /**
+     * Returns true if the input is null, or is a zero length string (excluding leading/trailing whitespace).
+     */
+    
+    public static boolean isBlank(String input)
+    {
+        return input == null || input.length() == 0 || input.trim().length() == 0;
+    }
+
+    public static final String[] EMPTY_STRING_ARRAY = new String[0];
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/ExceptionUtils.java b/commons/src/main/java/org/apache/tapestry5/commons/util/ExceptionUtils.java
new file mode 100644
index 0000000..164c7cf
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/ExceptionUtils.java
@@ -0,0 +1,115 @@
+// Copyright 2008-2013 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import org.apache.tapestry5.commons.services.ClassPropertyAdapter;
+import org.apache.tapestry5.commons.services.PropertyAccess;
+
+/**
+ * Contains static methods useful for manipulating exceptions.
+ */
+public class ExceptionUtils
+{
+    /**
+     * Locates a particular type of exception, working its way via the cause property of each exception in the exception
+     * stack.
+     *
+     * @param t    the outermost exception
+     * @param type the type of exception to search for
+     * @return the first exception of the given type, if found, or null
+     */
+    public static <T extends Throwable> T findCause(Throwable t, Class<T> type)
+    {
+        Throwable current = t;
+
+        while (current != null)
+        {
+            if (type.isInstance(current))
+            {
+                return type.cast(current);
+            }
+
+            // Not a match, work down.
+
+            current = current.getCause();
+        }
+
+        return null;
+    }
+
+    /**
+     * Locates a particular type of exception, working its way down via any property that returns some type of Exception.
+     * This is more expensive, but more accurate, than {@link #findCause(Throwable, Class)} as it works with older exceptions
+     * that do not properly implement the (relatively new) {@linkplain Throwable#getCause() cause property}.
+     *
+     * @param t      the outermost exception
+     * @param type   the type of exception to search for
+     * @param access used to access properties
+     * @return the first exception of the given type, if found, or null
+     */
+    public static <T extends Throwable> T findCause(Throwable t, Class<T> type, PropertyAccess access)
+    {
+        Throwable current = t;
+
+        while (current != null)
+        {
+            if (type.isInstance(current))
+            {
+                return type.cast(current);
+            }
+
+            Throwable next = null;
+
+            ClassPropertyAdapter adapter = access.getAdapter(current);
+
+            for (String name : adapter.getPropertyNames())
+            {
+
+                Object value = adapter.getPropertyAdapter(name).get(current);
+
+                if (value != null && value != current && value instanceof Throwable)
+                {
+                    next = (Throwable) value;
+                    break;
+                }
+            }
+
+            current = next;
+        }
+
+
+        return null;
+    }
+
+    /**
+     * Extracts the message from an exception. If the exception's message is null, returns the exceptions class name.
+     *
+     * @param exception
+     *         to extract message from
+     * @return message or class name
+     * @since 5.4
+     */
+    public static String toMessage(Throwable exception)
+    {
+        assert exception != null;
+
+        String message = exception.getMessage();
+
+        if (message != null)
+            return message;
+
+        return exception.getClass().getName();
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/IntegerRange.java b/commons/src/main/java/org/apache/tapestry5/commons/util/IntegerRange.java
new file mode 100644
index 0000000..3183a2a
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/IntegerRange.java
@@ -0,0 +1,125 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.Iterator;
+
+/**
+ * Represents a sequence of integer values, either ascending or descending. The sequence is always inclusive (of the
+ * finish value).
+ */
+public final class IntegerRange implements Iterable<Integer>
+{
+    private final int start;
+
+    private final int finish;
+
+    private class RangeIterator implements Iterator<Integer>
+    {
+        private final int increment;
+
+        private int value = start;
+
+        private boolean hasNext = true;
+
+        RangeIterator()
+        {
+            increment = start < finish ? +1 : -1;
+        }
+
+        public boolean hasNext()
+        {
+            return hasNext;
+        }
+
+        public Integer next()
+        {
+            if (!hasNext) throw new IllegalStateException();
+
+            int result = value;
+
+            hasNext = value != finish;
+
+            value += increment;
+
+            return result;
+        }
+
+        public void remove()
+        {
+            throw new UnsupportedOperationException();
+        }
+
+    }
+
+    public IntegerRange(final int start, final int finish)
+    {
+        this.start = start;
+        this.finish = finish;
+    }
+
+    public int getFinish()
+    {
+        return finish;
+    }
+
+    public int getStart()
+    {
+        return start;
+    }
+
+    @Override
+    public String toString()
+    {
+        return String.format("%d..%d", start, finish);
+    }
+
+    /**
+     * The main puprose of a range object is to produce an Iterator. Since IntegerRange is iterable, it is useful with
+     * the Tapestry Loop component, but also with the Java for loop!
+     */
+    public Iterator<Integer> iterator()
+    {
+        return new RangeIterator();
+    }
+
+    @Override
+    public int hashCode()
+    {
+        final int PRIME = 31;
+
+        int result = PRIME + finish;
+
+        result = PRIME * result + start;
+
+        return result;
+    }
+
+    /**
+     * Returns true if the other object is an IntegerRange with the same start and finish values.
+     */
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) return true;
+        if (obj == null) return false;
+        if (getClass() != obj.getClass()) return false;
+        final IntegerRange other = (IntegerRange) obj;
+        if (finish != other.finish) return false;
+
+        return start == other.start;
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/MultiKey.java b/commons/src/main/java/org/apache/tapestry5/commons/util/MultiKey.java
new file mode 100644
index 0000000..bd595fc
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/MultiKey.java
@@ -0,0 +1,86 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.Arrays;
+
+/**
+ * Combines multiple values to form a single composite key. MultiKey can often be used as an alternative to nested
+ * maps.
+ */
+public final class MultiKey
+{
+    private static final int PRIME = 31;
+
+    private final Object[] values;
+
+    private final int hashCode;
+
+    /**
+     * Creates a new instance from the provided values. It is assumed that the values provided are good map keys
+     * themselves -- immutable, with proper implementations of equals() and hashCode().
+     *
+     * @param values
+     */
+    public MultiKey(Object... values)
+    {
+        this.values = values;
+
+        hashCode = PRIME * Arrays.hashCode(this.values);
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return hashCode;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final MultiKey other = (MultiKey) obj;
+
+        return Arrays.equals(values, other.values);
+    }
+
+    @Override
+    public String toString()
+    {
+        StringBuilder builder = new StringBuilder("MultiKey[");
+
+        boolean first = true;
+
+        for (Object o : values)
+        {
+            if (!first)
+                builder.append(", ");
+
+            builder.append(o);
+
+            first = false;
+        }
+
+        builder.append(']');
+
+        return builder.toString();
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/Stack.java b/commons/src/main/java/org/apache/tapestry5/commons/util/Stack.java
new file mode 100644
index 0000000..358ca7b
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/Stack.java
@@ -0,0 +1,171 @@
+// Copyright 2007, 2008, 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+/**
+ * A simple, streamlined implementation of {@link java.util.Stack}. The implementation is <em>not</em> threadsafe.
+ *
+ * @param <E> the type of elements stored in the map
+ * @see CollectionFactory#newStack()
+ */
+public class Stack<E>
+{
+    private static final int MINIMUM_SIZE = 3;
+
+    private static final int DEFAULT_ARRAY_SIZE = 20;
+
+    private Object[] items;
+
+    private int index = -1;
+
+    /**
+     * Normal constructor supporting an initial size of 20.
+     */
+    public Stack()
+    {
+        this(DEFAULT_ARRAY_SIZE);
+    }
+
+    /**
+     * @param initialSize the initial size of the internal array (which will be expanded as necessary). For best
+     *                    efficiency, set this to the maximum depth of the stack.
+     */
+    public Stack(int initialSize)
+    {
+        items = new Object[Math.max(initialSize, MINIMUM_SIZE)];
+    }
+
+    /**
+     * Returns true if the stack is empty.
+     */
+    public boolean isEmpty()
+    {
+        return index < 0;
+    }
+
+    /**
+     * Returns the number of items currently in the stack.
+     */
+    public int getDepth()
+    {
+        return index + 1;
+    }
+
+    /**
+     * Clears the stack, the same as popping off all elements.
+     */
+    public void clear()
+    {
+        for (int i = 0; i <= index; i++) items[i] = null;
+
+        index = -1;
+    }
+
+    /**
+     * Pushes a new item onto the stack.
+     */
+    public void push(E item)
+    {
+        index++;
+
+        if (index == items.length)
+        {
+            int newCapacity = (items.length * 3) / 2 + 1;
+            Object[] newItems = new Object[newCapacity];
+            System.arraycopy(items, 0, newItems, 0, items.length);
+
+            items = newItems;
+        }
+
+        items[index] = item;
+    }
+
+    /**
+     * Pops the top element off the stack and returns it.
+     *
+     * @return the top element of the stack
+     * @throws IllegalStateException if the stack is empty
+     */
+    @SuppressWarnings("unchecked")
+    public E pop()
+    {
+        checkIfEmpty();
+
+        Object result = items[index];
+
+        items[index] = null;
+
+        index--;
+
+        return (E) result;
+    }
+
+    private void checkIfEmpty()
+    {
+        if (index < 0) throw new IllegalStateException("Stack is empty.");
+    }
+
+    /**
+     * Returns the top element of the stack without affecting the stack.
+     *
+     * @return top element on the stack
+     * @throws IllegalStateException if the stack is empty
+     */
+    @SuppressWarnings("unchecked")
+    public E peek()
+    {
+        checkIfEmpty();
+
+        return (E) items[index];
+    }
+
+    /**
+     * Describes the stack, listing the element in order of depth (top element first).
+     *
+     * @return string description of the stack
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder builder = new StringBuilder("Stack[");
+
+        for (int i = index; i >= 0; i--)
+        {
+            if (i != index) builder.append(", ");
+
+            builder.append(String.valueOf(items[i]));
+        }
+
+        builder.append(']');
+
+        return builder.toString();
+    }
+
+    /**
+     * Returns a snapshot of the current state of the stack as an array of objects. The first object is the deepest in
+     * the stack, the last object is the most shallowest (most recently pushed onto the stack).  The returned array may
+     * be manipulated (it is a copy).
+     *
+     * @return the stack as an object array
+     */
+    public Object[] getSnapshot()
+    {
+        Object[] result = new Object[index + 1];
+
+        System.arraycopy(items, 0, result, 0, index + 1);
+
+        return result;
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/StrategyRegistry.java b/commons/src/main/java/org/apache/tapestry5/commons/util/StrategyRegistry.java
new file mode 100644
index 0000000..fa89fce
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/StrategyRegistry.java
@@ -0,0 +1,171 @@
+// Copyright 2006, 2007, 2008, 2011, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tapestry5.commons.internal.util.InheritanceSearch;
+
+/**
+ * A key component in implementing the "Gang of Four" Strategy pattern. A StrategyRegistry will match up a given input
+ * type with a registered strategy for that type.
+ *
+ * @param <A> the type of the strategy adapter
+ */
+public final class StrategyRegistry<A>
+{
+    private final Class<A> adapterType;
+
+    private final boolean allowNonMatch;
+
+    private final Map<Class, A> registrations = CollectionFactory.newMap();
+
+    private final Map<Class, A> cache = CollectionFactory.newConcurrentMap();
+
+    /**
+     * Used to identify types for which there is no matching adapter; we're using it as if it were a ConcurrentSet.
+     */
+    private final Map<Class, Boolean> unmatched = CollectionFactory.newConcurrentMap();
+
+    private StrategyRegistry(Class<A> adapterType, Map<Class, A> registrations, boolean allowNonMatch)
+    {
+        this.adapterType = adapterType;
+        this.allowNonMatch = allowNonMatch;
+
+        this.registrations.putAll(registrations);
+    }
+
+    /**
+     * Creates a strategy registry for the given adapter type. The registry will be configured to require matches.
+     *
+     * @param adapterType   the type of adapter retrieved from the registry
+     * @param registrations map of registrations (the contents of the map are copied)
+     */
+    public static <A> StrategyRegistry<A> newInstance(Class<A> adapterType,
+                                                      Map<Class, A> registrations)
+    {
+        return newInstance(adapterType, registrations, false);
+    }
+
+    /**
+     * Creates a strategy registry for the given adapter type.
+     *
+     * @param adapterType   the type of adapter retrieved from the registry
+     * @param registrations map of registrations (the contents of the map are copied)
+     * @param allowNonMatch if true, then the registry supports non-matches when retrieving an adapter
+     */
+    public static <A> StrategyRegistry<A> newInstance(
+            Class<A> adapterType,
+            Map<Class, A> registrations, boolean allowNonMatch)
+    {
+        return new StrategyRegistry<A>(adapterType, registrations, allowNonMatch);
+    }
+
+    public void clearCache()
+    {
+        cache.clear();
+        unmatched.clear();
+    }
+
+    public Class<A> getAdapterType()
+    {
+        return adapterType;
+    }
+
+    /**
+     * Gets an adapter for an object. Searches based on the value's class, unless the value is null, in which case, a
+     * search on class void is used.
+     *
+     * @param value for which an adapter is needed
+     * @return the adapter for the value or null if not found (and allowNonMatch is true)
+     * @throws IllegalArgumentException if no matching adapter may be found and allowNonMatch is false
+     */
+
+    public A getByInstance(Object value)
+    {
+        return get(value == null ? void.class : value.getClass());
+    }
+
+    /**
+     * Searches for an adapter corresponding to the given input type.
+     *
+     * @param type the type to search
+     * @return the adapter for the type or null if not found (and allowNonMatch is true)
+     * @throws IllegalArgumentException if no matching adapter may be found   and allowNonMatch is false
+     */
+    public A get(Class type)
+    {
+
+        A result = cache.get(type);
+
+        if (result != null) return result;
+
+        if (unmatched.containsKey(type)) return null;
+
+
+        result = findMatch(type);
+
+        // This may be null in the case that there is no match and we're allowing that to not
+        // be an error.  That's why we check via containsKey.
+
+        if (result != null)
+        {
+            cache.put(type, result);
+        } else
+        {
+            unmatched.put(type, true);
+        }
+
+        return result;
+    }
+
+    private A findMatch(Class type)
+    {
+        for (Class t : new InheritanceSearch(type))
+        {
+            A result = registrations.get(t);
+
+            if (result != null) return result;
+        }
+
+        if (allowNonMatch) return null;
+
+        // Report the error. These things really confused the hell out of people in Tap4, so we're
+        // going the extra mile on the exception message.
+
+        List<String> names = CollectionFactory.newList();
+        for (Class t : registrations.keySet())
+            names.add(t.getName());
+
+        throw new UnknownValueException(String.format("No adapter from type %s to type %s is available.", type.getName(), adapterType.getName()), null, null,
+                new AvailableValues("registered types", registrations));
+    }
+
+    /**
+     * Returns the registered types for which adapters are available.
+     */
+    public Collection<Class> getTypes()
+    {
+        return CollectionFactory.newList(registrations.keySet());
+    }
+
+    @Override
+    public String toString()
+    {
+        return String.format("StrategyRegistry[%s]", adapterType.getName());
+    }
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/StringToEnumCoercion.java b/commons/src/main/java/org/apache/tapestry5/commons/util/StringToEnumCoercion.java
new file mode 100644
index 0000000..c8f9a2d
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/StringToEnumCoercion.java
@@ -0,0 +1,86 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.Map;
+
+import org.apache.tapestry5.commons.services.Coercion;
+
+/**
+ * A {@link org.apache.tapestry5.commons.services.Coercion} for converting strings into an instance of a particular
+ * enumerated type. The {@link Enum#name() name} is used as the key to identify the enum instance, in a case-insensitive
+ * fashion.
+ *
+ * Moved from tapestry-core to tapestry-ioc in release 5.3, but kept in same package for compatibility.
+ * Moved tapestry-ioc to commons in release 5.4, but kept in same package for compatibility.
+ * 
+ * @param <T>
+ *            the type of enumeration
+ */
+public final class StringToEnumCoercion<T extends Enum> implements Coercion<String, T>
+{
+    private final Class<T> enumClass;
+
+    private final Map<String, T> stringToEnum = CollectionFactory.newCaseInsensitiveMap();
+
+    public StringToEnumCoercion(Class<T> enumClass)
+    {
+        this(enumClass, enumClass.getEnumConstants());
+    }
+
+    public StringToEnumCoercion(Class<T> enumClass, T... values)
+    {
+        this.enumClass = enumClass;
+
+        for (T value : values)
+            stringToEnum.put(value.name(), value);
+    }
+
+    @Override
+    public T coerce(String input)
+    {
+        if (CommonsUtils.isBlank(input))
+            return null;
+
+        T result = stringToEnum.get(input);
+
+        if (result == null)
+        {
+            String message = String.format("Input '%s' does not identify a value from enumerated type %s.", input,
+                    enumClass.getName());
+
+            throw new UnknownValueException(message, new AvailableValues(enumClass.getName() + " enum constants",
+                    stringToEnum));
+        }
+
+        return result;
+    }
+
+    /**
+     * Allows an alias value (alternate) string to reference a value.
+     * 
+     * @since 5.2.2
+     */
+    public StringToEnumCoercion<T> addAlias(String alias, T value)
+    {
+        stringToEnum.put(alias, value);
+
+        return this;
+    }
+
+    public static <T extends Enum> StringToEnumCoercion<T> create(Class<T> enumClass)
+    {
+        return new StringToEnumCoercion<T>(enumClass);
+    }
+
+}
diff --git a/commons/src/main/java/org/apache/tapestry5/commons/util/TimeInterval.java b/commons/src/main/java/org/apache/tapestry5/commons/util/TimeInterval.java
new file mode 100644
index 0000000..0ac5836
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/commons/util/TimeInterval.java
@@ -0,0 +1,192 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.commons.util;
+
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.tapestry5.commons.internal.util.InternalCommonsUtils;
+
+/**
+ * Used to represent a period of time, specifically as a configuration value. This is often used to specify timeouts.
+ *
+ * TimePeriods are parsed from strings.
+ *
+ * The string specifys a number of terms. The values of all the terms are summed together to form the total time period.
+ * Each term consists of a number followed by a unit. Units (from largest to smallest) are: <dl> <dt>y <dd>year <dt>d
+ * <dd>day <dt>h <dd>hour <dt>m <dd>minute <dt>s <dd>second <dt>ms <dd>millisecond </dl>   Example: "2 h 30 m". By
+ * convention, terms are specified largest to smallest.  A term without a unit is assumed to be milliseconds.  Units are
+ * case insensitive ("h" or "H" are treated the same).
+ */
+public class TimeInterval
+{
+    private static final Map<String, Long> UNITS = CollectionFactory.newCaseInsensitiveMap();
+
+    private static final long MILLISECOND = 1000l;
+
+    static
+    {
+        UNITS.put("ms", 1l);
+        UNITS.put("s", MILLISECOND);
+        UNITS.put("m", 60 * MILLISECOND);
+        UNITS.put("h", 60 * UNITS.get("m"));
+        UNITS.put("d", 24 * UNITS.get("h"));
+        UNITS.put("y", 365 * UNITS.get("d"));
+    }
+
+    /**
+     * The unit keys, sorted in descending order.
+     */
+    private static final String[] UNIT_KEYS =
+    { "y", "d", "h", "m", "s", "ms" };
+
+    private static final Pattern PATTERN = Pattern.compile("\\s*(\\d+)\\s*([a-z]*)", Pattern.CASE_INSENSITIVE);
+
+    private final long milliseconds;
+
+    /**
+     * Creates a TimeInterval for a string.
+     * 
+     * @param input
+     *            the string specifying the amount of time in the period
+     */
+    public TimeInterval(String input)
+    {
+        this(parseMilliseconds(input));
+    }
+
+    public TimeInterval(long milliseconds)
+    {
+        this.milliseconds = milliseconds;
+    }
+
+    public long milliseconds()
+    {
+        return milliseconds;
+    }
+
+    public long seconds()
+    {
+        return milliseconds / MILLISECOND;
+    }
+
+    /**
+     * Converts the milliseconds back into a string (compatible with {@link #TimeInterval(String)}).
+     * 
+     * @since 5.2.0
+     */
+    public String toDescription()
+    {
+        StringBuilder builder = new StringBuilder();
+
+        String sep = "";
+
+        long remainder = milliseconds;
+
+        for (String key : UNIT_KEYS)
+        {
+            if (remainder == 0)
+                break;
+
+            long value = UNITS.get(key);
+
+            long units = remainder / value;
+
+            if (units > 0)
+            {
+                builder.append(sep);
+                builder.append(units);
... 66465 lines suppressed ...


[tapestry-5] 02/03: TAP5-2627: putting all of beanmodel subproject into a single parent package

Posted by th...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit f70d1ab9cab93c6bc368dae7fb427963b5710993
Author: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
AuthorDate: Mon Jun 1 19:03:16 2020 -0300

    TAP5-2627: putting all of beanmodel subproject into a single parent package
---
 .travis.yml                                                            | 2 +-
 .../java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java    | 2 +-
 .../{ioc/internal => beanmodel}/services/PlasticProxyFactoryImpl.java  | 3 ++-
 .../tapestry5/internal/services/ComponentInstantiatorSourceImpl.java   | 1 -
 .../java/org/apache/tapestry5/jcache/internal/CacheLookupUtil.java     | 2 +-
 .../src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java        | 2 +-
 .../tapestry5/ioc/internal/services/AspectInterceptorBuilderImpl.java  | 1 +
 tapestry-ioc/src/test/groovy/ioc/specs/DefaultModuleDefImplSpec.groovy | 3 ++-
 tapestry-ioc/src/test/groovy/ioc/specs/OperationAdvisorSpec.groovy     | 2 +-
 tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy     | 2 +-
 10 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index cba068d..0e22388 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,7 @@
 language: java
 
 jdk:
-  - oraclejdk9
+  - openjdk11
   - openjdk8
 
 before_install:
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
index 208decb..031e236 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
@@ -15,6 +15,7 @@ import org.apache.tapestry5.beanmodel.internal.services.BeanModelSourceImpl;
 import org.apache.tapestry5.beanmodel.internal.services.PropertyAccessImpl;
 import org.apache.tapestry5.beanmodel.internal.services.PropertyConduitSourceImpl;
 import org.apache.tapestry5.beanmodel.services.BeanModelSource;
+import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.apache.tapestry5.internal.services.StringInterner;
 import org.apache.tapestry5.internal.services.StringInternerImpl;
@@ -23,7 +24,6 @@ import org.apache.tapestry5.ioc.Configuration;
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.internal.BasicDataTypeAnalyzers;
 import org.apache.tapestry5.ioc.internal.BasicTypeCoercions;
-import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.ioc.internal.services.TypeCoercerImpl;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.ioc.services.CoercionTuple;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PlasticProxyFactoryImpl.java
similarity index 98%
rename from beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PlasticProxyFactoryImpl.java
index c9c8c82..0e95f9e 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PlasticProxyFactoryImpl.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.ioc.internal.services;
+package org.apache.tapestry5.beanmodel.services;
 
 import org.apache.tapestry5.beanmodel.internal.services.PlasticClassListenerLogger;
 import org.apache.tapestry5.internal.plastic.PlasticInternalUtils;
@@ -20,6 +20,7 @@ import org.apache.tapestry5.internal.plastic.asm.Type;
 import org.apache.tapestry5.internal.plastic.asm.tree.*;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.ObjectCreator;
+import org.apache.tapestry5.ioc.internal.services.StringLocation;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
 import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
index 4e8f9b7..5114fed 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
@@ -26,7 +26,6 @@ import org.apache.tapestry5.ioc.Resource;
 import org.apache.tapestry5.ioc.annotations.PostInjection;
 import org.apache.tapestry5.ioc.annotations.Primary;
 import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
diff --git a/tapestry-ioc-jcache/src/main/java/org/apache/tapestry5/jcache/internal/CacheLookupUtil.java b/tapestry-ioc-jcache/src/main/java/org/apache/tapestry5/jcache/internal/CacheLookupUtil.java
index 81ffd0e..7e7ddae 100644
--- a/tapestry-ioc-jcache/src/main/java/org/apache/tapestry5/jcache/internal/CacheLookupUtil.java
+++ b/tapestry-ioc-jcache/src/main/java/org/apache/tapestry5/jcache/internal/CacheLookupUtil.java
@@ -22,8 +22,8 @@ import javax.cache.annotation.CacheKeyGenerator;
 import javax.cache.annotation.CacheResolverFactory;
 import javax.inject.Singleton;
 
+import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.ioc.ObjectLocator;
-import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.plastic.MethodInvocation;
 import org.jsr107.ri.annotations.AbstractCacheLookupUtil;
 import org.jsr107.ri.annotations.InternalCacheInvocationContext;
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java
index 9af07fa..53684a4 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java
@@ -12,12 +12,12 @@
 
 package org.apache.tapestry5.ioc;
 
+import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.ioc.annotations.ImportModule;
 import org.apache.tapestry5.ioc.annotations.SubModule;
 import org.apache.tapestry5.ioc.def.ModuleDef;
 import org.apache.tapestry5.ioc.def.ModuleDef2;
 import org.apache.tapestry5.ioc.internal.*;
-import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.internal.util.OneShotLock;
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectInterceptorBuilderImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectInterceptorBuilderImpl.java
index 95fb1f6..27f1626 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectInterceptorBuilderImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectInterceptorBuilderImpl.java
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.ioc.internal.services;
 
+import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.ioc.AnnotationAccess;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/DefaultModuleDefImplSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/DefaultModuleDefImplSpec.groovy
index e46f469..93f1eed 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/DefaultModuleDefImplSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/DefaultModuleDefImplSpec.groovy
@@ -4,7 +4,6 @@ import org.apache.tapestry5.internal.plastic.PlasticClassLoader
 import org.apache.tapestry5.internal.plastic.PlasticInternalUtils
 import org.apache.tapestry5.internal.plastic.asm.ClassWriter
 import org.apache.tapestry5.ioc.def.ServiceDef3
-import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl
 import org.apache.tapestry5.ioc.services.PlasticProxyFactory
 import org.slf4j.Logger
 
@@ -18,6 +17,8 @@ import org.apache.tapestry5.ioc.internal.*
 
 import static org.apache.tapestry5.internal.plastic.asm.Opcodes.*
 
+import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl
+
 class DefaultModuleDefImplSpec extends Specification {
 
   @Shared
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/OperationAdvisorSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/OperationAdvisorSpec.groovy
index 3f2ef1b..65b740a 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/OperationAdvisorSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/OperationAdvisorSpec.groovy
@@ -1,10 +1,10 @@
 package ioc.specs
 
+import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl
 import org.apache.tapestry5.ioc.OperationTracker
 import org.apache.tapestry5.ioc.internal.DefaultModuleDefImpl
 import org.apache.tapestry5.ioc.internal.LoggerSourceImpl
 import org.apache.tapestry5.ioc.internal.RegistryImpl
-import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl
 import org.apache.tapestry5.ioc.modules.TapestryIOCModule
 import org.apache.tapestry5.ioc.services.OperationTrackedModule
 import org.apache.tapestry5.ioc.services.OperationTrackedService
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy
index ba8c036..782da08 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/OperationTrackerSpec.groovy
@@ -1,12 +1,12 @@
 package ioc.specs
 
+import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl
 import org.apache.tapestry5.ioc.OperationTracker
 import org.apache.tapestry5.ioc.internal.DefaultModuleDefImpl
 import org.apache.tapestry5.ioc.internal.LoggerSourceImpl
 import org.apache.tapestry5.ioc.internal.OperationException;
 import org.apache.tapestry5.ioc.internal.OperationTrackerImpl;
 import org.apache.tapestry5.ioc.internal.RegistryImpl
-import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl
 import org.apache.tapestry5.ioc.modules.TapestryIOCModule
 import org.apache.tapestry5.ioc.services.OperationTrackedModule
 import org.apache.tapestry5.ioc.services.OperationTrackedService


[tapestry-5] 01/03: TAP5-2627: putting all of beanmodel subproject into a single parent package

Posted by th...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit f334b6aec8ef2c9afd2a0c4b2bcb6a9bfa78bb4a
Author: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
AuthorDate: Mon Jun 1 18:44:08 2020 -0300

    TAP5-2627: putting all of beanmodel subproject into a single parent package
---
 5.7_RELEASE_NOTES.md                               | 13 +++++
 beanmodel/build.gradle                             |  1 +
 .../{beaneditor => beanmodel}/BeanModel.java       | 17 ++++---
 .../BeanModelSourceBuilder.java                    | 12 ++---
 .../beaneditor => beanmodel}/BeanModelUtils.java   | 14 ++++--
 .../tapestry5/{ => beanmodel}/PropertyConduit.java |  2 +-
 .../{ => beanmodel}/PropertyConduit2.java          |  4 +-
 .../{beaneditor => beanmodel}/PropertyModel.java   |  7 ++-
 .../internal/InternalPropertyConduit.java          |  6 +--
 .../{ => beanmodel}/internal/antlr/BaseLexer.java  |  2 +-
 .../{ => beanmodel}/internal/antlr/BaseParser.java |  2 +-
 .../internal/antlr/package-info.java               |  2 +-
 .../internal/beanmodel}/BeanModelImpl.java         | 12 ++---
 .../internal/beanmodel}/PropertyModelImpl.java     |  8 +--
 .../internal/services/BeanModelSourceImpl.java     | 12 ++---
 .../services/ClassPropertyAdapterImpl.java         |  3 +-
 .../services/CoercingPropertyConduitWrapper.java   |  6 +--
 .../internal/services/Invariant.java               |  4 +-
 .../internal/services/LiteralPropertyConduit.java  |  4 +-
 .../services/PlasticClassListenerLogger.java       |  2 +-
 .../internal/services/PropertyAccessImpl.java      |  2 +-
 .../internal/services/PropertyAdapterImpl.java     |  5 +-
 .../internal/services/PropertyConduitDelegate.java |  8 +--
 .../services/PropertyConduitSourceImpl.java        | 11 ++--
 .../services/PropertyExpressionException.java      |  2 +-
 .../{ => beanmodel}/services/BeanModelSource.java  |  8 +--
 .../services/PropertyConduitSource.java            |  6 +--
 .../internal/services/PlasticProxyFactoryImpl.java |  1 +
 .../corelib/base/AbstractPropertyOutput.java       |  3 +-
 .../tapestry5/corelib/components/AjaxFormLoop.java |  8 ++-
 .../tapestry5/corelib/components/BeanDisplay.java  | 14 +++---
 .../tapestry5/corelib/components/BeanEditForm.java | 16 +++---
 .../tapestry5/corelib/components/BeanEditor.java   | 12 ++---
 .../apache/tapestry5/corelib/components/Form.java  |  9 +++-
 .../apache/tapestry5/corelib/components/Grid.java  | 18 +++----
 .../tapestry5/corelib/components/GridColumns.java  |  2 +-
 .../tapestry5/corelib/components/GridRows.java     |  2 +-
 .../corelib/components/PropertyDisplay.java        |  2 +-
 .../corelib/components/PropertyEditor.java         | 14 ++++--
 .../tapestry5/corelib/components/Select.java       |  7 ++-
 .../apache/tapestry5/corelib/components/Zone.java  |  7 ++-
 .../tapestry5/corelib/pages/ExceptionReport.java   |  8 ++-
 .../tapestry5/corelib/pages/PageCatalog.java       |  4 +-
 .../corelib/pages/PropertyEditBlocks.java          |  4 +-
 .../tapestry5/corelib/pages/ServiceStatus.java     |  4 +-
 .../org/apache/tapestry5/grid/GridDataSource.java  |  2 +-
 .../java/org/apache/tapestry5/grid/GridModel.java  |  2 +-
 .../org/apache/tapestry5/grid/SortConstraint.java  |  4 +-
 .../tapestry5/internal/TapestryInternalUtils.java  |  3 ++
 .../tapestry5/internal/bindings/PropBinding.java   |  8 +--
 .../internal/bindings/PropBindingFactory.java      |  4 +-
 .../internal/grid/CollectionGridDataSource.java    |  2 +-
 .../internal/pageload/PageLoaderImpl.java          | 18 ++++++-
 .../tapestry5/internal/services/AjaxFilter.java    |  9 +++-
 .../internal/services/AssetDispatcher.java         |  8 ++-
 .../internal/services/CheckForUpdatesFilter.java   |  7 ++-
 .../services/ClientPersistentFieldStorageImpl.java |  7 ++-
 .../services/ClientPersistentFieldStrategy.java    |  7 ++-
 .../services/ComponentEventDispatcher.java         |  8 ++-
 .../services/ComponentEventLinkEncoderImpl.java    | 13 ++++-
 .../services/ComponentEventRequestHandlerImpl.java |  8 ++-
 .../services/ComponentInstantiatorSourceImpl.java  |  7 ++-
 .../ComponentRequestHandlerTerminator.java         | 10 +++-
 .../services/DefaultRequestExceptionHandler.java   |  7 ++-
 .../services/DeferredResponseRenderer.java         |  7 ++-
 .../internal/services/PageRenderDispatcher.java    |  8 ++-
 .../services/PageRenderRequestHandlerImpl.java     |  7 ++-
 .../ProductionModeUnknownComponentFilter.java      |  7 ++-
 .../internal/services/RequestErrorFilter.java      |  9 +++-
 .../internal/services/RequestOperationTracker.java |  7 ++-
 .../services/RequestSecurityManagerImpl.java       |  8 ++-
 .../internal/services/RootPathDispatcher.java      |  9 +++-
 .../services/StreamPageContentResultProcessor.java |  9 +++-
 .../internal/services/ValueEncoderSourceImpl.java  |  6 ++-
 .../org/apache/tapestry5/modules/AssetsModule.java | 26 +++++++++-
 .../apache/tapestry5/modules/InternalModule.java   | 58 +++++++++++++++++++++-
 .../apache/tapestry5/modules/TapestryModule.java   | 12 ++++-
 .../apache/tapestry5/test/TapestryTestCase.java    | 40 +++++++++++++--
 .../corelib/base/AbstractPropertyOutputTest.java   |  4 +-
 .../corelib/components/BeanEditorTest.java         |  4 +-
 .../corelib/components/PropertyEditorTest.java     |  2 +-
 .../integration/app1/base/GenericEditor.java       |  4 +-
 .../app1/pages/AddedGridColumnsDemo.java           |  4 +-
 .../integration/app1/pages/EmptyGrid.java          |  6 +--
 .../integration/app1/pages/GridInLoopDemo.java     |  4 +-
 .../app1/pages/SimpleTrackGridDemo.java            |  4 +-
 .../org/apache/tapestry5/internal/DataBean.java    |  2 +-
 .../internal/TapestryInternalUtilsTest.java        |  2 +
 .../internal/beaneditor/BeanModelUtilsTest.java    |  5 +-
 .../ValidateAnnotationConstraintGeneratorTest.java |  2 +-
 .../grid/CollectionGridDataSourceTest.java         |  6 +--
 .../services/AbstractBeanModelSourceImplTest.java  | 11 ++--
 .../services/ApplicationStateManagerImplTest.java  |  7 ++-
 .../internal/services/BeanBlockSourceImplTest.java |  7 ++-
 .../services/BeanModelSourceBuilderTest.java       |  4 +-
 .../internal/services/BeanModelSourceImplTest.java |  2 +-
 .../services/ComponentEventDispatcherTest.java     | 12 ++++-
 .../ComponentEventLinkEncoderImplTest.java         | 11 +++-
 .../internal/services/LinkSourceImplTest.java      |  8 ++-
 .../services/PropertyConduitSourceImplTest.java    |  9 ++--
 .../services/RequestSecurityManagerImplTest.java   |  7 ++-
 .../internal/services/StaticFilesFilterTest.java   |  7 ++-
 .../internal/test/InternalBaseTestCase.java        | 23 ++++++++-
 .../tapestry5/ioc/modules/TapestryIOCModule.java   |  1 +
 .../groovy/ioc/specs/ExceptionUtilsSpec.groovy     |  2 +-
 .../groovy/ioc/specs/PropertyAccessImplSpec.groovy |  1 +
 .../tapestry5/kaptcha/modules/KaptchaModule.java   |  8 ++-
 .../internal/services/UploadExceptionFilter.java   |  8 ++-
 108 files changed, 618 insertions(+), 216 deletions(-)

diff --git a/5.7_RELEASE_NOTES.md b/5.7_RELEASE_NOTES.md
new file mode 100644
index 0000000..024a6ed
--- /dev/null
+++ b/5.7_RELEASE_NOTES.md
@@ -0,0 +1,13 @@
+Scratch pad for changes destined for the 5.7 release notes page.
+
+# Breaking Changes:
+
+## Non-Internal Classes Moved to Different Packages
+
+This was done to avoid split packages (i.e. packages which appear in more than one JAR) 
+in Apache Tapestry and making it easier to be used in projects using Java 9 modules (JPMS).
+
+# Possibly Breaking Changes:
+
+# Non-Breaking Changes:
+
diff --git a/beanmodel/build.gradle b/beanmodel/build.gradle
index ca0d1cf..c63d5b6 100644
--- a/beanmodel/build.gradle
+++ b/beanmodel/build.gradle
@@ -23,6 +23,7 @@ dependencies {
     }
 
     testCompile "org.testng:testng:${versions.testng}", { transitive = false }
+    testCompile "org.easymock:easymock:${versions.easymock}"
 }
 
 clean.delete generateGrammarSource.outputDirectory
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModel.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModel.java
similarity index 92%
rename from beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModel.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModel.java
index cf47276..fdb60ac 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModel.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModel.java
@@ -10,23 +10,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.beaneditor;
-
-import org.apache.tapestry5.PropertyConduit;
+package org.apache.tapestry5.beanmodel;
 
 import java.util.List;
 
+import org.apache.tapestry5.beaneditor.DataType;
+import org.apache.tapestry5.beaneditor.RelativePosition;
+
 /**
  * Provides the information necessary to build a user interface to view, create or edit an instance of a particular
  * type.
  *
  * BeanModels are not thread-safe, they are also not serializable.
  *
- * Here, and in {@link org.apache.tapestry5.beaneditor.PropertyModel}, the term "propertyName" is used for simplicitly.
- * However, a full {@linkplain org.apache.tapestry5.services.PropertyConduitSource#create(Class, String) property
+ * Here, and in {@link org.apache.tapestry5.beanmodel.PropertyModel}, the term "propertyName" is used for simplicitly.
+ * However, a full {@linkplain org.apache.tapestry5.beanmodel.services.PropertyConduitSource#create(Class, String) property
  * expression} may be utilized when {@linkplain #add(String) adding new properties to an existing BeanModel}.
  *
- * @see org.apache.tapestry5.services.BeanModelSource
+ * @see org.apache.tapestry5.beanmodel.services.BeanModelSource
  */
 public interface BeanModel<T>
 {
@@ -61,7 +62,7 @@ public interface BeanModel<T>
     /**
      * Returns the identified model.  Property ids are a stripped version of the property name. Case is ignored.
      *
-     * @param propertyId matched caselessly against {@link org.apache.tapestry5.beaneditor.PropertyModel#getId()}
+     * @param propertyId matched caselessly against {@link org.apache.tapestry5.beanmodel.PropertyModel#getId()}
      * @throws RuntimeException if the bean editor model does not have a property model with the indicated id
      */
     PropertyModel getById(String propertyId);
@@ -70,7 +71,7 @@ public interface BeanModel<T>
      * Adds a new property to the model, returning its mutable model for further refinement. The property is added to
      * the <em>end</em> of the list of properties. The property must be real (but may have been excluded if there was no
      * {@linkplain org.apache.tapestry5.beaneditor.DataType datatype} associated with the property). To add a synthetic
-     * property, use {@link #add(String, org.apache.tapestry5.PropertyConduit)}
+     * property, use {@link #add(String, org.apache.tapestry5.beanmodel.PropertyConduit)}
      *
      * @param propertyName name of property to add
      * @return the new property model (for further configuration)
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
similarity index 95%
rename from beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
index 20a23cb..208decb 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelSourceBuilder.java
@@ -9,10 +9,13 @@
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
-package org.apache.tapestry5.beaneditor;
+package org.apache.tapestry5.beanmodel;
 
-import org.apache.tapestry5.internal.services.BeanModelSourceImpl;
-import org.apache.tapestry5.internal.services.PropertyConduitSourceImpl;
+import org.apache.tapestry5.beanmodel.internal.services.BeanModelSourceImpl;
+import org.apache.tapestry5.beanmodel.internal.services.PropertyAccessImpl;
+import org.apache.tapestry5.beanmodel.internal.services.PropertyConduitSourceImpl;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.apache.tapestry5.internal.services.StringInterner;
 import org.apache.tapestry5.internal.services.StringInternerImpl;
 import org.apache.tapestry5.ioc.AnnotationProvider;
@@ -21,16 +24,13 @@ import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.internal.BasicDataTypeAnalyzers;
 import org.apache.tapestry5.ioc.internal.BasicTypeCoercions;
 import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl;
-import org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl;
 import org.apache.tapestry5.ioc.internal.services.TypeCoercerImpl;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.ioc.services.CoercionTuple;
 import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.apache.tapestry5.ioc.services.PropertyAccess;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.apache.tapestry5.services.DataTypeAnalyzer;
-import org.apache.tapestry5.services.PropertyConduitSource;
 import org.slf4j.LoggerFactory;
 
 import java.lang.annotation.Annotation;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelUtils.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelUtils.java
similarity index 91%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelUtils.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelUtils.java
index 207fb97..41d8866 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelUtils.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/BeanModelUtils.java
@@ -12,9 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.beaneditor;
+package org.apache.tapestry5.beanmodel;
 
-import org.apache.tapestry5.beaneditor.BeanModel;
 import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
 
 /**
@@ -26,7 +25,7 @@ public final class BeanModelUtils
     final private static String[] EMPTY_STRING_ARRAY = new String[0];
 
     /**
-     * Performs standard set of modifications to a {@link org.apache.tapestry5.beaneditor.BeanModel}
+     * Performs standard set of modifications to a {@link org.apache.tapestry5.beanmodel.BeanModel}
      * . First new
      * properties may be added, then properties removed, then properties reordered.
      *
@@ -62,7 +61,7 @@ public final class BeanModelUtils
 
     /**
      * Adds empty properties to the bean model. New properties are added with a <em>null</em>
-     * {@link org.apache.tapestry5.PropertyConduit}. `
+     * {@link org.apache.tapestry5.beanmodel.PropertyConduit}. `
      *
      * @param model         to be modified
      * @param propertyNames comma-separated list of property names
@@ -108,7 +107,12 @@ public final class BeanModelUtils
         model.reorder(split(propertyNames));
     }
     
-    static String[] split(String propertyNames)
+    /**
+     * Don't use this method, which is only public for testing purposes.
+     * @param propertyNames
+     * @return a String array
+     */
+    public static String[] split(String propertyNames)
     {
         String trimmed = propertyNames.trim();
 
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit.java
similarity index 97%
rename from beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit.java
index 3dbb0c0..c8be9ef 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5;
+package org.apache.tapestry5.beanmodel;
 
 import org.apache.tapestry5.ioc.AnnotationProvider;
 
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit2.java
similarity index 91%
rename from beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit2.java
index 1577a3d..36fbf8d 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyConduit2.java
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5;
+package org.apache.tapestry5.beanmodel;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 
-import org.apache.tapestry5.services.PropertyConduitSource;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 
 
 /**
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/PropertyModel.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyModel.java
similarity index 91%
rename from beanmodel/src/main/java/org/apache/tapestry5/beaneditor/PropertyModel.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyModel.java
index a0c5467..51d9ae3 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/PropertyModel.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/PropertyModel.java
@@ -10,17 +10,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.beaneditor;
+package org.apache.tapestry5.beanmodel;
 
-import org.apache.tapestry5.PropertyConduit;
 import org.apache.tapestry5.ioc.AnnotationProvider;
 
 /**
- * Part of a {@link org.apache.tapestry5.beaneditor.BeanModel} that defines the attributes of a single property of a
+ * Part of a {@link org.apache.tapestry5.beanmodel.BeanModel} that defines the attributes of a single property of a
  * bean.
  *
  *
- * A PropertyModel is also an {@link AnnotationProvider}, as long as the {@link org.apache.tapestry5.PropertyConduit} is
+ * A PropertyModel is also an {@link AnnotationProvider}, as long as the {@link org.apache.tapestry5.beanmodel.PropertyConduit} is
  * non-null.  When there is no property conduit, then {@link org.apache.tapestry5.ioc.AnnotationProvider#getAnnotation(Class)}
  * will return null.
  */
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/InternalPropertyConduit.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/InternalPropertyConduit.java
similarity index 82%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/InternalPropertyConduit.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/InternalPropertyConduit.java
index 315b372..c82963a 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/InternalPropertyConduit.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/InternalPropertyConduit.java
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal;
+package org.apache.tapestry5.beanmodel.internal;
 
-import org.apache.tapestry5.PropertyConduit2;
+import org.apache.tapestry5.beanmodel.PropertyConduit2;
 
 
 /**
- * Extension to {@link org.apache.tapestry5.PropertyConduit2} that adds a method to determine the name of the property.
+ * Extension to {@link org.apache.tapestry5.beanmodel.PropertyConduit2} that adds a method to determine the name of the property.
  * 
  * @since 5.2.0
  *
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/BaseLexer.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/BaseLexer.java
similarity index 96%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/BaseLexer.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/BaseLexer.java
index 442240d..576a1bc 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/BaseLexer.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/BaseLexer.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.antlr;
+package org.apache.tapestry5.beanmodel.internal.antlr;
 
 import org.antlr.runtime.CharStream;
 import org.antlr.runtime.Lexer;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/BaseParser.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/BaseParser.java
similarity index 95%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/BaseParser.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/BaseParser.java
index 212b782..63cf100 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/BaseParser.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/BaseParser.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.antlr;
+package org.apache.tapestry5.beanmodel.internal.antlr;
 
 import org.antlr.runtime.Parser;
 import org.antlr.runtime.TokenStream;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/package-info.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/package-info.java
similarity index 92%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/package-info.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/package-info.java
index 55be313..7a1948f 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/antlr/package-info.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/antlr/package-info.java
@@ -15,4 +15,4 @@
 /**
  * [INTERNAL USE ONLY] support classes related to Antlr; API subject to change
  */
-package org.apache.tapestry5.internal.antlr;
+package org.apache.tapestry5.beanmodel.internal.antlr;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/BeanModelImpl.java
similarity index 95%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelImpl.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/BeanModelImpl.java
index 4d2245d..bf51280 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/BeanModelImpl.java
@@ -12,13 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.beaneditor;
+package org.apache.tapestry5.beanmodel.internal.beanmodel;
 
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
 import org.apache.tapestry5.beaneditor.RelativePosition;
-import org.apache.tapestry5.internal.services.CoercingPropertyConduitWrapper;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyModel;
+import org.apache.tapestry5.beanmodel.internal.services.CoercingPropertyConduitWrapper;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
@@ -27,7 +28,6 @@ import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.ioc.util.AvailableValues;
 import org.apache.tapestry5.ioc.util.UnknownValueException;
 import org.apache.tapestry5.plastic.PlasticUtils;
-import org.apache.tapestry5.services.PropertyConduitSource;
 
 import java.util.List;
 import java.util.Map;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/PropertyModelImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/PropertyModelImpl.java
similarity index 94%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/PropertyModelImpl.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/PropertyModelImpl.java
index 24d0b2d..6707d4c 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/beaneditor/PropertyModelImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/beanmodel/PropertyModelImpl.java
@@ -12,14 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.beaneditor;
+package org.apache.tapestry5.beanmodel.internal.beanmodel;
 
 import java.lang.annotation.Annotation;
 
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
 import org.apache.tapestry5.beaneditor.Sortable;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
 import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/BeanModelSourceImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/BeanModelSourceImpl.java
similarity index 94%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/services/BeanModelSourceImpl.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/BeanModelSourceImpl.java
index bb20de0..befb8ff 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/BeanModelSourceImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/BeanModelSourceImpl.java
@@ -12,23 +12,23 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
-import org.apache.tapestry5.beaneditor.BeanModel;
 import org.apache.tapestry5.beaneditor.NonVisual;
 import org.apache.tapestry5.beaneditor.ReorderProperties;
-import org.apache.tapestry5.internal.beaneditor.BeanModelImpl;
-import org.apache.tapestry5.internal.beaneditor.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.internal.beanmodel.BeanModelImpl;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.annotations.Primary;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.services.*;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.apache.tapestry5.services.ComponentLayer;
 import org.apache.tapestry5.services.DataTypeAnalyzer;
-import org.apache.tapestry5.services.PropertyConduitSource;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/ClassPropertyAdapterImpl.java
similarity index 98%
rename from beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/ClassPropertyAdapterImpl.java
index 8164ec7..c2005f1 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/ClassPropertyAdapterImpl.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.ioc.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
 
@@ -23,6 +23,7 @@ import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.tapestry5.ioc.internal.services.ServiceMessages;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.GenericsUtils;
 import org.apache.tapestry5.ioc.internal.util.InternalCommonsUtils;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/CoercingPropertyConduitWrapper.java
similarity index 91%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/CoercingPropertyConduitWrapper.java
index 2127696..7b371a4 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/CoercingPropertyConduitWrapper.java
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.PropertyConduit2;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit2;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 
 public class CoercingPropertyConduitWrapper implements PropertyConduit2
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/Invariant.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/Invariant.java
similarity index 88%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/services/Invariant.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/Invariant.java
index 924b570..bc52c5b 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/Invariant.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/Invariant.java
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import java.lang.annotation.*;
 
 /**
- * Special annotation that is applied to literal {@link org.apache.tapestry5.PropertyConduit}s, to inform {@link
+ * Special annotation that is applied to literal {@link org.apache.tapestry5.beanmodel.PropertyConduit}s, to inform {@link
  * org.apache.tapestry5.internal.bindings.PropBinding} that the value is, in fact, invariant.
  */
 @Target({ElementType.PARAMETER, ElementType.FIELD})
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/LiteralPropertyConduit.java
similarity index 94%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/LiteralPropertyConduit.java
index e8cd58f..eca1ced 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/LiteralPropertyConduit.java
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
-import org.apache.tapestry5.internal.InternalPropertyConduit;
+import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
 import org.apache.tapestry5.ioc.AnnotationProvider;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PlasticClassListenerLogger.java
similarity index 96%
rename from beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PlasticClassListenerLogger.java
index 8ebdede..a6c7262 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PlasticClassListenerLogger.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.ioc.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import org.apache.tapestry5.plastic.ClassType;
 import org.apache.tapestry5.plastic.PlasticClassEvent;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAccessImpl.java
similarity index 99%
rename from beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAccessImpl.java
index e6cd3e3..a2838c6 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAccessImpl.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.ioc.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import java.beans.BeanInfo;
 import java.beans.IntrospectionException;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAdapterImpl.java
similarity index 96%
rename from beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAdapterImpl.java
index 97685ef..9ee932a 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAdapterImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyAdapterImpl.java
@@ -12,9 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.ioc.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import org.apache.tapestry5.ioc.AnnotationProvider;
+import org.apache.tapestry5.ioc.internal.services.AccessableObjectAnnotationProvider;
+import org.apache.tapestry5.ioc.internal.services.AnnotationProviderChain;
+import org.apache.tapestry5.ioc.internal.services.ServiceMessages;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.services.ClassPropertyAdapter;
 import org.apache.tapestry5.ioc.services.PropertyAdapter;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitDelegate.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitDelegate.java
similarity index 82%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitDelegate.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitDelegate.java
index 3849103..780cd59 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitDelegate.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitDelegate.java
@@ -12,18 +12,18 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import java.lang.annotation.Annotation;
 
-import org.apache.tapestry5.internal.InternalPropertyConduit;
+import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
 import org.apache.tapestry5.internal.util.IntegerRange;
 import org.apache.tapestry5.ioc.AnnotationProvider;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 
 /**
- * Companion class for {@link org.apache.tapestry5.PropertyConduit} instances created by the
- * {@link org.apache.tapestry5.services.PropertyConduitSource}.
+ * Companion class for {@link org.apache.tapestry5.beanmodel.PropertyConduit} instances created by the
+ * {@link org.apache.tapestry5.beanmodel.services.PropertyConduitSource}.
  */
 @SuppressWarnings("all")
 public class PropertyConduitDelegate
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
similarity index 99%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
index 58820db..292d430 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
@@ -12,16 +12,18 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 import org.antlr.runtime.ANTLRInputStream;
 import org.antlr.runtime.CommonTokenStream;
 import org.antlr.runtime.tree.Tree;
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.PropertyConduit2;
-import org.apache.tapestry5.internal.InternalPropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit2;
+import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.apache.tapestry5.internal.antlr.PropertyExpressionLexer;
 import org.apache.tapestry5.internal.antlr.PropertyExpressionParser;
+import org.apache.tapestry5.internal.services.StringInterner;
 import org.apache.tapestry5.internal.util.IntegerRange;
 import org.apache.tapestry5.internal.util.MultiKey;
 import org.apache.tapestry5.ioc.AnnotationProvider;
@@ -39,7 +41,6 @@ import org.apache.tapestry5.plastic.*;
 import org.apache.tapestry5.services.ComponentClasses;
 import org.apache.tapestry5.services.ComponentLayer;
 import org.apache.tapestry5.services.InvalidationEventHub;
-import org.apache.tapestry5.services.PropertyConduitSource;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyExpressionException.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyExpressionException.java
similarity index 95%
rename from beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyExpressionException.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyExpressionException.java
index 765c0bb..fce4044 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyExpressionException.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyExpressionException.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.beanmodel.internal.services;
 
 /**
  * Exception thrown when there is a problem parsing a property expression using the ANTLR property expression grammar.
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/services/BeanModelSource.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/BeanModelSource.java
similarity index 93%
rename from beanmodel/src/main/java/org/apache/tapestry5/services/BeanModelSource.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/BeanModelSource.java
index b98fa60..1df5bb4 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/services/BeanModelSource.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/BeanModelSource.java
@@ -10,19 +10,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.beanmodel.services;
 
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
 import org.apache.tapestry5.ioc.Messages;
 
 /**
- * Used by a component to create a default {@link org.apache.tapestry5.beaneditor.BeanModel} for a particular bean
+ * Used by a component to create a default {@link org.apache.tapestry5.beanmodel.BeanModel} for a particular bean
  * class. Also provides support to the model by generating validation information for individual fields.
  *
  * BeanModels are the basis for the {@link org.apache.tapestry5.corelib.components.BeanEditor} and {@link
  * org.apache.tapestry5.corelib.components.Grid} comopnents.
  *
- * @see org.apache.tapestry5.services.PropertyConduitSource
+ * @see org.apache.tapestry5.beanmodel.services.PropertyConduitSource
  */
 public interface BeanModelSource
 {
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/services/PropertyConduitSource.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PropertyConduitSource.java
similarity index 89%
rename from beanmodel/src/main/java/org/apache/tapestry5/services/PropertyConduitSource.java
rename to beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PropertyConduitSource.java
index 83d8d33..3f10792 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/services/PropertyConduitSource.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/services/PropertyConduitSource.java
@@ -10,12 +10,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.beanmodel.services;
 
-import org.apache.tapestry5.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
 
 /**
- * A source for {@link org.apache.tapestry5.PropertyConduit}s, which can be thought of as a compiled property path
+ * A source for {@link org.apache.tapestry5.beanmodel.PropertyConduit}s, which can be thought of as a compiled property path
  * expression. PropertyConduits are the basis of the "prop:" binding factory, thus this service defines the expression
  * format used by the {@link org.apache.tapestry5.internal.bindings.PropBindingFactory}.
  */
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
index f1b3f67..c9c8c82 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.ioc.internal.services;
 
+import org.apache.tapestry5.beanmodel.internal.services.PlasticClassListenerLogger;
 import org.apache.tapestry5.internal.plastic.PlasticInternalUtils;
 import org.apache.tapestry5.internal.plastic.asm.Type;
 import org.apache.tapestry5.internal.plastic.asm.tree.*;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractPropertyOutput.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractPropertyOutput.java
index e24f025..d8033bd 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractPropertyOutput.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractPropertyOutput.java
@@ -14,7 +14,8 @@ package org.apache.tapestry5.corelib.base;
 
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.Parameter;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/AjaxFormLoop.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/AjaxFormLoop.java
index c87c9e1..748a2a4 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/AjaxFormLoop.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/AjaxFormLoop.java
@@ -14,13 +14,19 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.corelib.internal.AjaxFormLoopContext;
 import org.apache.tapestry5.dom.Element;
 import org.apache.tapestry5.internal.services.RequestConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.json.JSONObject;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentDefaultProvider;
+import org.apache.tapestry5.services.Environment;
+import org.apache.tapestry5.services.FormSupport;
+import org.apache.tapestry5.services.Heartbeat;
+import org.apache.tapestry5.services.PartialMarkupRenderer;
+import org.apache.tapestry5.services.PartialMarkupRendererFilter;
 import org.apache.tapestry5.services.ajax.AjaxResponseRenderer;
 import org.apache.tapestry5.services.compatibility.DeprecationWarning;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanDisplay.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanDisplay.java
index 50e088f..6e01fab 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanDisplay.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanDisplay.java
@@ -18,12 +18,12 @@ import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
-import org.apache.tapestry5.internal.beaneditor.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.PropertyModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.services.BeanModelSource;
 
 /**
  * A component that displays the properties of a bean (or POJO, or any object with properties) as a
@@ -77,7 +77,7 @@ public class BeanDisplay
     private BeanModel model;
     /**
      * A comma-separated list of property names to be retained from the
-     * {@link org.apache.tapestry5.beaneditor.BeanModel} (only used
+     * {@link org.apache.tapestry5.beanmodel.BeanModel} (only used
      * when a default model is created automatically).
      * Only these properties will be retained, and the properties will also be reordered. The names are
      * case-insensitive.
@@ -86,7 +86,7 @@ public class BeanDisplay
     private String include;
 
     /**
-     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry5.beaneditor.BeanModel}
+     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry5.beanmodel.BeanModel}
      * (only used
      * when a default model is created automatically).
      * The names are case-insensitive.
@@ -104,7 +104,7 @@ public class BeanDisplay
     private String reorder;
 
     /**
-     * A comma-separated list of property names to be added to the {@link org.apache.tapestry5.beaneditor.BeanModel}
+     * A comma-separated list of property names to be added to the {@link org.apache.tapestry5.beanmodel.BeanModel}
      * (only used
      * when a default model is created automatically).
      */
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditForm.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditForm.java
index 6f72a93..0f83040 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditForm.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditForm.java
@@ -14,10 +14,10 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.internal.beaneditor.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.BeanModelSource;
 
 /**
  * A component that creates an entire form for editing the properties of a particular bean (or POJO, or any object
@@ -35,8 +35,8 @@ import org.apache.tapestry5.services.BeanModelSource;
  * events of a Form.
  *
  * @tapestrydoc
- * @see org.apache.tapestry5.beaneditor.BeanModel
- * @see org.apache.tapestry5.services.BeanModelSource
+ * @see org.apache.tapestry5.beanmodel.BeanModel
+ * @see org.apache.tapestry5.beanmodel.services.BeanModelSource
  * @see org.apache.tapestry5.corelib.components.PropertyEditor
  * @see org.apache.tapestry5.beaneditor.DataType
  * @see Form
@@ -67,7 +67,7 @@ public class BeanEditForm implements ClientElement, FormValidationControl
 
     /**
      * A comma-separated list of property names to be retained from the
-     * {@link org.apache.tapestry5.beaneditor.BeanModel} (only used
+     * {@link org.apache.tapestry5.beanmodel.BeanModel} (only used
      * when a default model is created automatically).
      * Only these properties will be retained, and the properties will also be reordered. The names are
      * case-insensitive.
@@ -76,7 +76,7 @@ public class BeanEditForm implements ClientElement, FormValidationControl
     private String include;
 
     /**
-     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry5.beaneditor.BeanModel}
+     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry5.beanmodel.BeanModel}
      * (only used
      * when a default model is created automatically).
      * The names are case-insensitive.
@@ -94,7 +94,7 @@ public class BeanEditForm implements ClientElement, FormValidationControl
     private String reorder;
 
     /**
-     * A comma-separated list of property names to be added to the {@link org.apache.tapestry5.beaneditor.BeanModel}
+     * A comma-separated list of property names to be added to the {@link org.apache.tapestry5.beanmodel.BeanModel}
      * (only used
      * when a default model is created automatically).
      */
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java
index 2e29d10..185afd5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/BeanEditor.java
@@ -20,16 +20,16 @@ import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.internal.BeanEditContextImpl;
 import org.apache.tapestry5.internal.BeanValidationContext;
 import org.apache.tapestry5.internal.BeanValidationContextImpl;
-import org.apache.tapestry5.internal.beaneditor.BeanModelUtils;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.plastic.PlasticUtils;
 import org.apache.tapestry5.services.BeanEditContext;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.apache.tapestry5.services.Environment;
 import org.apache.tapestry5.services.FormSupport;
 
@@ -89,7 +89,7 @@ public class BeanEditor
 
     /**
      * A comma-separated list of property names to be retained from the
-     * {@link org.apache.tapestry5.beaneditor.BeanModel} (only used
+     * {@link org.apache.tapestry5.beanmodel.BeanModel} (only used
      * when a default model is created automatically).
      * Only these properties will be retained, and the properties will also be reordered. The names are
      * case-insensitive.
@@ -98,7 +98,7 @@ public class BeanEditor
     private String include;
 
     /**
-     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry5.beaneditor.BeanModel}
+     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry5.beanmodel.BeanModel}
      * (only used
      * when a default model is created automatically).
      * The names are case-insensitive.
@@ -116,7 +116,7 @@ public class BeanEditor
     private String reorder;
 
     /**
-     * A comma-separated list of property names to be added to the {@link org.apache.tapestry5.beaneditor.BeanModel}
+     * A comma-separated list of property names to be added to the {@link org.apache.tapestry5.beanmodel.BeanModel}
      * (only used
      * when a default model is created automatically).
      */
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
index 39451f7..062a638 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
@@ -14,6 +14,7 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.corelib.ClientValidation;
 import org.apache.tapestry5.corelib.internal.ComponentActionSink;
 import org.apache.tapestry5.corelib.internal.FormSupportImpl;
@@ -36,7 +37,13 @@ import org.apache.tapestry5.ioc.util.ExceptionUtils;
 import org.apache.tapestry5.ioc.util.IdAllocator;
 import org.apache.tapestry5.json.JSONArray;
 import org.apache.tapestry5.runtime.Component;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ClientDataEncoder;
+import org.apache.tapestry5.services.ComponentSource;
+import org.apache.tapestry5.services.Environment;
+import org.apache.tapestry5.services.FormSupport;
+import org.apache.tapestry5.services.Heartbeat;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.StreamPageContent;
 import org.apache.tapestry5.services.compatibility.DeprecationWarning;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 import org.slf4j.Logger;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Grid.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Grid.java
index a884e52..6cf048d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Grid.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Grid.java
@@ -14,16 +14,16 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.PropertyModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.corelib.data.GridPagerPosition;
 import org.apache.tapestry5.grid.*;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
-import org.apache.tapestry5.internal.beaneditor.BeanModelUtils;
 import org.apache.tapestry5.internal.bindings.AbstractBinding;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.apache.tapestry5.services.ComponentDefaultProvider;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
 import org.apache.tapestry5.services.FormSupport;
@@ -50,8 +50,8 @@ import java.util.List;
  * to use a unique ID for each row that doesn't change when rows are reordered.
  *
  * @tapestrydoc
- * @see org.apache.tapestry5.beaneditor.BeanModel
- * @see org.apache.tapestry5.services.BeanModelSource
+ * @see org.apache.tapestry5.beanmodel.BeanModel
+ * @see org.apache.tapestry5.beanmodel.services.BeanModelSource
  * @see org.apache.tapestry5.grid.GridDataSource
  * @see BeanEditForm
  * @see BeanDisplay
@@ -129,7 +129,7 @@ public class Grid implements GridModel, ClientElement
     private GridSortModel sortModel;
 
     /**
-     * A comma-separated list of property names to be added to the {@link org.apache.tapestry5.beaneditor.BeanModel}.
+     * A comma-separated list of property names to be added to the {@link org.apache.tapestry5.beanmodel.BeanModel}.
      * Cells for added columns will be blank unless a cell override is provided. This parameter is only used
      * when a default model is created automatically.
      */
@@ -138,7 +138,7 @@ public class Grid implements GridModel, ClientElement
 
     /**
      * A comma-separated list of property names to be retained from the
-     * {@link org.apache.tapestry5.beaneditor.BeanModel}.
+     * {@link org.apache.tapestry5.beanmodel.BeanModel}.
      * Only these properties will be retained, and the properties will also be reordered. The names are
      * case-insensitive. This parameter is only used
      * when a default model is created automatically.
@@ -148,7 +148,7 @@ public class Grid implements GridModel, ClientElement
     private String include;
 
     /**
-     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry5.beaneditor.BeanModel}
+     * A comma-separated list of property names to be removed from the {@link org.apache.tapestry5.beanmodel.BeanModel}
      * .
      * The names are case-insensitive. This parameter is only used
      * when a default model is created automatically.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridColumns.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridColumns.java
index f27b0ef..5be3d11 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridColumns.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridColumns.java
@@ -19,7 +19,7 @@ import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.PropertyOverrides;
 import org.apache.tapestry5.annotations.*;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.grid.ColumnSort;
 import org.apache.tapestry5.grid.GridModel;
 import org.apache.tapestry5.grid.GridSortModel;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridRows.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridRows.java
index 356ac32..b7c0860 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridRows.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridRows.java
@@ -32,7 +32,7 @@ import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.grid.GridDataSource;
 import org.apache.tapestry5.grid.GridModel;
 import org.apache.tapestry5.services.FormSupport;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PropertyDisplay.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PropertyDisplay.java
index a36ab7a..e54e19a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PropertyDisplay.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PropertyDisplay.java
@@ -15,7 +15,7 @@
 package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.corelib.base.AbstractPropertyOutput;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PropertyEditor.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PropertyEditor.java
index 1f9a418..cde9165 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PropertyEditor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PropertyEditor.java
@@ -17,13 +17,21 @@ package org.apache.tapestry5.corelib.components;
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Parameter;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.PropertyModel;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.BeanValidationContext;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.BeanBlockSource;
+import org.apache.tapestry5.services.Core;
+import org.apache.tapestry5.services.Environment;
+import org.apache.tapestry5.services.FieldTranslatorSource;
+import org.apache.tapestry5.services.FieldValidatorDefaultSource;
+import org.apache.tapestry5.services.FormSupport;
+import org.apache.tapestry5.services.Heartbeat;
+import org.apache.tapestry5.services.PropertyEditContext;
 
 import java.lang.annotation.Annotation;
 import java.util.Locale;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
index 9be23ab..aa9b197 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
@@ -14,6 +14,7 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.corelib.base.AbstractField;
 import org.apache.tapestry5.corelib.data.BlankOption;
 import org.apache.tapestry5.corelib.data.SecureOption;
@@ -27,7 +28,11 @@ import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.FieldValidatorDefaultSource;
+import org.apache.tapestry5.services.FormSupport;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.ValueEncoderFactory;
+import org.apache.tapestry5.services.ValueEncoderSource;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 import org.apache.tapestry5.util.EnumSelectModel;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Zone.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Zone.java
index 627f6f6..b4e9b02 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Zone.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Zone.java
@@ -14,6 +14,7 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.corelib.internal.ComponentActionSink;
 import org.apache.tapestry5.corelib.internal.FormSupportAdapter;
 import org.apache.tapestry5.corelib.internal.HiddenFieldPositioner;
@@ -22,7 +23,11 @@ import org.apache.tapestry5.internal.services.RequestConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.json.JSONObject;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ClientDataEncoder;
+import org.apache.tapestry5.services.Environment;
+import org.apache.tapestry5.services.FormSupport;
+import org.apache.tapestry5.services.Heartbeat;
+import org.apache.tapestry5.services.HiddenFieldLocationRules;
 import org.apache.tapestry5.services.compatibility.DeprecationWarning;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 import org.slf4j.Logger;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ExceptionReport.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ExceptionReport.java
index 87d0d2f..fe1df02 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ExceptionReport.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ExceptionReport.java
@@ -21,6 +21,7 @@ import org.apache.tapestry5.annotations.ContentType;
 import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.UnknownActivationContextCheck;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.corelib.base.AbstractInternalPage;
 import org.apache.tapestry5.func.F;
 import org.apache.tapestry5.func.Mapper;
@@ -32,7 +33,12 @@ import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.BaseURLSource;
+import org.apache.tapestry5.services.ExceptionReporter;
+import org.apache.tapestry5.services.PageRenderLinkSource;
+import org.apache.tapestry5.services.RequestGlobals;
+import org.apache.tapestry5.services.Session;
+import org.apache.tapestry5.services.URLEncoder;
 
 import java.net.MalformedURLException;
 import java.net.URL;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
index cffe9d5..7f0ccdf 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
@@ -17,8 +17,9 @@ package org.apache.tapestry5.corelib.pages;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.alerts.AlertManager;
 import org.apache.tapestry5.annotations.*;
-import org.apache.tapestry5.beaneditor.BeanModel;
 import org.apache.tapestry5.beaneditor.Validate;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.corelib.components.Zone;
 import org.apache.tapestry5.func.*;
 import org.apache.tapestry5.internal.PageCatalogTotals;
@@ -31,7 +32,6 @@ import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
index c0f76df..d3d0bf8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
@@ -18,7 +18,8 @@ import org.apache.tapestry5.SelectModel;
 import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.annotations.Component;
 import org.apache.tapestry5.annotations.Environmental;
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.corelib.components.BeanEditForm;
 import org.apache.tapestry5.corelib.components.Checkbox;
 import org.apache.tapestry5.corelib.components.DateField;
@@ -30,7 +31,6 @@ import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.services.BeanBlockContribution;
 import org.apache.tapestry5.services.BeanBlockSource;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.apache.tapestry5.services.PropertyEditContext;
 import org.apache.tapestry5.services.compatibility.Compatibility;
 import org.apache.tapestry5.services.compatibility.Trait;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ServiceStatus.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ServiceStatus.java
index 8546c6c..df58d95 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ServiceStatus.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ServiceStatus.java
@@ -14,14 +14,14 @@ package org.apache.tapestry5.corelib.pages;
 
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.annotations.*;
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.Registry;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.ServiceActivity;
 import org.apache.tapestry5.ioc.services.ServiceActivityScoreboard;
-import org.apache.tapestry5.services.BeanModelSource;
 
 import java.util.List;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/grid/GridDataSource.java b/tapestry-core/src/main/java/org/apache/tapestry5/grid/GridDataSource.java
index 8fca800..e0ae720 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/grid/GridDataSource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/grid/GridDataSource.java
@@ -77,7 +77,7 @@ public interface GridDataSource
 
     /**
      * Returns the type of value in the rows, or null if not known. This value is used to create a default {@link
-     * org.apache.tapestry5.beaneditor.BeanModel} when no such model is explicitly provided.
+     * org.apache.tapestry5.beanmodel.BeanModel} when no such model is explicitly provided.
      *
      * @return the row type, or null
      */
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/grid/GridModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/grid/GridModel.java
index 8593110..1daac6b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/grid/GridModel.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/grid/GridModel.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.grid;
 
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
 
 /**
  * A provider of model data to the sub-components of the {@link org.apache.tapestry5.corelib.components.Grid} component.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/grid/SortConstraint.java b/tapestry-core/src/main/java/org/apache/tapestry5/grid/SortConstraint.java
index cbacd30..5691560 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/grid/SortConstraint.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/grid/SortConstraint.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.grid;
 
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 
 /**
- * Identifies how a single column (identified as a {@link org.apache.tapestry5.beaneditor.PropertyModel}) is sorted.
+ * Identifies how a single column (identified as a {@link org.apache.tapestry5.beanmodel.PropertyModel}) is sorted.
  */
 public class SortConstraint
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java
index 0353dfe..bbf61fa 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java
@@ -13,6 +13,9 @@
 package org.apache.tapestry5.internal;
 
 import org.apache.tapestry5.*;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit2;
+import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
 import org.apache.tapestry5.func.Mapper;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.Orderable;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java
index da4c53e..ffd8457 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java
@@ -17,10 +17,10 @@ package org.apache.tapestry5.internal.bindings;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.PropertyConduit2;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit2;
+import org.apache.tapestry5.beanmodel.internal.services.Invariant;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
-import org.apache.tapestry5.internal.services.Invariant;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 
@@ -88,7 +88,7 @@ public class PropBinding extends AbstractBinding implements InternalPropBinding
     }
 
     /**
-     * Almost always returns false, unless the conduit provides the {@link org.apache.tapestry5.internal.services.Invariant}
+     * Almost always returns false, unless the conduit provides the {@link org.apache.tapestry5.beanmodel.internal.services.Invariant}
      * annotation.
      */
     @Override
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBindingFactory.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBindingFactory.java
index 8dc3418..1bb7e1e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBindingFactory.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBindingFactory.java
@@ -14,11 +14,11 @@ package org.apache.tapestry5.internal.bindings;
 
 import org.apache.tapestry5.Binding;
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.apache.tapestry5.internal.services.StringInterner;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.services.BindingFactory;
-import org.apache.tapestry5.services.PropertyConduitSource;
 
 /**
  * Binding factory for reading and updating JavaBean properties.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/grid/CollectionGridDataSource.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/grid/CollectionGridDataSource.java
index 63591b1..dd338cf 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/grid/CollectionGridDataSource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/grid/CollectionGridDataSource.java
@@ -19,7 +19,7 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
-import org.apache.tapestry5.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
 import org.apache.tapestry5.grid.ColumnSort;
 import org.apache.tapestry5.grid.GridDataSource;
 import org.apache.tapestry5.grid.SortConstraint;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
index 0ee401e..2d013a0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
@@ -16,11 +16,19 @@ import org.apache.tapestry5.Binding;
 import org.apache.tapestry5.BindingConstants;
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.beanmodel.internal.services.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.bindings.LiteralBinding;
 import org.apache.tapestry5.internal.parser.*;
-import org.apache.tapestry5.internal.services.*;
+import org.apache.tapestry5.internal.services.ComponentInstantiatorSource;
+import org.apache.tapestry5.internal.services.ComponentTemplateSource;
+import org.apache.tapestry5.internal.services.Instantiator;
+import org.apache.tapestry5.internal.services.PageElementFactory;
+import org.apache.tapestry5.internal.services.PageLoader;
+import org.apache.tapestry5.internal.services.PersistentFieldManager;
+import org.apache.tapestry5.internal.services.StringInterner;
 import org.apache.tapestry5.internal.structure.*;
 import org.apache.tapestry5.ioc.Invokable;
 import org.apache.tapestry5.ioc.Location;
@@ -37,7 +45,13 @@ import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.EmbeddedComponentModel;
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentClasses;
+import org.apache.tapestry5.services.ComponentMessages;
+import org.apache.tapestry5.services.ComponentTemplates;
+import org.apache.tapestry5.services.InvalidationEventHub;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.RequestGlobals;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxFilter.java
index 73fe6f5..31f004a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxFilter.java
@@ -14,10 +14,15 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.services.*;
-
 import java.io.IOException;
 
+import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.services.Ajax;
+import org.apache.tapestry5.services.ComponentEventRequestFilter;
+import org.apache.tapestry5.services.ComponentEventRequestHandler;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.Request;
+
 /**
  * A filter that intercepts Ajax-oriented requests, thos that originate on the client-side using XmlHttpRequest. In
  * these cases, the action processing occurs normally, but the response is quite different.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java
index 760ecb9..bc893d6 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java
@@ -15,11 +15,17 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.ioc.annotations.Marker;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.AssetRequestDispatcher;
+import org.apache.tapestry5.services.ClasspathAssetAliasManager;
+import org.apache.tapestry5.services.Dispatcher;
+import org.apache.tapestry5.services.PathConstructor;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.assets.AssetRequestHandler;
 
 import javax.servlet.http.HttpServletResponse;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java
index f6c6f32..1841ab4 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java
@@ -15,13 +15,18 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.ioc.Invokable;
 import org.apache.tapestry5.ioc.annotations.IntermediateType;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier;
 import org.apache.tapestry5.ioc.util.TimeInterval;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.RequestFilter;
+import org.apache.tapestry5.services.RequestHandler;
+import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.services.UpdateListenerHub;
 
 import java.io.IOException;
 import java.util.concurrent.TimeUnit;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImpl.java
index a94ac4f..120939e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImpl.java
@@ -13,11 +13,16 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.Link;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.ioc.ScopeConstants;
 import org.apache.tapestry5.ioc.annotations.Scope;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ClientDataEncoder;
+import org.apache.tapestry5.services.ClientDataSink;
+import org.apache.tapestry5.services.PersistentFieldChange;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
 
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStrategy.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStrategy.java
index dff329f..635e295 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStrategy.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStrategy.java
@@ -15,7 +15,12 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.Link;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.LinkCreationListener2;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.PersistentFieldChange;
+import org.apache.tapestry5.services.PersistentFieldStrategy;
 
 import java.util.Collection;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventDispatcher.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventDispatcher.java
index 1d0bd5d..5522d9f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventDispatcher.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventDispatcher.java
@@ -12,8 +12,14 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.Dispatcher;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
index 129d1dc..1259bca 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
@@ -15,12 +15,23 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.BaseURLSource;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ContextPathEncoder;
+import org.apache.tapestry5.services.LocalizationSetter;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.PersistentLocale;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.security.ClientWhitelist;
 
 import java.util.List;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java
index e1247c7..13c5266 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java
@@ -13,11 +13,17 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.TrackableComponentEventCallback;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.annotations.Primary;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventRequestHandler;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.Environment;
+import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.services.Traditional;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
index a267d00..4e8f9b7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
@@ -14,6 +14,7 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.model.MutableComponentModelImpl;
@@ -42,7 +43,11 @@ import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.ComponentEvent;
 import org.apache.tapestry5.runtime.ComponentResourcesAware;
 import org.apache.tapestry5.runtime.PageLifecycleListener;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventHandler;
+import org.apache.tapestry5.services.TransformConstants;
+import org.apache.tapestry5.services.UpdateListener;
+import org.apache.tapestry5.services.UpdateListenerHub;
 import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
 import org.apache.tapestry5.services.transform.ControlledPackageType;
 import org.apache.tapestry5.services.transform.TransformationSupport;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentRequestHandlerTerminator.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentRequestHandlerTerminator.java
index c100178..0ab7b9f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentRequestHandlerTerminator.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentRequestHandlerTerminator.java
@@ -14,10 +14,16 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.services.*;
-
 import java.io.IOException;
 
+import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.services.ComponentEventRequestHandler;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Traditional;
+
 /**
  * Terminator for the {@link org.apache.tapestry5.services.ComponentRequestHandler} pipeline, that feeds out into the
  * {@link org.apache.tapestry5.services.ComponentEventRequestHandler} and {@link org.apache.tapestry5.services.PageRenderRequestHandler}
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
index 1055df5..896a546 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
@@ -16,6 +16,7 @@ import org.apache.tapestry5.ContextAwareException;
 import org.apache.tapestry5.ExceptionHandlerAssistant;
 import org.apache.tapestry5.Link;
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.ServiceResources;
@@ -25,7 +26,11 @@ import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.ioc.util.ExceptionUtils;
 import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.runtime.ComponentEventException;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ExceptionReporter;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.RequestExceptionHandler;
+import org.apache.tapestry5.services.Response;
 import org.slf4j.Logger;
 
 import javax.servlet.http.HttpServletResponse;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DeferredResponseRenderer.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DeferredResponseRenderer.java
index 72d2b88..08cd973 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DeferredResponseRenderer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DeferredResponseRenderer.java
@@ -15,9 +15,14 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.TapestryConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.OperationTracker;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentRequestFilter;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderDispatcher.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderDispatcher.java
index 38e02e7..5f9fcbc 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderDispatcher.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderDispatcher.java
@@ -12,8 +12,14 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.Dispatcher;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java
index fc0223a..f1d633a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java
@@ -14,10 +14,15 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.annotations.Primary;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.PageRenderRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Traditional;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ProductionModeUnknownComponentFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ProductionModeUnknownComponentFilter.java
index 9f95796..7c045d7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ProductionModeUnknownComponentFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ProductionModeUnknownComponentFilter.java
@@ -12,10 +12,15 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.util.UnknownValueException;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentRequestFilter;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
index 4346eb1..7c259e0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
@@ -1,9 +1,14 @@
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.services.*;
-
 import java.io.IOException;
 
+import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.RequestExceptionHandler;
+import org.apache.tapestry5.services.RequestFilter;
+import org.apache.tapestry5.services.RequestHandler;
+import org.apache.tapestry5.services.Response;
+
 /**
  * Filter for the {@link org.apache.tapestry5.services.RequestHandler} pipeline used to intercept and report
  * exceptions.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestOperationTracker.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestOperationTracker.java
index f070e09..6c37c8b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestOperationTracker.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestOperationTracker.java
@@ -14,10 +14,15 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.OperationTracker;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentRequestFilter;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestSecurityManagerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestSecurityManagerImpl.java
index dd0ada6..63c13b3 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestSecurityManagerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestSecurityManagerImpl.java
@@ -18,8 +18,14 @@ import org.apache.tapestry5.Link;
 import org.apache.tapestry5.LinkSecurity;
 import org.apache.tapestry5.MetaDataConstants;
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java
index 66c8197..610a052 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java
@@ -16,9 +16,16 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.EventContext;
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.Dispatcher;
+import org.apache.tapestry5.services.LocalizationSetter;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamPageContentResultProcessor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamPageContentResultProcessor.java
index 962b811..b0ffbee 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamPageContentResultProcessor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamPageContentResultProcessor.java
@@ -16,11 +16,18 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.EventContext;
 import org.apache.tapestry5.TapestryConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.PageRenderRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.RequestGlobals;
+import org.apache.tapestry5.services.StreamPageContent;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValueEncoderSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValueEncoderSourceImpl.java
index 6d661bb..d367409 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValueEncoderSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValueEncoderSourceImpl.java
@@ -17,10 +17,14 @@ package org.apache.tapestry5.internal.services;
 import java.util.Map;
 
 import org.apache.tapestry5.ValueEncoder;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.ioc.annotations.PostInjection;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.util.StrategyRegistry;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClasses;
+import org.apache.tapestry5.services.InvalidationEventHub;
+import org.apache.tapestry5.services.ValueEncoderFactory;
+import org.apache.tapestry5.services.ValueEncoderSource;
 
 @SuppressWarnings("all")
 public class ValueEncoderSourceImpl implements ValueEncoderSource, Runnable
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/AssetsModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/AssetsModule.java
index 8175500..60131cb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/AssetsModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/AssetsModule.java
@@ -16,9 +16,18 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.beanmodel.internal.services.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.AssetConstants;
 import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.internal.services.*;
+import org.apache.tapestry5.internal.services.AssetSourceImpl;
+import org.apache.tapestry5.internal.services.ClasspathAssetAliasManagerImpl;
+import org.apache.tapestry5.internal.services.ClasspathAssetFactory;
+import org.apache.tapestry5.internal.services.ContextAssetFactory;
+import org.apache.tapestry5.internal.services.ExternalUrlAssetFactory;
+import org.apache.tapestry5.internal.services.IdentityAssetPathConverter;
+import org.apache.tapestry5.internal.services.RequestConstants;
+import org.apache.tapestry5.internal.services.ResourceStreamer;
 import org.apache.tapestry5.internal.services.assets.*;
 import org.apache.tapestry5.internal.services.messages.ClientLocalizationMessageResource;
 import org.apache.tapestry5.ioc.*;
@@ -26,7 +35,20 @@ import org.apache.tapestry5.ioc.annotations.*;
 import org.apache.tapestry5.ioc.services.ChainBuilder;
 import org.apache.tapestry5.ioc.services.FactoryDefaults;
 import org.apache.tapestry5.ioc.services.SymbolProvider;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ApplicationGlobals;
+import org.apache.tapestry5.services.AssetFactory;
+import org.apache.tapestry5.services.AssetPathConverter;
+import org.apache.tapestry5.services.AssetRequestDispatcher;
+import org.apache.tapestry5.services.AssetSource;
+import org.apache.tapestry5.services.ClasspathAssetAliasManager;
+import org.apache.tapestry5.services.ClasspathAssetProtectionRule;
+import org.apache.tapestry5.services.ClasspathProvider;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ContextProvider;
+import org.apache.tapestry5.services.Core;
+import org.apache.tapestry5.services.Dispatcher;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.services.assets.*;
 import org.apache.tapestry5.services.javascript.JavaScriptStackSource;
 import org.apache.tapestry5.services.messages.ComponentMessagesSource;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
index 682fdc4..cdb7441 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
@@ -12,8 +12,57 @@
 
 package org.apache.tapestry5.modules;
 
+import org.apache.tapestry5.beanmodel.internal.services.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.pageload.PageLoaderImpl;
-import org.apache.tapestry5.internal.services.*;
+import org.apache.tapestry5.internal.services.AjaxPartialResponseRenderer;
+import org.apache.tapestry5.internal.services.AjaxPartialResponseRendererImpl;
+import org.apache.tapestry5.internal.services.ClientPersistentFieldStorage;
+import org.apache.tapestry5.internal.services.ClientPersistentFieldStorageImpl;
+import org.apache.tapestry5.internal.services.ComponentInstantiatorSource;
+import org.apache.tapestry5.internal.services.ComponentModelSource;
+import org.apache.tapestry5.internal.services.CookieSink;
+import org.apache.tapestry5.internal.services.CookieSource;
+import org.apache.tapestry5.internal.services.EndOfRequestEventHub;
+import org.apache.tapestry5.internal.services.FormControlNameManager;
+import org.apache.tapestry5.internal.services.FormControlNameManagerImpl;
+import org.apache.tapestry5.internal.services.InternalComponentInvalidationEventHub;
+import org.apache.tapestry5.internal.services.InternalRequestGlobals;
+import org.apache.tapestry5.internal.services.InternalRequestGlobalsImpl;
+import org.apache.tapestry5.internal.services.LinkDecorationListener;
+import org.apache.tapestry5.internal.services.LinkSource;
+import org.apache.tapestry5.internal.services.LinkSourceImpl;
+import org.apache.tapestry5.internal.services.LocalizationSetterImpl;
+import org.apache.tapestry5.internal.services.PageContentTypeAnalyzer;
+import org.apache.tapestry5.internal.services.PageContentTypeAnalyzerImpl;
+import org.apache.tapestry5.internal.services.PageElementFactory;
+import org.apache.tapestry5.internal.services.PageElementFactoryImpl;
+import org.apache.tapestry5.internal.services.PageLoader;
+import org.apache.tapestry5.internal.services.PageMarkupRenderer;
+import org.apache.tapestry5.internal.services.PageMarkupRendererImpl;
+import org.apache.tapestry5.internal.services.PageRenderQueue;
+import org.apache.tapestry5.internal.services.PageRenderQueueImpl;
+import org.apache.tapestry5.internal.services.PageResponseRenderer;
+import org.apache.tapestry5.internal.services.PageResponseRendererImpl;
+import org.apache.tapestry5.internal.services.PageSource;
+import org.apache.tapestry5.internal.services.PageSourceImpl;
+import org.apache.tapestry5.internal.services.PersistentFieldManager;
+import org.apache.tapestry5.internal.services.PersistentFieldManagerImpl;
+import org.apache.tapestry5.internal.services.ReloadHelper;
+import org.apache.tapestry5.internal.services.ReloadHelperImpl;
+import org.apache.tapestry5.internal.services.RequestPageCache;
+import org.apache.tapestry5.internal.services.RequestPageCacheImpl;
+import org.apache.tapestry5.internal.services.RequestSecurityManager;
+import org.apache.tapestry5.internal.services.RequestSecurityManagerImpl;
+import org.apache.tapestry5.internal.services.ResourceDigestManager;
+import org.apache.tapestry5.internal.services.ResourceDigestManagerImpl;
+import org.apache.tapestry5.internal.services.ResourceStreamer;
+import org.apache.tapestry5.internal.services.ResourceStreamerImpl;
+import org.apache.tapestry5.internal.services.ResponseCompressionAnalyzerImpl;
+import org.apache.tapestry5.internal.services.TemplateParser;
+import org.apache.tapestry5.internal.services.TemplateParserImpl;
+import org.apache.tapestry5.internal.services.UnknownActivationContextHandler;
+import org.apache.tapestry5.internal.services.UnknownActivationContextHandlerImpl;
 import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateController;
 import org.apache.tapestry5.internal.services.javascript.JavaScriptStackPathConstructor;
 import org.apache.tapestry5.internal.structure.ComponentPageElementResourcesSource;
@@ -23,7 +72,12 @@ import org.apache.tapestry5.ioc.OrderedConfiguration;
 import org.apache.tapestry5.ioc.ServiceBinder;
 import org.apache.tapestry5.ioc.annotations.Contribute;
 import org.apache.tapestry5.ioc.annotations.Marker;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.Core;
+import org.apache.tapestry5.services.LinkCreationListener2;
+import org.apache.tapestry5.services.LocalizationSetter;
+import org.apache.tapestry5.services.RequestGlobals;
+import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.services.transform.ControlledPackageType;
 
 import javax.servlet.http.Cookie;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
index 9ecddaa..56e996a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
@@ -19,10 +19,20 @@ import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.annotations.ContentType;
 import org.apache.tapestry5.beaneditor.DataTypeConstants;
 import org.apache.tapestry5.beaneditor.Validate;
+import org.apache.tapestry5.beanmodel.*;
+import org.apache.tapestry5.beanmodel.internal.services.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.corelib.data.SecureOption;
 import org.apache.tapestry5.grid.GridConstants;
 import org.apache.tapestry5.grid.GridDataSource;
-import org.apache.tapestry5.internal.*;
+import org.apache.tapestry5.internal.ComponentOverrideImpl;
+import org.apache.tapestry5.internal.DefaultNullFieldStrategy;
+import org.apache.tapestry5.internal.DefaultValueLabelProvider;
+import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.internal.InternalSymbols;
+import org.apache.tapestry5.internal.PropertyOverridesImpl;
+import org.apache.tapestry5.internal.TapestryInternalUtils;
+import org.apache.tapestry5.internal.ZeroNullFieldStrategy;
 import org.apache.tapestry5.internal.alerts.AlertManagerImpl;
 import org.apache.tapestry5.internal.beaneditor.EnvironmentMessages;
 import org.apache.tapestry5.internal.beaneditor.MessagesConstraintGenerator;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java b/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
index 692a826..2665378 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
@@ -18,8 +18,10 @@ import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.Id;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.Path;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyModel;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.services.MapMessages;
 import org.apache.tapestry5.internal.services.MarkupWriterImpl;
 import org.apache.tapestry5.ioc.*;
@@ -32,7 +34,39 @@ import org.apache.tapestry5.model.EmbeddedComponentModel;
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.model.ParameterModel;
 import org.apache.tapestry5.runtime.Component;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ApplicationStateCreator;
+import org.apache.tapestry5.services.ApplicationStateManager;
+import org.apache.tapestry5.services.ApplicationStatePersistenceStrategy;
+import org.apache.tapestry5.services.ApplicationStatePersistenceStrategySource;
+import org.apache.tapestry5.services.AssetFactory;
+import org.apache.tapestry5.services.AssetSource;
+import org.apache.tapestry5.services.BaseURLSource;
+import org.apache.tapestry5.services.BindingFactory;
+import org.apache.tapestry5.services.BindingSource;
+import org.apache.tapestry5.services.ClasspathAssetAliasManager;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventRequestHandler;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.Context;
+import org.apache.tapestry5.services.Environment;
+import org.apache.tapestry5.services.FieldTranslatorSource;
+import org.apache.tapestry5.services.FieldValidatorSource;
+import org.apache.tapestry5.services.FormSupport;
+import org.apache.tapestry5.services.Heartbeat;
+import org.apache.tapestry5.services.Html5Support;
+import org.apache.tapestry5.services.HttpServletRequestHandler;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.PageRenderLinkSource;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.RequestGlobals;
+import org.apache.tapestry5.services.RequestHandler;
+import org.apache.tapestry5.services.ResourceDigestGenerator;
+import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.services.Session;
+import org.apache.tapestry5.services.TranslatorSource;
+import org.apache.tapestry5.services.ValidationConstraintGenerator;
+import org.apache.tapestry5.services.ValueEncoderSource;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 import org.easymock.IAnswer;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/base/AbstractPropertyOutputTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/base/AbstractPropertyOutputTest.java
index 80c4a1e..f7428a2 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/base/AbstractPropertyOutputTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/base/AbstractPropertyOutputTest.java
@@ -13,8 +13,8 @@
 package org.apache.tapestry5.corelib.base;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java
index af3ba5f..53d66ce 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/BeanEditorTest.java
@@ -22,7 +22,8 @@ import static org.easymock.EasyMock.anyObject;
 
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.PropertyOverrides;
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.integration.app1.data.RegistrationData;
 import org.apache.tapestry5.internal.BeanValidationContext;
 import org.apache.tapestry5.internal.BeanValidationContextImpl;
@@ -30,7 +31,6 @@ import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.services.BeanEditContext;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.apache.tapestry5.services.Environment;
 import org.apache.tapestry5.test.TapestryTestCase;
 import org.easymock.EasyMock;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/PropertyEditorTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/PropertyEditorTest.java
index d167874..fd7482d 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/PropertyEditorTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/PropertyEditorTest.java
@@ -16,7 +16,7 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.PropertyOverrides;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/GenericEditor.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/GenericEditor.java
index 19eeee7..56f56ce 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/GenericEditor.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/GenericEditor.java
@@ -14,13 +14,13 @@
 
 package org.apache.tapestry5.integration.app1.base;
 
-import org.apache.tapestry5.PropertyConduit;
 import org.apache.tapestry5.annotations.Component;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Retain;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.apache.tapestry5.corelib.components.BeanEditForm;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.PropertyConduitSource;
 
 /**
  * For testing TAPESTRY-1518.
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/AddedGridColumnsDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/AddedGridColumnsDemo.java
index cf1d1ff..82b9934 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/AddedGridColumnsDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/AddedGridColumnsDemo.java
@@ -15,13 +15,13 @@
 package org.apache.tapestry5.integration.app1.pages;
 
 import org.apache.tapestry5.annotations.Component;
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.corelib.components.Grid;
 import org.apache.tapestry5.integration.app1.data.Track;
 import org.apache.tapestry5.integration.app1.services.MusicLibrary;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.BeanModelSource;
 
 import java.util.List;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EmptyGrid.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EmptyGrid.java
index a89c039..0df26b0 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EmptyGrid.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EmptyGrid.java
@@ -20,13 +20,13 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Random;
 
-import org.apache.tapestry5.PropertyConduit;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.BeanModelSource;
 
 public class EmptyGrid
 {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridInLoopDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridInLoopDemo.java
index bf904b6..56eecef 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridInLoopDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridInLoopDemo.java
@@ -1,10 +1,10 @@
 package org.apache.tapestry5.integration.app1.pages;
 
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.integration.app1.data.Track;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.BeanModelSource;
 
 import java.util.Collection;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SimpleTrackGridDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SimpleTrackGridDemo.java
index 563fc46..84f1f8a 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SimpleTrackGridDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SimpleTrackGridDemo.java
@@ -14,13 +14,13 @@
 
 package org.apache.tapestry5.integration.app1.pages;
 
-import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.integration.app1.data.SimpleTrack;
 import org.apache.tapestry5.integration.app1.data.Track;
 import org.apache.tapestry5.integration.app1.services.MusicLibrary;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.BeanModelSource;
 
 import java.util.List;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/DataBean.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/DataBean.java
index ae66e7f..5dc5d3f 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/DataBean.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/DataBean.java
@@ -15,7 +15,7 @@
 package org.apache.tapestry5.internal;
 
 /**
- * Used as test when setting the order of properties in a {@link org.apache.tapestry5.beaneditor.BeanModel}.
+ * Used as test when setting the order of properties in a {@link org.apache.tapestry5.beanmodel.BeanModel}.
  */
 public class DataBean
 {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/TapestryInternalUtilsTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/TapestryInternalUtilsTest.java
index 995fa33..ad41dba 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/TapestryInternalUtilsTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/TapestryInternalUtilsTest.java
@@ -16,6 +16,8 @@ package org.apache.tapestry5.internal;
 
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.beaneditor.Width;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.Resource;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/BeanModelUtilsTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/BeanModelUtilsTest.java
index f8db28b..59efbec 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/BeanModelUtilsTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/BeanModelUtilsTest.java
@@ -14,8 +14,9 @@
 
 package org.apache.tapestry5.internal.beaneditor;
 
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModelUtils;
+import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.easymock.EasyMock;
 import org.testng.annotations.DataProvider;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java
index f0968ca..ee2fc93 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.internal.beaneditor;
 
-import org.apache.tapestry5.PropertyConduit;
 import org.apache.tapestry5.beaneditor.Validate;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.services.ValidationConstraintGenerator;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/grid/CollectionGridDataSourceTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/grid/CollectionGridDataSourceTest.java
index 3305ff4..f90ab07 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/grid/CollectionGridDataSourceTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/grid/CollectionGridDataSourceTest.java
@@ -14,13 +14,13 @@
 
 package org.apache.tapestry5.internal.grid;
 
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.PropertyModel;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.grid.ColumnSort;
 import org.apache.tapestry5.grid.SortConstraint;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.Messages;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AbstractBeanModelSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AbstractBeanModelSourceImplTest.java
index 83b1067..9d6c871 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AbstractBeanModelSourceImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AbstractBeanModelSourceImplTest.java
@@ -14,18 +14,19 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.BeanModelSourceBuilder;
-import org.apache.tapestry5.beaneditor.PropertyModel;
 import org.apache.tapestry5.beaneditor.RelativePosition;
 import org.apache.tapestry5.beaneditor.Sortable;
+import org.apache.tapestry5.beanmodel.BeanModel;
+import org.apache.tapestry5.beanmodel.BeanModelSourceBuilder;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyModel;
+import org.apache.tapestry5.beanmodel.internal.services.PropertyExpressionException;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.internal.PropertyOrderBean;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.internal.transform.pages.ReadOnlyBean;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.util.UnknownValueException;
-import org.apache.tapestry5.services.BeanModelSource;
 import org.easymock.EasyMock;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java
index f9c69a2..2e267e6 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java
@@ -14,11 +14,16 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.internal.transform.pages.ReadOnlyBean;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.ioc.ObjectLocator;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ApplicationStateContribution;
+import org.apache.tapestry5.services.ApplicationStateCreator;
+import org.apache.tapestry5.services.ApplicationStateManager;
+import org.apache.tapestry5.services.ApplicationStatePersistenceStrategy;
+import org.apache.tapestry5.services.ApplicationStatePersistenceStrategySource;
 import org.easymock.EasyMock;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.isA;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java
index a70eab0..52cfd07 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanBlockSourceImplTest.java
@@ -15,11 +15,16 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.Block;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.BeanBlockContribution;
+import org.apache.tapestry5.services.BeanBlockOverrideSource;
+import org.apache.tapestry5.services.BeanBlockSource;
+import org.apache.tapestry5.services.DisplayBlockContribution;
+import org.apache.tapestry5.services.EditBlockContribution;
 import org.testng.annotations.Test;
 
 import java.util.Collection;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanModelSourceBuilderTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanModelSourceBuilderTest.java
index 78502e6..af3e755 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanModelSourceBuilderTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanModelSourceBuilderTest.java
@@ -13,8 +13,8 @@
 // limitations under the License.
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.beaneditor.BeanModelSourceBuilder;
-import org.apache.tapestry5.services.BeanModelSource;
+import org.apache.tapestry5.beanmodel.BeanModelSourceBuilder;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.testng.annotations.Test;
 
 /**
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanModelSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanModelSourceImplTest.java
index a23a3a5..56b8fcf 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanModelSourceImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BeanModelSourceImplTest.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.services.BeanModelSource;
+import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 
 /**
  * Tests a BeanModelSource created using Tapestry-IoC.
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java
index b3f17a1..a9cb726 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java
@@ -14,11 +14,21 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.EventConstants;
 import org.apache.tapestry5.MetaDataConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.URLEventContext;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.ContextPathEncoder;
+import org.apache.tapestry5.services.ContextValueEncoder;
+import org.apache.tapestry5.services.Dispatcher;
+import org.apache.tapestry5.services.LocalizationSetter;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.security.ClientWhitelist;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
index 78e71c5..9c1df38 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
@@ -18,11 +18,20 @@ import org.apache.tapestry5.Link;
 import org.apache.tapestry5.LinkSecurity;
 import org.apache.tapestry5.MetaDataConstants;
 import org.apache.tapestry5.TapestryConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ContextPathEncoder;
+import org.apache.tapestry5.services.LocalizationSetter;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.security.ClientWhitelist;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java
index fd4d8f9..84f01c5 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkSourceImplTest.java
@@ -20,11 +20,17 @@ import java.util.List;
 import org.apache.tapestry5.EventConstants;
 import org.apache.tapestry5.EventContext;
 import org.apache.tapestry5.Link;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.LinkCreationListener2;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.RequestGlobals;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java
index a861883..a0cc8e3 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java
@@ -21,18 +21,19 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.tapestry5.Block;
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.PropertyConduit2;
 import org.apache.tapestry5.beaneditor.NonVisual;
 import org.apache.tapestry5.beaneditor.Validate;
+import org.apache.tapestry5.beanmodel.PropertyConduit;
+import org.apache.tapestry5.beanmodel.PropertyConduit2;
+import org.apache.tapestry5.beanmodel.internal.InternalPropertyConduit;
+import org.apache.tapestry5.beanmodel.internal.services.Invariant;
+import org.apache.tapestry5.beanmodel.services.PropertyConduitSource;
 import org.apache.tapestry5.integration.app1.data.IntegerHolder;
-import org.apache.tapestry5.internal.InternalPropertyConduit;
 import org.apache.tapestry5.internal.bindings.PropBindingFactoryTest;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.internal.util.IntegerRange;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.services.PropertyConduitSource;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestSecurityManagerImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestSecurityManagerImplTest.java
index 0157537..9690723 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestSecurityManagerImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestSecurityManagerImplTest.java
@@ -17,9 +17,14 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.Link;
 import org.apache.tapestry5.LinkSecurity;
 import org.apache.tapestry5.MetaDataConstants;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/StaticFilesFilterTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/StaticFilesFilterTest.java
index 24fdf32..e4874dd 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/StaticFilesFilterTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/StaticFilesFilterTest.java
@@ -14,8 +14,13 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.Context;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.RequestFilter;
+import org.apache.tapestry5.services.RequestHandler;
+import org.apache.tapestry5.services.Response;
 import org.testng.annotations.Test;
 
 import javax.servlet.http.HttpServletResponse;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
index 92b109c..73b94d3 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
@@ -18,9 +18,21 @@ import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.ComponentResourcesCommon;
 import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.beanmodel.internal.services.*;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.parser.ComponentTemplate;
-import org.apache.tapestry5.internal.services.*;
+import org.apache.tapestry5.internal.services.ComponentModelSource;
+import org.apache.tapestry5.internal.services.DocumentLinker;
+import org.apache.tapestry5.internal.services.ForceDevelopmentModeModule;
+import org.apache.tapestry5.internal.services.Instantiator;
+import org.apache.tapestry5.internal.services.LinkSource;
+import org.apache.tapestry5.internal.services.PageContentTypeAnalyzer;
+import org.apache.tapestry5.internal.services.PageRenderQueue;
+import org.apache.tapestry5.internal.services.PageResponseRenderer;
+import org.apache.tapestry5.internal.services.RequestPageCache;
+import org.apache.tapestry5.internal.services.RequestSecurityManager;
+import org.apache.tapestry5.internal.services.TemplateParser;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.ComponentPageElementResources;
 import org.apache.tapestry5.internal.structure.Page;
@@ -37,7 +49,14 @@ import org.apache.tapestry5.root.FieldComponent;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.BaseURLSource;
+import org.apache.tapestry5.services.ClientBehaviorSupport;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.InvalidationListener;
+import org.apache.tapestry5.services.LinkCreationListener2;
+import org.apache.tapestry5.services.LocalizationSetter;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.test.TapestryTestCase;
 import org.easymock.EasyMock;
 import org.testng.annotations.AfterMethod;
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/modules/TapestryIOCModule.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/modules/TapestryIOCModule.java
index 13f9ded..7e14d99 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/modules/TapestryIOCModule.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/modules/TapestryIOCModule.java
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.ioc.modules;
 
+import org.apache.tapestry5.beanmodel.internal.services.PropertyAccessImpl;
 import org.apache.tapestry5.func.Flow;
 import org.apache.tapestry5.ioc.*;
 import org.apache.tapestry5.ioc.annotations.*;
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/ExceptionUtilsSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/ExceptionUtilsSpec.groovy
index 9b7a4f2..1e8e37b 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/ExceptionUtilsSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/ExceptionUtilsSpec.groovy
@@ -1,6 +1,6 @@
 package ioc.specs
 
-import org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl
+import org.apache.tapestry5.beanmodel.internal.services.PropertyAccessImpl
 import org.apache.tapestry5.ioc.internal.util.TapestryException
 import org.apache.tapestry5.ioc.util.ExceptionUtils
 import org.apache.tapestry5.ioc.util.ExceptionWrapper
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy
index 3c63806..0e8aabf 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy
@@ -7,6 +7,7 @@ import java.lang.reflect.Method
 
 import org.apache.tapestry5.beaneditor.DataType
 import org.apache.tapestry5.beaneditor.Validate
+import org.apache.tapestry5.beanmodel.internal.services.PropertyAccessImpl
 import org.apache.tapestry5.ioc.annotations.Scope
 import org.apache.tapestry5.ioc.internal.services.*
 import org.apache.tapestry5.ioc.internal.util.Pair
diff --git a/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/modules/KaptchaModule.java b/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/modules/KaptchaModule.java
index 0327399..ca63104 100644
--- a/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/modules/KaptchaModule.java
+++ b/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/modules/KaptchaModule.java
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.kaptcha.modules;
 
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.*;
 import org.apache.tapestry5.ioc.annotations.Contribute;
@@ -24,7 +25,12 @@ import org.apache.tapestry5.kaptcha.KaptchaSymbolConstants;
 import org.apache.tapestry5.kaptcha.internal.services.KaptchaDataTypeAnalyzer;
 import org.apache.tapestry5.kaptcha.internal.services.KaptchaProducerImpl;
 import org.apache.tapestry5.kaptcha.services.KaptchaProducer;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.BeanBlockContribution;
+import org.apache.tapestry5.services.BeanBlockSource;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.DataTypeAnalyzer;
+import org.apache.tapestry5.services.EditBlockContribution;
+import org.apache.tapestry5.services.LibraryMapping;
 import org.apache.tapestry5.services.messages.ComponentMessagesSource;
 
 /**
diff --git a/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/UploadExceptionFilter.java b/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/UploadExceptionFilter.java
index 0ae3537..b92a66e 100644
--- a/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/UploadExceptionFilter.java
+++ b/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/UploadExceptionFilter.java
@@ -16,10 +16,16 @@ package org.apache.tapestry5.upload.internal.services;
 
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.tapestry5.annotations.Events;
+import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.internal.services.ComponentResultProcessorWrapper;
 import org.apache.tapestry5.ioc.annotations.Primary;
 import org.apache.tapestry5.runtime.Component;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentEventRequestFilter;
+import org.apache.tapestry5.services.ComponentEventRequestHandler;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.ComponentSource;
+import org.apache.tapestry5.services.Traditional;
 import org.apache.tapestry5.upload.services.MultipartDecoder;
 import org.apache.tapestry5.upload.services.UploadEvents;