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/10/08 21:38:45 UTC

[tapestry-5] branch java9modules updated: TAP5-2644: split tapestry-http out of tapestry-core

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

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


The following commit(s) were added to refs/heads/java9modules by this push:
     new c9668b8  TAP5-2644: split tapestry-http out of tapestry-core
c9668b8 is described below

commit c9668b894efaf3b1c8bd267f47d21882ed1a2ece
Author: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
AuthorDate: Thu Oct 8 18:33:05 2020 -0300

    TAP5-2644: split tapestry-http out of tapestry-core
---
 settings.gradle                                    |   2 +-
 .../org/example/testapp/services/AppModule.java    |   3 +-
 tapestry-core/build.gradle                         |   1 +
 .../src/main/java/org/apache/tapestry5/Asset.java  |   2 +-
 .../BaseOptimizedSessionPersistedObject.java       |   4 +-
 .../org/apache/tapestry5/ComponentResources.java   |   2 +-
 .../apache/tapestry5/ComponentResourcesCommon.java |   1 +
 .../java/org/apache/tapestry5/CookieBuilder.java   |   2 +-
 .../java/org/apache/tapestry5/EventConstants.java  |   1 +
 .../tapestry5/ExceptionHandlerAssistant.java       |   1 +
 .../java/org/apache/tapestry5/PageCallback.java    |   3 +-
 .../org/apache/tapestry5/PersistenceConstants.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 +-----
 .../org/apache/tapestry5/alerts/AlertStorage.java  |   2 +-
 .../annotations/ActivationRequestParameter.java    |   4 +-
 .../org/apache/tapestry5/annotations/Persist.java  |   2 +-
 .../tapestry5/annotations/RequestParameter.java    |   2 +-
 .../tapestry5/annotations/SessionAttribute.java    |   3 +-
 .../apache/tapestry5/annotations/SessionState.java |   2 +-
 .../corelib/base/AbstractComponentEventLink.java   |   4 +-
 .../tapestry5/corelib/base/AbstractField.java      |   2 +-
 .../corelib/base/AbstractInternalPage.java         |   2 +-
 .../tapestry5/corelib/base/AbstractLink.java       |   5 +-
 .../tapestry5/corelib/components/ActionLink.java   |   2 +-
 .../tapestry5/corelib/components/AjaxFormLoop.java |   1 +
 .../tapestry5/corelib/components/Alerts.java       |   4 +-
 .../tapestry5/corelib/components/Checklist.java    |   2 +-
 .../tapestry5/corelib/components/DevTool.java      |   8 +-
 .../tapestry5/corelib/components/EventLink.java    |   2 +-
 .../apache/tapestry5/corelib/components/Form.java  |   3 +-
 .../tapestry5/corelib/components/GridColumns.java  |   2 +-
 .../tapestry5/corelib/components/GridPager.java    |   3 +-
 .../tapestry5/corelib/components/Hidden.java       |   2 +-
 .../apache/tapestry5/corelib/components/Label.java |   3 +-
 .../tapestry5/corelib/components/LinkSubmit.java   |   2 +-
 .../tapestry5/corelib/components/PageLink.java     |   2 +-
 .../corelib/components/ProgressiveDisplay.java     |   1 +
 .../tapestry5/corelib/components/RadioGroup.java   |   2 +-
 .../tapestry5/corelib/components/Select.java       |   3 +-
 .../tapestry5/corelib/components/Submit.java       |   2 +-
 .../apache/tapestry5/corelib/components/Tree.java  |   1 +
 .../tapestry5/corelib/mixins/Autocomplete.java     |   1 +
 .../tapestry5/corelib/mixins/ZoneRefresh.java      |   1 +
 .../corelib/pages/ComponentLibraries.java          |   4 +-
 .../tapestry5/corelib/pages/ExceptionReport.java   |  15 +-
 .../tapestry5/corelib/pages/PageCatalog.java       |   4 +-
 .../tapestry5/corelib/pages/ServiceStatus.java     |   4 +-
 .../tapestry5/corelib/pages/T5Dashboard.java       |   3 +-
 .../internal/ContextResourceSymbolProvider.java    |   4 +-
 .../tapestry5/internal/InternalConstants.java      |  29 +-
 .../apache/tapestry5/internal/InternalSymbols.java |  14 -
 .../tapestry5/internal/TapestryInternalUtils.java  |   1 +
 .../internal/alerts/AlertManagerImpl.java          |   2 +-
 .../internal/pageload/PageLoaderImpl.java          |   2 +-
 .../internal/renderers/RequestRenderer.java        |   8 +-
 .../internal/services/AbstractAssetFactory.java    |   2 +-
 .../AbstractSessionPersistentFieldStrategy.java    |   4 +-
 .../services/AjaxComponentEventRequestHandler.java |   2 +-
 .../tapestry5/internal/services/AjaxFilter.java    |   2 +-
 .../AjaxLinkComponentEventResultProcessor.java     |   4 +-
 .../AjaxPageNameComponentEventResultProcessor.java |   4 +-
 .../services/AjaxPartialResponseRendererImpl.java  |   9 +-
 .../ApplicationStackTraceElementAnalyzer.java      |   4 +-
 .../internal/services/AssetDispatcher.java         |   6 +-
 .../internal/services/AssetSourceImpl.java         |   2 +-
 .../internal/services/CheckForUpdatesFilter.java   |   8 +-
 .../internal/services/ClasspathAssetFactory.java   |   2 +-
 .../services/ClientBehaviorSupportImpl.java        |   2 +-
 .../internal/services/ClientDataEncoderImpl.java   |   4 +-
 .../services/ClientPersistentFieldStorage.java     |   2 +-
 .../services/ClientPersistentFieldStorageImpl.java |   6 +-
 .../services/ClientPersistentFieldStrategy.java    |   2 +-
 .../services/ComponentEventDispatcher.java         |   6 +-
 .../services/ComponentEventLinkEncoderImpl.java    |  10 +-
 .../services/ComponentEventRequestHandlerImpl.java |   2 +-
 .../services/ComponentInstantiatorSourceImpl.java  |   4 +-
 .../services/ComponentMessagesSourceImpl.java      |   4 +-
 .../internal/services/ComponentSourceImpl.java     |   2 +-
 .../services/ComponentTemplateSourceImpl.java      |   4 +-
 .../internal/services/ContextAssetFactory.java     |   4 +-
 .../internal/services/ContextResource.java         |   2 +-
 .../tapestry5/internal/services/CookiesImpl.java   |   6 +-
 .../services/DefaultRequestExceptionHandler.java   |   6 +-
 .../services/DeferredResponseRenderer.java         |   2 +-
 .../services/EndOfRequestEventHubImpl.java         |   2 +-
 .../services/FlashPersistentFieldStrategy.java     |   4 +-
 .../HttpErrorComponentEventResultProcessor.java    |   2 +-
 .../internal/services/IgnoredPathsFilter.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          |   4 +-
 .../internal/services/LocalizationSetterImpl.java  |   2 +-
 .../internal/services/MarkupWriterFactoryImpl.java |   2 +-
 .../internal/services/PageContentTypeAnalyzer.java |   4 +-
 .../services/PageContentTypeAnalyzerImpl.java      |   6 +-
 .../PageNameComponentEventResultProcessor.java     |   2 +-
 .../internal/services/PageNameMetaInjector.java    |   2 +-
 .../internal/services/PageRenderDispatcher.java    |   6 +-
 .../services/PageRenderLinkSourceImpl.java         |   2 +-
 .../services/PageRenderRequestHandlerImpl.java     |   2 +-
 .../services/PageResponseRendererImpl.java         |   6 +-
 .../internal/services/PathConstructorImpl.java     |   3 +-
 .../ProductionModeUnknownComponentFilter.java      |   2 +-
 .../internal/services/ReloadHelperImpl.java        |   4 +-
 .../internal/services/RequestErrorFilter.java      |  10 +-
 .../internal/services/RequestOperationTracker.java |   2 +-
 .../internal/services/RequestPageCacheImpl.java    |   2 +-
 .../internal/services/RequestSecurityManager.java  |   4 +-
 .../services/RequestSecurityManagerImpl.java       |   8 +-
 .../internal/services/ResourceStreamerImpl.java    |  10 +-
 .../internal/services/ResponseRendererImpl.java    |   2 +-
 .../services/RestoreDirtySessionObjects.java       |   6 +-
 .../internal/services/RootPathDispatcher.java      |   6 +-
 ...SessionApplicationStatePersistenceStrategy.java |   4 +-
 .../services/SessionPersistentFieldStrategy.java   |   4 +-
 .../internal/services/StaticFilesFilter.java       |  10 +-
 .../services/StreamPageContentResultProcessor.java |   4 +-
 .../services/StreamResponseResultProcessor.java    |   2 +-
 .../services/ajax/AjaxFormUpdateFilter.java        |   2 +-
 .../services/ajax/AjaxResponseRendererImpl.java    |   2 +-
 .../services/assets/AssetPathConstructorImpl.java  |   4 +-
 .../internal/services/assets/CSSURLRewriter.java   |   2 +-
 .../assets/ClasspathAssetRequestHandler.java       |   4 +-
 .../services/assets/CompressionAnalyzerImpl.java   |   2 +-
 .../services/assets/ContentTypeAnalyzerImpl.java   |   2 +-
 .../assets/ContextAssetRequestHandler.java         |   4 +-
 .../internal/services/assets/DelegatingSRS.java    |   2 +-
 .../assets/JavaScriptStackAssemblerImpl.java       |   2 +-
 .../assets/JavaScriptStackMinimizeDisabler.java    |   2 +-
 .../services/assets/ResourceChangeTrackerImpl.java |   4 +-
 .../services/assets/StackAssetRequestHandler.java  |   4 +-
 .../services/assets/StreamableResourceImpl.java    |   4 +-
 .../assets/StreamableResourceSourceImpl.java       |   3 +-
 .../services/assets/UTF8ForTextAssets.java         |   2 +-
 .../exceptions/ExceptionReportWriterImpl.java      |  10 +-
 .../javascript/ConfigureHTMLElementFilter.java     |   4 +-
 .../JavaScriptStackPathConstructorImpl.java        |   2 +-
 .../services/javascript/ModuleDispatcher.java      |   6 +-
 .../services/javascript/ModuleManagerImpl.java     |   5 +-
 .../linktransform/LinkTransformerImpl.java         |   4 +-
 .../linktransform/LinkTransformerInterceptor.java  |   4 +-
 .../services/security/ClientWhitelistImpl.java     |   2 +-
 .../internal/services/security/LocalhostOnly.java  |   2 +-
 .../structure/ComponentPageElementImpl.java        |   1 +
 .../structure/ComponentPageElementResources.java   |   2 +-
 .../ComponentPageElementResourcesImpl.java         |   6 +-
 .../ComponentPageElementResourcesSourceImpl.java   |   5 +-
 .../structure/InternalComponentResourcesImpl.java  |   1 +
 .../apache/tapestry5/internal/structure/Page.java  |   2 +-
 .../internal/test/EndOfRequestCleanupFilter.java   |  10 +-
 .../tapestry5/internal/test/PageTesterContext.java |   2 +-
 .../tapestry5/internal/test/PageTesterModule.java  |  12 +-
 .../tapestry5/internal/test/PageTesterSession.java |   2 +-
 .../tapestry5/internal/test/TestableRequest.java   |   2 +-
 .../internal/test/TestableRequestImpl.java         |   6 +-
 .../tapestry5/internal/test/TestableResponse.java  |   6 +-
 .../internal/test/TestableResponseImpl.java        |   2 +-
 .../ActivationRequestParameterWorker.java          |   4 +-
 .../internal/transform/OnEventWorker.java          |   2 +-
 .../internal/transform/SessionAttributeWorker.java |   4 +-
 .../org/apache/tapestry5/modules/AssetsModule.java |  21 +-
 .../apache/tapestry5/modules/InternalModule.java   |   7 +-
 .../apache/tapestry5/modules/JavaScriptModule.java |   4 +-
 .../apache/tapestry5/modules/PageLoadModule.java   |   3 +-
 .../apache/tapestry5/modules/TapestryModule.java   | 626 ++++++++++-----------
 .../tapestry5/services/AssetRequestDispatcher.java |   2 +-
 .../tapestry5/services/ClientBehaviorSupport.java  |   2 +-
 .../services/ComponentEventLinkEncoder.java        |  11 +-
 .../services/ComponentEventResultProcessor.java    |   2 +-
 .../apache/tapestry5/services/ComponentSource.java |   2 +
 .../org/apache/tapestry5/services/Cookies.java     |   3 +-
 .../tapestry5/services/DelegatingRequest.java      |   3 +
 .../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 +-
 .../apache/tapestry5/services/PathConstructor.java |   4 +-
 .../tapestry5/services/ResponseRenderer.java       |   4 +-
 .../tapestry5/services/StreamPageContent.java      |   2 +-
 .../services/assets/AssetRequestHandler.java       |   4 +-
 .../services/assets/CompressionStatus.java         |   2 +-
 .../services/assets/ContentTypeAnalyzer.java       |   2 +-
 .../services/assets/ResourceTransformer.java       |   2 +-
 .../services/assets/ResponseCustomizer.java        |   4 +-
 .../services/assets/StreamableResource.java        |   2 +-
 .../services/assets/StreamableResourceSource.java  |   2 +-
 .../ComponentEventLinkTransformer.java             |   4 +-
 .../linktransform/PageRenderLinkTransformer.java   |   4 +-
 .../pageload/ComponentRequestSelectorAnalyzer.java |   2 +-
 .../services/security/WhitelistAnalyzer.java       |   2 +-
 .../java/org/apache/tapestry5/test/PageTester.java |  16 +-
 .../apache/tapestry5/test/TapestryTestCase.java    |  17 +-
 .../org/apache/tapestry5/util/ResponseWrapper.java |   6 +-
 .../apache/tapestry5/util/TextStreamResponse.java  |   6 +-
 .../corelib/components/PageLinkTest.groovy         |   2 +-
 .../integration/app5/components/Layout.groovy      |   4 +-
 .../integration/app5/pages/Error404.groovy         |   4 +-
 .../integration/app5/services/AppModule.groovy     |   2 +-
 .../symbolparam/components/Layout.groovy           |   4 +-
 .../ResponseCompressionAnalyzerTest.groovy         |   3 +-
 .../assets/AssetPathConstructorImplTest.groovy     |   4 +-
 .../ComponentPageElementResourcesImplTest.groovy   |   4 +-
 .../javascript/ModuleDispatcherTests.groovy        |   4 +-
 .../tapestry5/corelib/base/AbstractLinkTest.java   |   2 +-
 .../tapestry5/corelib/components/SelectTest.java   |   2 +-
 .../tapestry5/corelib/components/SubmitTest.java   |   2 +-
 .../activationctx/services/AppModule.java          |   3 +-
 .../activationctx2/services/AppModule.java         |   3 +-
 .../integration/app1/components/Border.java        |   2 +-
 .../integration/app1/pages/ActionViaLinkDemo.java  |   2 +-
 .../integration/app1/pages/AtInjectDemo.java       |   2 +-
 .../app1/pages/ClientPersistenceDemo.java          |   4 +-
 .../app1/pages/DecorateComponentEventLinkDemo.java |   2 +-
 .../app1/pages/DecoratePageRenderLinkDemo.java     |   2 +-
 .../integration/app1/pages/FormLinkParameters.java |   2 +-
 .../tapestry5/integration/app1/pages/Index.java    |   2 +-
 .../integration/app1/pages/InjectDemo.java         |   2 +-
 .../app1/pages/LinkQueryParameters.java            |   4 +-
 .../integration/app1/pages/Localization.java       |   2 +-
 .../app1/pages/MultiZoneUpdateInsideForm.java      |   2 +-
 .../integration/app1/pages/OnActivateRedirect.java |   2 +-
 .../app1/pages/RequestParameterDemo.java           |   2 +-
 .../app1/pages/SessionAttributeDemo.java           |   2 +-
 .../integration/app1/services/AppModule.java       |  13 +-
 .../app2/pages/TestPageForHttpHeaders.java         |   2 +-
 .../integration/app3/services/AppModule.java       |   7 +-
 .../cluster/data/ImmutableByAnnotation.java        |   2 +-
 .../integration/cluster/services/AppModule.java    |   2 +-
 .../services/AppComponentEventLinkTransformer.java |   4 +-
 .../integration/linktrans/services/AppModule.java  |   3 +-
 .../services/AppPageRenderLinkTransformer.java     |   4 +-
 .../integration/pagetester/PageTesterTest.java     |   4 +-
 .../integration/reload/services/AppModule.java     |   3 +-
 .../ContextResourceSymbolProviderTest.java         |   2 +-
 .../tapestry5/internal/ResponseImplTest.java       |   4 +-
 .../internal/ServletContextSymbolProviderTest.java |   1 +
 .../internal/SingleKeySymbolProviderTest.java      |   1 +
 .../internal/TapestryAppInitializerTest.java       |   1 +
 .../internal/services/BaseURLSourceImplTest.java   |   5 +-
 .../ClientPersistentFieldStorageImplTest.java      |   6 +-
 .../services/ComponentEventDispatcherTest.java     |   6 +-
 .../ComponentEventLinkEncoderImplTest.java         |   8 +-
 .../internal/services/ComponentSourceImplTest.java |   2 +-
 .../internal/services/ContextImplTest.java         |   3 +-
 .../internal/services/ContextResourceTest.java     |   2 +-
 .../DefaultRequestExceptionHandlerTest.java        |   6 +-
 .../services/EndOfRequestEventHubImplTest.java     |   4 +-
 .../services/FlashPersistentFieldStrategyTest.java |   4 +-
 .../services/ForceDevelopmentModeModule.java       |   7 +-
 .../internal/services/IgnoredPathsFilterTest.java  |   4 +-
 .../JSONArrayEventResultProcessorTest.java         |   2 +-
 .../tapestry5/internal/services/LinkImplTest.java  |   8 +-
 .../internal/services/LinkSourceImplTest.java      |   4 +-
 .../services/LocalizationSetterImplTest.java       |   2 +-
 .../services/PageRenderLinkSourceImplTest.java     |   2 +-
 .../services/PageRenderRequestHandlerImplTest.java |   2 +-
 .../internal/services/RequestImplTest.java         |  10 +-
 .../services/RequestSecurityManagerImplTest.java   |   8 +-
 .../services/ResponseRendererImplTest.java         |   4 +-
 ...ionApplicationStatePersistenceStrategyTest.java |   4 +-
 .../internal/services/SessionImplTest.java         |   7 +-
 .../SessionPersistentFieldStrategyTest.java        |   4 +-
 .../internal/services/StaticFilesFilterTest.java   |  10 +-
 .../internal/test/InternalBaseTestCase.java        |   6 +-
 .../org/apache/tapestry5/root/ContentTypeTest.java |   2 +-
 .../apache/tapestry5/root/PageCallbackTest.java    |   2 +-
 .../web/HibernatePersistenceConstants.java         |   2 +-
 .../EntityApplicationStatePersistenceStrategy.java |   4 +-
 .../internal/EntityPersistentFieldStrategy.java    |   2 +-
 .../hibernate/web/internal/PersistedEntity.java    |   2 +-
 .../hibernate/web/modules/HibernateModule.java     |   4 +-
 .../hibernate/web/pages/HibernateStatistics.java   |   4 +-
 .../java/org/example/app0/pages/SSOEntity.java     |   4 +-
 .../java/org/example/app0/services/AppModule.java  |   6 +-
 tapestry-http/build.gradle                         |  31 +
 .../tapestry-core/project.properties               |   0
 .../org/apache/tapestry5/http}/ContentType.java    |  14 +-
 .../main/java/org/apache/tapestry5/http}/Link.java |  16 +-
 .../org/apache/tapestry5/http}/LinkSecurity.java   |   2 +-
 .../http}/OptimizedSessionPersistedObject.java     |   4 +-
 .../org/apache/tapestry5/http}/TapestryFilter.java |  37 +-
 .../tapestry5/http/TapestryHttpConstants.java      |  28 +-
 .../http/TapestryHttpSymbolConstants.java          | 136 +++++
 .../http}/internal/AbstractContributionDef.java    |   2 +-
 .../internal/ServletContextSymbolProvider.java     |   4 +-
 .../http}/internal/SingleKeySymbolProvider.java    |   2 +-
 .../http}/internal/SyntheticModuleDef.java         |   2 +-
 .../SyntheticSymbolSourceContributionDef.java      |   2 +-
 .../http}/internal/TapestryAppInitializer.java     |  54 +-
 .../internal/TapestryHttpInternalConstants.java    |  45 ++
 .../http/internal/TapestryHttpInternalSymbols.java |  17 +-
 .../internal/gzip/BufferedGZipOutputStream.java    |  19 +-
 .../http}/internal/gzip/GZIPEnabledResponse.java   |  11 +-
 .../tapestry5/http}/internal/gzip/GZipFilter.java  |  19 +-
 .../internal/services/ApplicationGlobalsImpl.java  |   8 +-
 .../http}/internal/services/BaseURLSourceImpl.java |  12 +-
 .../internal/services/ClusteredSessionImpl.java    |   6 +-
 .../http}/internal/services/ContextImpl.java       |   4 +-
 .../DefaultSessionPersistedObjectAnalyzer.java     |  10 +-
 .../OptimizedSessionPersistedObjectAnalyzer.java   |   8 +-
 .../internal/services/RequestGlobalsImpl.java      |   8 +-
 .../http}/internal/services/RequestImpl.java       |  58 +-
 .../services/ResponseCompressionAnalyzerImpl.java  |  16 +-
 .../http}/internal/services/ResponseImpl.java      |  10 +-
 .../http}/internal/services/SessionImpl.java       |   4 +-
 .../http}/internal/services/SessionLock.java       |   2 +-
 .../internal/services/TapestrySessionFactory.java  |   6 +-
 .../services/TapestrySessionFactoryImpl.java       |  23 +-
 .../internal/util/DelegatingSymbolProvider.java    |   2 +-
 .../tapestry5/http/modules/TapestryHttpModule.java | 411 ++++++++++++++
 .../http}/services/ApplicationGlobals.java         |   6 +-
 .../http}/services/ApplicationInitializer.java     |   7 +-
 .../services/ApplicationInitializerFilter.java     |   6 +-
 .../tapestry5/http}/services/BaseURLSource.java    |  16 +-
 .../http/services}/CompressionAnalyzer.java        |   2 +-
 .../apache/tapestry5/http}/services/Context.java   |   2 +-
 .../tapestry5/http}/services/Dispatcher.java       |   4 +-
 .../http}/services/HttpServletRequestFilter.java   |   5 +-
 .../http}/services/HttpServletRequestHandler.java  |  11 +-
 .../apache/tapestry5/http}/services/Request.java   |   5 +-
 .../tapestry5/http}/services/RequestFilter.java    |   4 +-
 .../tapestry5/http}/services/RequestGlobals.java   |   7 +-
 .../tapestry5/http}/services/RequestHandler.java   |   8 +-
 .../apache/tapestry5/http}/services/Response.java  |   4 +-
 .../services/ResponseCompressionAnalyzer.java      |   7 +-
 .../services/ServletApplicationInitializer.java    |   6 +-
 .../ServletApplicationInitializerFilter.java       |   6 +-
 .../apache/tapestry5/http}/services/Session.java   |  14 +-
 .../services/SessionPersistedObjectAnalyzer.java   |   4 +-
 .../http/test/TapestryHttpIntegrationTests.java    |  32 ++
 .../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 +
 .../src/test/webapp/longfile.txt                   | 626 ++++++++++-----------
 .../org/example/testapp/services/AppModule.java    |   4 +-
 .../EntityApplicationStatePersistenceStrategy.java |   2 +-
 .../jpa/EntityPersistentFieldStrategy.java         |   2 +-
 .../tapestry5/internal/jpa/PersistedEntity.java    |   2 +-
 .../tapestry5/jpa/JpaPersistenceConstants.java     |   2 +-
 .../apache/tapestry5/jpa/modules/JpaModule.java    |   4 +-
 .../org/apache/tapestry5/jpa/test/JpaTest.java     |   2 +-
 .../apache/tapestry5/jpa/test/JpaTestModule.java   |   4 +-
 .../java/org/example/app1/pages/SSOEntity.java     |   4 +-
 .../java/org/example/app1/services/AppModule.java  |   4 +-
 .../java/org/example/app6/pages/SSOEntity.java     |   4 +-
 .../java/org/example/app6/services/AppModule.java  |   4 +-
 .../tapestry5/kaptcha/components/KaptchaImage.java |   4 +-
 .../test/java/kaptcha/demo/services/AppModule.java |   5 +-
 .../tapestry5/internal/spring/SpringModuleDef.java |   2 +-
 .../spring/TapestryApplicationContext.java         |   2 +-
 .../tapestry5/spring/TapestrySpringFilter.java     |   2 +-
 .../tapestry5/spring/modules/SpringModule.java     |   6 +-
 .../spring/TapestryApplicationContextTest.java     |   2 +-
 .../org/example/testapp/services/AppModule.java    |   4 +-
 .../testapp/services/SpringStatusProvider.java     |   2 +-
 .../org/example/testapp1/services/AppModule.java   |   4 +-
 .../apache/tapestry5/upload/components/Upload.java |   2 +-
 .../internal/services/MultipartDecoderImpl.java    |   4 +-
 .../services/MultipartServletRequestFilter.java    |   4 +-
 .../services/ParametersServletRequestWrapper.java  |   2 +-
 .../tapestry5/upload/modules/UploadModule.java     |   2 +-
 .../tapestry5/upload/components/UploadTest.java    |   2 +-
 .../MultipartServletRequestFilterTest.java         |   2 +-
 .../org/example/upload/services/AppModule.java     |   4 +-
 .../webresources/CoffeeScriptCompiler.java         |   2 +-
 .../DelegatingResourceTransformer.java             |   2 +-
 .../webresources/GoogleClosureMinimizer.java       |   2 +-
 .../webresources/LessResourceTransformer.java      |   3 +-
 .../ResourceTransformerFactoryImpl.java            |   3 +-
 .../internal/webresources/TypeScriptCompiler.java  |   2 +-
 .../tests/TypeScriptCompilerSpec.groovy            |   2 +-
 .../ImmutableSessionPersistedObject.java           |   4 +-
 383 files changed, 2360 insertions(+), 1661 deletions(-)

diff --git a/settings.gradle b/settings.gradle
index 5368408..ea133d0 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,4 +1,4 @@
-include "plastic", "tapestry5-annotations", "tapestry-test", "tapestry-func", "tapestry-ioc", "tapestry-json", "tapestry-core"
+include "plastic", "tapestry5-annotations", "tapestry-test", "tapestry-func", "tapestry-ioc", "tapestry-json", "tapestry-http", "tapestry-core"
 include "tapestry-hibernate-core", "tapestry-hibernate", "tapestry-jmx", "tapestry-upload", "tapestry-spring"
 include "tapestry-beanvalidator", "tapestry-jpa", "tapestry-kaptcha"
 include "tapestry-javadoc", "quickstart", "tapestry-clojure", "tapestry-mongodb"
diff --git a/tapestry-beanvalidator/src/test/java/org/example/testapp/services/AppModule.java b/tapestry-beanvalidator/src/test/java/org/example/testapp/services/AppModule.java
index 71f6836..3da7bf7 100644
--- a/tapestry-beanvalidator/src/test/java/org/example/testapp/services/AppModule.java
+++ b/tapestry-beanvalidator/src/test/java/org/example/testapp/services/AppModule.java
@@ -18,6 +18,7 @@ import org.apache.tapestry5.beanvalidator.modules.BeanValidatorModule;
 import org.apache.tapestry5.commons.Configuration;
 import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.ImportModule;
 
 @ImportModule(BeanValidatorModule.class)
@@ -26,7 +27,7 @@ public class AppModule
 
     public static void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
     {
-        configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, "false");
         configuration.add(SymbolConstants.HMAC_PASSPHRASE, "u93490jhsprf2904rh29-3uj");
     }
 
diff --git a/tapestry-core/build.gradle b/tapestry-core/build.gradle
index 0bf5c12..56cbbf3 100644
--- a/tapestry-core/build.gradle
+++ b/tapestry-core/build.gradle
@@ -15,6 +15,7 @@ dependencies {
     compile project(':tapestry-ioc')
     compile project(':tapestry-json')
     compile project(':beanmodel')
+    compile project(':tapestry-http')
 
     provided project(":tapestry-test")
     provided project(":tapestry-test-constants")
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/Asset.java b/tapestry-core/src/main/java/org/apache/tapestry5/Asset.java
index b18488e..4108a7d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/Asset.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/Asset.java
@@ -40,7 +40,7 @@ public interface Asset
      * checksum. This wasn't an issue in earlier releases where the clientURL incorporated a version number.
      *
      * Finally, starting in 5.4, this value will often be <em>variant</em>: the exact URL returned will depend on
-     * whether the underlying resource content is compressable, whether the current {@link org.apache.tapestry5.services.Request}
+     * whether the underlying resource content is compressable, whether the current {@link org.apache.tapestry5.http.services.Request}
      * supports compression.
      *
      * @see org.apache.tapestry5.services.AssetSource
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/BaseOptimizedSessionPersistedObject.java b/tapestry-core/src/main/java/org/apache/tapestry5/BaseOptimizedSessionPersistedObject.java
index b66acf5..f0f040c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/BaseOptimizedSessionPersistedObject.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/BaseOptimizedSessionPersistedObject.java
@@ -16,9 +16,11 @@ import java.io.IOException;
 import java.io.Serializable;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.tapestry5.http.OptimizedSessionPersistedObject;
+
 /**
  * Base implementation of
- * {@link org.apache.tapestry5.OptimizedSessionPersistedObject}. Subclasses
+ * {@link org.apache.tapestry5.http.OptimizedSessionPersistedObject}. Subclasses
  * should invoke {@link #markDirty()} after the internal state of the object changes.
  *
  * Due to the concurrent nature of session attributes it's important that markDirty occurs <strong>after</strong>
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResources.java b/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResources.java
index 23c23fa..306fc86 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResources.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResources.java
@@ -206,7 +206,7 @@ public interface ComponentResources extends ComponentResourcesCommon
 
     /**
      * Discards all persistent field changes for the page containing the component. Changes are eliminated from
-     * persistent storage (such as the {@link org.apache.tapestry5.services.Session}) which will take effect in the
+     * persistent storage (such as the {@link org.apache.tapestry5.http.services.Session}) which will take effect in the
      * <em>next</em> request (the attached page instance is not affected).
      */
     void discardPersistentFieldChanges();
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java b/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
index eeb66aa..5e5128c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
@@ -13,6 +13,7 @@
 package org.apache.tapestry5;
 
 import org.apache.tapestry5.commons.Locatable;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/CookieBuilder.java b/tapestry-core/src/main/java/org/apache/tapestry5/CookieBuilder.java
index 3f54318..076f41b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/CookieBuilder.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/CookieBuilder.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5;
 
-import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.http.services.Request;
 
 /**
  * A fluent API to create and write cookies. Used by the
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java b/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
index 223f4c8..9e72c10 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
@@ -12,6 +12,7 @@
 
 package org.apache.tapestry5;
 
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.util.IdAllocator;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
 import org.apache.tapestry5.services.ComponentSource;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/ExceptionHandlerAssistant.java b/tapestry-core/src/main/java/org/apache/tapestry5/ExceptionHandlerAssistant.java
index bfbc553..f260d6d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/ExceptionHandlerAssistant.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/ExceptionHandlerAssistant.java
@@ -12,6 +12,7 @@
 
 package org.apache.tapestry5;
 
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.services.RequestExceptionHandler;
 
 import java.io.IOException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java b/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java
index 18574b7..e2b1df4 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java
@@ -12,7 +12,8 @@
 
 package org.apache.tapestry5;
 
-import org.apache.tapestry5.annotations.ImmutableSessionPersistedObject;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.annotations.ImmutableSessionPersistedObject;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.PageRenderLinkSource;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/PersistenceConstants.java b/tapestry-core/src/main/java/org/apache/tapestry5/PersistenceConstants.java
index c722bd2..ddd38c4 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/PersistenceConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/PersistenceConstants.java
@@ -22,7 +22,7 @@ package org.apache.tapestry5;
 public class PersistenceConstants
 {
     /**
-     * The field's value is stored in the {@link org.apache.tapestry5.services.Session}.
+     * The field's value is stored in the {@link org.apache.tapestry5.http.services.Session}.
      */
     public static final String SESSION = "session";
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/StreamResponse.java b/tapestry-core/src/main/java/org/apache/tapestry5/StreamResponse.java
index 9b0ec89..bb2dba0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/StreamResponse.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/StreamResponse.java
@@ -14,12 +14,12 @@
 
 package org.apache.tapestry5;
 
-import org.apache.tapestry5.services.Response;
-
 import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.tapestry5.http.services.Response;
+
 /**
  * An alternate response from a component event handler method used to directly provide a stream of data to be sent to
  * the client, rather than indicating what page to send a render redirect request to.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java b/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
index 7b80cd4..4cb1f40 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
@@ -19,6 +19,7 @@ import org.apache.tapestry5.corelib.components.BeanEditForm;
 import org.apache.tapestry5.corelib.components.BeanEditor;
 import org.apache.tapestry5.corelib.components.Errors;
 import org.apache.tapestry5.corelib.mixins.FormGroup;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.internal.services.AssetDispatcher;
 import org.apache.tapestry5.modules.NoBootstrapModule;
 import org.apache.tapestry5.services.Html5Support;
@@ -39,25 +40,28 @@ public class SymbolConstants
      * Each modes can contribute a list (comma separated) of Module classes to be loaded during startup,
      * the order in which they appear is preserved.
      * The default value is: <code>production</code>.
+     * This is an alias for {@link TapestryHttpSymbolConstants.EXECUTION_MODE}.
      */
-    public static final String EXECUTION_MODE = "tapestry.execution-mode";
+    public static final String EXECUTION_MODE = TapestryHttpSymbolConstants.EXECUTION_MODE;
     /**
      * Indicates whether Tapestry is running in production mode or developer mode. This affects a large
      * number of Tapestry behaviors related to performance and security, including how exceptions are
      * reported, whether far-future expire headers are emitted, whether JavaScript files may be combined,
      * whether JSON is compressed, whether component field and parameter values are shadowed to instance
      * variables (to assist with debugging), and more.
+     * 
+     * This is an alias to {@link TapestryHttpSymbolConstants#PRODUCTION_MODE}.
      */
-    public static final String PRODUCTION_MODE = "tapestry.production-mode";
+    public static final String PRODUCTION_MODE = TapestryHttpSymbolConstants.PRODUCTION_MODE;
 
     /**
-     * A version of {@link #PRODUCTION_MODE} as a symbol reference. This can be used as the default value
+     * A version of {@link TapestryHttpSymbolConstants#PRODUCTION_MODE} as a symbol reference. This can be used as the default value
      * of other symbols, to indicate that their default matches whatever PRODUCTION_MODE is set to, which is quite
      * common.
      *
      * @since 5.2.0
      */
-    public static final String PRODUCTION_MODE_VALUE = String.format("${%s}", PRODUCTION_MODE);
+    public static final String PRODUCTION_MODE_VALUE = String.format("${%s}", TapestryHttpSymbolConstants.PRODUCTION_MODE);
 
     /**
      * The list of locales supported by the application; locales identified in the incoming request are "narrowed" to
@@ -101,8 +105,9 @@ public class SymbolConstants
     /**
      * The charset used when rendering page markup; the charset is also used as the request encoding when handling
      * incoming requests. The default is "UTF-8".
+     * This is an alias for {@link TapestryHttpSymbolConstants#CHARSET}
      */
-    public static final String CHARSET = "tapestry.charset";
+    public static final String CHARSET = TapestryHttpSymbolConstants.CHARSET;
 
     /**
      * Used as the default for the Form's autofocus and clientValidation parameters. If overridden to "false", then
@@ -129,11 +134,12 @@ public class SymbolConstants
     /**
      * Minimum output stream size, in bytes, before output is compressed using GZIP. Shorter streams are not compressed.
      * Tapestry buffers this amount and switches to a GZIP output stream as needed. The default is "100".
+     * This is an alias to {@link TapestryHttpSymbolConstants#MIN_GZIP_SIZE}.
      *
-     * @see #GZIP_COMPRESSION_ENABLED
+     * @see TapestryHttpSymbolConstants#GZIP_COMPRESSION_ENABLED
      * @since 5.1.0.0
      */
-    public static final String MIN_GZIP_SIZE = "tapestry.min-gzip-size";
+    public static final String MIN_GZIP_SIZE = TapestryHttpSymbolConstants.MIN_GZIP_SIZE;
 
     /**
      * Version number of the application. Prior to 5.4, this version number was integrated into asset URLs. Starting
@@ -141,12 +147,14 @@ public class SymbolConstants
      * for documentation purposes; it appears in the default exception report page, for example.
      *
      * The default value is "0.0.1".  In 5.3 and earlier, the default value was a random hexadecimal string.
+     * 
+     * This is an alias to {@link TapestryHttpSymbolConstants#APPLICATION_VERSION}.
      *
      * @see AssetDispatcher
      * @see AssetPathConstructor
      * @since 5.1.0.0
      */
-    public static final String APPLICATION_VERSION = "tapestry.application-version";
+    public static final String APPLICATION_VERSION = TapestryHttpSymbolConstants.APPLICATION_VERSION;
 
     /**
      * Used to omit the normal Tapestry framework generator meta tag. The meta tag is rendered by default, but clients
@@ -160,13 +168,14 @@ public class SymbolConstants
      * If "true" (the default) then GZip compression is enabled for dynamic requests and for static assets. If you are
      * using a server that handles GZip compression for you, or you don't want to use the extra processing power
      * necessary to GZIP requests, then override this to "false".
+     * This is an alias to {@link TapestryHttpSymbolConstants#GZIP_COMPRESSION_ENABLED}.
      *
-     * @see #MIN_GZIP_SIZE
-     * @see org.apache.tapestry5.services.ResponseCompressionAnalyzer
-     * @see org.apache.tapestry5.services.assets.CompressionAnalyzer
+     * @see TapestryHttpSymbolConstants#MIN_GZIP_SIZE
+     * @see org.apache.tapestry5.http.services.ResponseCompressionAnalyzer
+     * @see org.apache.tapestry5.http.services.CompressionAnalyzer
      * @since 5.1.0.0
      */
-    public static final String GZIP_COMPRESSION_ENABLED = "tapestry.gzip-compression-enabled";
+    public static final String GZIP_COMPRESSION_ENABLED = TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED;
 
     /**
      * If "true" (which itself defaults to production mode), then the {@link org.apache.tapestry5.annotations.Secure}
@@ -179,7 +188,7 @@ public class SymbolConstants
 
     /**
      * If "true" (the default), then the {@link org.apache.tapestry5.services.PersistentLocale} will be encoded into the
-     * {@link org.apache.tapestry5.Link} path by the {@link org.apache.tapestry5.services.ComponentEventLinkEncoder}
+     * {@link org.apache.tapestry5.http.Link} path by the {@link org.apache.tapestry5.services.ComponentEventLinkEncoder}
      * service. If overridden to "false" this does not occur, but you should provide a
      * {@link org.apache.tapestry5.services.LinkCreationListener2} (registered with the
      * {@link org.apache.tapestry5.services.LinkCreationHub}) in order to add the locale as a query parameter (or
@@ -249,7 +258,7 @@ public class SymbolConstants
     public static final String COMPACT_JSON = "tapestry.compact-json";
 
     /**
-     * If "true" and {@link #PRODUCTION_MODE} is off, comments will be rendered before and after the rendering of any
+     * If "true" and {@link TapestryHttpSymbolConstants#PRODUCTION_MODE} is off, comments will be rendered before and after the rendering of any
      * component
      * allowing more visibility into which components rendered which markup. Defaults to "false". Component render
      * tracing may be
@@ -265,28 +274,30 @@ public class SymbolConstants
      * in which case system will use request.getServerName(). Not the same as environment variable HOSTNAME, but you can
      * also
      * contribute "$HOSTNAME" as the value to make it the same as the environment variable HOSTNAME.
+     * This is an alias to {@link TapestryHttpSymbolConstants#HOSTNAME}.
      *
      * @since 5.3
      */
-    public static final String HOSTNAME = "tapestry.hostname";
+    public static final String HOSTNAME = TapestryHttpSymbolConstants.HOSTNAME;
 
     /**
      * The hostport that application should use when constructing an absolute URL. The default is "0", i.e. use the port
      * value from
-     * the request.
+     * the request. This is an alias to {@link TapestryHttpSymbolConstants#HOSTPORT}.
      *
      * @since 5.3
      */
-    public static final String HOSTPORT = "tapestry.hostport";
+    public static final String HOSTPORT = TapestryHttpSymbolConstants.HOSTPORT;
 
     /**
      * The secure (https) hostport that application should use when constructing an absolute URL. The default is "0",
      * i.e. use
      * the value from the request.
+     * This is an alias to {@link TapestryHttpSymbolConstnats#HOSTPORT_SECURE}.
      *
      * @since 5.3
      */
-    public static final String HOSTPORT_SECURE = "tapestry.hostport-secure";
+    public static final String HOSTPORT_SECURE = TapestryHttpSymbolConstants.HOSTPORT_SECURE;
 
     /**
      * If "true", then resources (individually or when aggregated into stacks) will be minimized via the
@@ -302,17 +313,19 @@ public class SymbolConstants
 
     /**
      * If "true" then at the end of each request the
-     * {@link org.apache.tapestry5.services.SessionPersistedObjectAnalyzer} will be called on each session persisted
+     * {@link org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer} will be called on each session persisted
      * object that was accessed during the request.
      *
      * This is provided as a performance enhancement for servers that do not use clustered sessions.
      *
      * The default is {@code true}, to preserve 5.2 behavior. For non-clustered applications (the majority), this value should be
      * overridden to {@code false}. A future release of Tapestry may change the default.
+     * 
+     * This is an alias to {@link TapestryHttpSymbolConstants.CLUSTERED_SESSIONS}.
      *
      * @since 5.3
      */
-    public static final String CLUSTERED_SESSIONS = "tapestry.clustered-sessions";
+    public static final String CLUSTERED_SESSIONS = TapestryHttpSymbolConstants.CLUSTERED_SESSIONS;
 
     /**
      * The name of a folder in which the Tapestry application executes. Prior to 5.3, a Tapestry application always responded to all
@@ -354,7 +367,7 @@ public class SymbolConstants
 
     /**
      * Prefix used for all module resources. This may contain slashes, but should not being or end with one.
-     * Tapestry will create two {@link org.apache.tapestry5.services.Dispatcher}s from this: one for normal
+     * Tapestry will create two {@link org.apache.tapestry5.http.services.Dispatcher}s from this: one for normal
      * modules, the other for GZip compressed modules (by appending ".gz" to this value).
      *
      * The default is "modules".
@@ -366,10 +379,11 @@ public class SymbolConstants
     /**
      * Identifies the context path of the application, as determined from {@link javax.servlet.ServletContext#getContextPath()}.
      * This is either a blank string or a string that starts with a slash but does not end with one.
+     * This is an alias to {@link TapestryHttpSymbolConstants.CONTEXT_PATH}.
      *
      * @since 5.4
      */
-    public static final String CONTEXT_PATH = "tapestry.context-path";
+    public static final String CONTEXT_PATH = TapestryHttpSymbolConstants.CONTEXT_PATH;
 
     /**
      * A passphrase used as the basis of hash-based message authentication (HMAC) for any object stream data stored on
@@ -425,10 +439,12 @@ public class SymbolConstants
      * between threads. Leaving this on the default will yield a more robust application; setting it to false may speed
      * up processing for more Ajax intensive applications (but care should then be given to ensuring that objects shared inside
      * the session are themselves immutable or thread-safe).
+     * 
+     * This is an alias to {@link TapestryHttpSymbolConstants#SESSION_LOCKING_ENABLED}.
      *
      * @since 5.4
      */
-    public static final String SESSION_LOCKING_ENABLED = "tapestry.session-locking-enabled";
+    public static final String SESSION_LOCKING_ENABLED = TapestryHttpSymbolConstants.SESSION_LOCKING_ENABLED;
 
     /**
      * If true (the default), then Tapestry will automatically include the "core" stack in all
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/TapestryConstants.java b/tapestry-core/src/main/java/org/apache/tapestry5/TapestryConstants.java
index cab8c46..7b39bae 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/TapestryConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/TapestryConstants.java
@@ -38,7 +38,7 @@ public class TapestryConstants
      * notification} after the initialization event; the LOOPBACK prevents this reset notification.
      *
      * @see ComponentEventLinkEncoder#createPageRenderLink(org.apache.tapestry5.services.PageRenderRequestParameters)
-     * @see ComponentEventLinkEncoder#decodePageRenderRequest(org.apache.tapestry5.services.Request)
+     * @see ComponentEventLinkEncoder#decodePageRenderRequest(org.apache.tapestry5.http.services.Request)
      * @see PageResetListener
      * @since 5.2.0
      */
@@ -61,7 +61,7 @@ public class TapestryConstants
     public static final String RESPONSE_RENDERER = "tapestry.response-renderer";
 
     /**
-     * Name of a {@link org.apache.tapestry5.services.Request} attribute, used
+     * Name of a {@link org.apache.tapestry5.http.services.Request} attribute, used
      * to disable JavaScript minimization during asset requests.
      *
      * @see org.apache.tapestry5.services.javascript.JavaScriptStack#getJavaScriptAggregationStrategy()
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/TapestryFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/TapestryFilter.java
index d4237e0..2795a03 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/TapestryFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/TapestryFilter.java
@@ -12,23 +12,9 @@
 
 package org.apache.tapestry5;
 
-import org.apache.tapestry5.internal.ServletContextSymbolProvider;
-import org.apache.tapestry5.internal.SingleKeySymbolProvider;
-import org.apache.tapestry5.internal.TapestryAppInitializer;
-import org.apache.tapestry5.internal.util.DelegatingSymbolProvider;
-import org.apache.tapestry5.ioc.Registry;
-import org.apache.tapestry5.ioc.def.ModuleDef;
-import org.apache.tapestry5.ioc.internal.services.SystemPropertiesSymbolProvider;
-import org.apache.tapestry5.ioc.services.SymbolProvider;
-import org.apache.tapestry5.services.HttpServletRequestHandler;
-import org.apache.tapestry5.services.ServletApplicationInitializer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import javax.servlet.ServletContext;
 
-import javax.servlet.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+import org.apache.tapestry5.modules.TapestryModule;
 
 /**
  * The TapestryFilter is responsible for intercepting all requests into the web application. It
@@ -51,100 +37,10 @@ import java.io.IOException;
  * to load. In this way, more precise control over the available modules can be obtained which is
  * often needed during testing.
  */
-public class TapestryFilter implements Filter
-{
-    private final Logger logger = LoggerFactory.getLogger(TapestryFilter.class);
-
-    private FilterConfig config;
-
-    private Registry registry;
-
-    private HttpServletRequestHandler handler;
-
-    /**
-     * Key under which the Tapestry IoC {@link org.apache.tapestry5.ioc.Registry} is stored in the
-     * ServletContext. This
-     * allows other code, beyond Tapestry, to obtain the Registry and, from it, any Tapestry
-     * services. Such code should
-     * be careful about invoking {@link org.apache.tapestry5.ioc.Registry#cleanupThread()}
-     * appropriately.
-     */
-    public static final String REGISTRY_CONTEXT_NAME = "org.apache.tapestry5.application-registry";
-
-    /**
-     * Initializes the filter using the {@link TapestryAppInitializer}. The application name is the
-     * capitalization of
-     * the filter name (as specified in web.xml).
-     */
-    public final void init(FilterConfig filterConfig) throws ServletException
-    {
-        config = filterConfig;
-
-        final ServletContext context = config.getServletContext();
-
-        String filterName = config.getFilterName();
-
-        SymbolProvider combinedProvider = new DelegatingSymbolProvider(
-                new SystemPropertiesSymbolProvider(),
-                new SingleKeySymbolProvider(SymbolConstants.CONTEXT_PATH, context.getContextPath()),
-                new ServletContextSymbolProvider(context),
-                new SingleKeySymbolProvider(SymbolConstants.EXECUTION_MODE, "production"));
-
-        String executionMode = combinedProvider.valueForSymbol(SymbolConstants.EXECUTION_MODE);
-
-        TapestryAppInitializer appInitializer = new TapestryAppInitializer(logger, combinedProvider,
-                filterName, executionMode);
-
-        appInitializer.addModules(provideExtraModuleDefs(context));
-        appInitializer.addModules(provideExtraModuleClasses(context));
-
-        registry = appInitializer.createRegistry();
-
-        context.setAttribute(REGISTRY_CONTEXT_NAME, registry);
-
-        ServletApplicationInitializer ai = registry.getService("ServletApplicationInitializer",
-                ServletApplicationInitializer.class);
-
-        ai.initializeApplication(context);
-
-        registry.performRegistryStartup();
-
-        handler = registry.getService("HttpServletRequestHandler", HttpServletRequestHandler.class);
-
-        init(registry);
-
-        appInitializer.announceStartup();
-
-        registry.cleanupThread();
-    }
-
-    protected final FilterConfig getFilterConfig()
-    {
-        return config;
-    }
-
-    /**
-     * Invoked from {@link #init(FilterConfig)} after the Registry has been created, to allow any
-     * additional
-     * initialization to occur. This implementation does nothing, and my be overridden in subclasses.
-     *
-     * @param registry
-     *         from which services may be extracted
-     * @throws ServletException
-     */
-    protected void init(Registry registry) throws ServletException
-    {
-
-    }
-
-    /**
-     * Overridden in subclasses to provide additional module definitions beyond those normally
-     * located. This
-     * implementation returns an empty array.
-     */
-    protected ModuleDef[] provideExtraModuleDefs(ServletContext context)
-    {
-        return new ModuleDef[0];
+public class TapestryFilter extends org.apache.tapestry5.http.TapestryFilter {
+    
+    public TapestryFilter() {
+        super();
     }
 
     /**
@@ -155,56 +51,7 @@ public class TapestryFilter implements Filter
      */
     protected Class[] provideExtraModuleClasses(ServletContext context)
     {
-        return new Class[0];
-    }
-
-    public final void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-            throws IOException, ServletException
-    {
-        try
-        {
-            boolean handled = handler.service((HttpServletRequest) request,
-                    (HttpServletResponse) response);
-
-            if (!handled)
-            {
-                chain.doFilter(request, response);
-            }
-        } finally
-        {
-            registry.cleanupThread();
-        }
+        return new Class[] { TapestryModule.class };
     }
 
-    /**
-     * Shuts down and discards the registry. Invokes
-     * {@link #destroy(org.apache.tapestry5.ioc.Registry)} to allow
-     * subclasses to perform any shutdown logic, then shuts down the registry, and removes it from
-     * the ServletContext.
-     */
-    public final void destroy()
-    {
-        destroy(registry);
-
-        registry.shutdown();
-
-        config.getServletContext().removeAttribute(REGISTRY_CONTEXT_NAME);
-
-        registry = null;
-        config = null;
-        handler = null;
-    }
-
-    /**
-     * Invoked from {@link #destroy()} to allow subclasses to add additional shutdown logic to the
-     * filter. The Registry
-     * will be shutdown after this call. This implementation does nothing, and may be overridden in
-     * subclasses.
-     *
-     * @param registry
-     */
-    protected void destroy(Registry registry)
-    {
-
-    }
 }
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/alerts/AlertStorage.java b/tapestry-core/src/main/java/org/apache/tapestry5/alerts/AlertStorage.java
index 21555c4..a51f29f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/alerts/AlertStorage.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/alerts/AlertStorage.java
@@ -14,9 +14,9 @@
 
 package org.apache.tapestry5.alerts;
 
-import org.apache.tapestry5.OptimizedSessionPersistedObject;
 import org.apache.tapestry5.commons.internal.util.LockSupport;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.OptimizedSessionPersistedObject;
 
 import java.io.Serializable;
 import java.util.Iterator;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/ActivationRequestParameter.java b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/ActivationRequestParameter.java
index 7dc171b..474b175 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/ActivationRequestParameter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/ActivationRequestParameter.java
@@ -14,8 +14,8 @@ package org.apache.tapestry5.annotations;
 
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.EventConstants;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.ValueEncoder;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.annotations.UseWith;
 import org.apache.tapestry5.services.ValueEncoderSource;
 
@@ -62,7 +62,7 @@ public @interface ActivationRequestParameter
 
     /**
      * If true then a null value is an error. If false, then a null value will result in no update to the field. Either way,
-     * a null field value will result in no query parameter added to a  {@linkplain org.apache.tapestry5.Link generated link}.
+     * a null field value will result in no query parameter added to a  {@linkplain org.apache.tapestry5.http.Link generated link}.
      *
      * @since 5.4
      */
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Persist.java b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Persist.java
index 0600882..6e8e93b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Persist.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/Persist.java
@@ -12,8 +12,8 @@
 
 package org.apache.tapestry5.annotations;
 
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.ioc.annotations.UseWith;
-import org.apache.tapestry5.services.Session;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/RequestParameter.java b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/RequestParameter.java
index fc94bd7..be48db3 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/RequestParameter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/RequestParameter.java
@@ -12,9 +12,9 @@
 
 package org.apache.tapestry5.annotations;
 
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.transform.OnEventWorker;
 import org.apache.tapestry5.ioc.annotations.UseWith;
-import org.apache.tapestry5.services.Request;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/SessionAttribute.java b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/SessionAttribute.java
index c81bb74..4dee941 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/SessionAttribute.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/SessionAttribute.java
@@ -21,8 +21,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
 import java.lang.annotation.Target;
 
 import static org.apache.tapestry5.ioc.annotations.AnnotationUseContext.*;
+
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.ioc.annotations.UseWith;
-import org.apache.tapestry5.services.Session;
 
 /**
  * Used to map a property of a page or component to value stored in session.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/SessionState.java b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/SessionState.java
index a94697e..80ae8e4 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/SessionState.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/SessionState.java
@@ -32,7 +32,7 @@ import static org.apache.tapestry5.ioc.annotations.AnnotationUseContext.*;
  * the {@link org.apache.tapestry5.services.ApplicationStateManager}. An SSO property is stored as
  * global session object (i.e., in the {@link javax.servlet.ServletContext}), accessible to every
  * page or component, but in fact the built-in strategies for SSO management are
- * session-specific, ultimately storing data in the {@link org.apache.tapestry5.services.Session}.
+ * session-specific, ultimately storing data in the {@link org.apache.tapestry5.http.services.Session}.
  * <p>
  * For each SSO property, you may declare a companion boolean property that can be checked to see if
  * the SSO has been created yet. The companion boolean property must have the same name as the SSO
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractComponentEventLink.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractComponentEventLink.java
index 9697fa4..64ac711 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractComponentEventLink.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractComponentEventLink.java
@@ -15,12 +15,12 @@
 package org.apache.tapestry5.corelib.base;
 
 import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractField.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractField.java
index 590edb4..25767d1 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractField.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractField.java
@@ -17,6 +17,7 @@ import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.commons.internal.util.TapestryException;
 import org.apache.tapestry5.corelib.mixins.DiscardBody;
 import org.apache.tapestry5.corelib.mixins.RenderInformals;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.BeanValidationContext;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.services.FormControlNameManager;
@@ -26,7 +27,6 @@ import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.ComponentDefaultProvider;
 import org.apache.tapestry5.services.Environment;
 import org.apache.tapestry5.services.FormSupport;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
 import java.io.Serializable;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractInternalPage.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractInternalPage.java
index e78a676..5223bdc 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractInternalPage.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractInternalPage.java
@@ -14,9 +14,9 @@ package org.apache.tapestry5.corelib.base;
 
 import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 
 /**
  * Base page for Tapestry internal pages, that should suppress any application changes to the core stack's CSS.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractLink.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractLink.java
index c2ec7bc..05050ab 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractLink.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/base/AbstractLink.java
@@ -19,6 +19,7 @@ import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.SetupRender;
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
@@ -107,7 +108,7 @@ public abstract class AbstractLink implements ClientElement
 
     /**
      * Adds any user-defined parameters as query parameters.
-     * @param link a {@link org.apache.tapestry5.Link}.
+     * @param link a {@link org.apache.tapestry5.http.Link}.
      */
     protected final void addParameters(Link link)
     {
@@ -128,7 +129,7 @@ public abstract class AbstractLink implements ClientElement
     }
 
     /**
-     * Returns the most recently rendered {@link org.apache.tapestry5.Link} for this component. Subclasses calculate
+     * Returns the most recently rendered {@link org.apache.tapestry5.http.Link} for this component. Subclasses calculate
      * their link value as they render, and the value is valid until the end of the request, or the next time the same
      * component renders itself (if inside a loop).
      * 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/ActionLink.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/ActionLink.java
index fc6a026..32f0bf1 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/ActionLink.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/ActionLink.java
@@ -15,9 +15,9 @@
 package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.EventConstants;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.annotations.Events;
 import org.apache.tapestry5.corelib.base.AbstractComponentEventLink;
+import org.apache.tapestry5.http.Link;
 
 /**
  * Component that triggers an action on the server with a subsequent full page refresh.
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 4db4fe9..789ca01 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
@@ -18,6 +18,7 @@ import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.services.TypeCoercer;
 import org.apache.tapestry5.corelib.internal.AjaxFormLoopContext;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.services.RequestConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.json.JSONObject;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Alerts.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Alerts.java
index 5392f26..cf6e064 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Alerts.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Alerts.java
@@ -13,15 +13,15 @@
 package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.alerts.Alert;
 import org.apache.tapestry5.alerts.AlertStorage;
 import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.corelib.base.BaseClientElement;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.json.JSONObject;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.compatibility.DeprecationWarning;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java
index 9dc7099..382f3b8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Checklist.java
@@ -18,8 +18,8 @@ import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.corelib.base.AbstractField;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DevTool.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DevTool.java
index a7c57cd..3c6f9f6 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DevTool.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DevTool.java
@@ -14,17 +14,17 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.BindingConstants;
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.alerts.AlertManager;
 import org.apache.tapestry5.annotations.Component;
 import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.services.ReloadHelper;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
 /**
@@ -70,7 +70,7 @@ public class DevTool
 
     @Property
     @Inject
-    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
     private boolean productionMode;
 
     @Component(inheritInformalParameters = true, parameters = {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/EventLink.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/EventLink.java
index b23325c..171220e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/EventLink.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/EventLink.java
@@ -14,9 +14,9 @@ package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.BindingConstants;
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.corelib.base.AbstractComponentEventLink;
+import org.apache.tapestry5.http.Link;
 
 /**
  * A close relative of {@link org.apache.tapestry5.corelib.components.ActionLink} except in two ways.
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 547ea1c..36477cb 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
@@ -25,6 +25,8 @@ import org.apache.tapestry5.corelib.internal.ComponentActionSink;
 import org.apache.tapestry5.corelib.internal.FormSupportImpl;
 import org.apache.tapestry5.corelib.internal.InternalFormSupport;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.BeanValidationContext;
 import org.apache.tapestry5.internal.BeanValidationContextImpl;
 import org.apache.tapestry5.internal.InternalConstants;
@@ -42,7 +44,6 @@ 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;
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 5e1e26d..35787e8 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
@@ -24,9 +24,9 @@ import org.apache.tapestry5.commons.Messages;
 import org.apache.tapestry5.grid.ColumnSort;
 import org.apache.tapestry5.grid.GridModel;
 import org.apache.tapestry5.grid.GridSortModel;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 
 import java.util.List;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridPager.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridPager.java
index bf0e0f8..f34e2a1 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridPager.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/GridPager.java
@@ -20,9 +20,10 @@ import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.commons.Messages;
 import org.apache.tapestry5.dom.Element;
 import org.apache.tapestry5.grid.GridDataSource;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 
 /**
  * Generates a series of links used to jump to a particular page index within the overall data set.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Hidden.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Hidden.java
index cb6f60a..a802f52 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Hidden.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Hidden.java
@@ -17,11 +17,11 @@ import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.ComponentDefaultProvider;
 import org.apache.tapestry5.services.FormSupport;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Label.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Label.java
index dd153b3..6dd403a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Label.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Label.java
@@ -18,6 +18,7 @@ import org.apache.tapestry5.annotations.HeartbeatDeferred;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
@@ -66,7 +67,7 @@ public class Label
     private JavaScriptSupport javaScriptSupport;
 
     @Inject
-    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
     private boolean productionMode;
 
     /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java
index 8d648fc..4ab44ed 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java
@@ -17,12 +17,12 @@ package org.apache.tapestry5.corelib.components;
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.corelib.SubmitMode;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.json.JSONArray;
 import org.apache.tapestry5.services.FormSupport;
 import org.apache.tapestry5.services.Heartbeat;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PageLink.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PageLink.java
index bd738be..5ce116e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PageLink.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/PageLink.java
@@ -13,10 +13,10 @@
 package org.apache.tapestry5.corelib.components;
 
 import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.corelib.base.AbstractLink;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.services.PageRenderLinkSource;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/ProgressiveDisplay.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/ProgressiveDisplay.java
index 1a4272f..69da03e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/ProgressiveDisplay.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/ProgressiveDisplay.java
@@ -17,6 +17,7 @@ import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Events;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.annotations.Inject;
 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/RadioGroup.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
index cbc3574..1591db6 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
@@ -19,12 +19,12 @@ import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Events;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.services.ComponentDefaultProvider;
 import org.apache.tapestry5.services.Environment;
 import org.apache.tapestry5.services.FormSupport;
-import org.apache.tapestry5.services.Request;
 
 /**
  * A wrapper component around some number of {@link Radio} components, used to organize the selection and define the
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 9439ec2..1c15c04 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
@@ -21,6 +21,8 @@ import org.apache.tapestry5.corelib.base.AbstractField;
 import org.apache.tapestry5.corelib.data.BlankOption;
 import org.apache.tapestry5.corelib.data.SecureOption;
 import org.apache.tapestry5.corelib.mixins.RenderDisabled;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.AbstractEventContext;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
@@ -30,7 +32,6 @@ import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 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;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java
index efb1c88..b96db2c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java
@@ -17,13 +17,13 @@ package org.apache.tapestry5.corelib.components;
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.corelib.SubmitMode;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.json.JSONArray;
 import org.apache.tapestry5.services.FormSupport;
 import org.apache.tapestry5.services.Heartbeat;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java
index 108d1bf..96f7752 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java
@@ -18,6 +18,7 @@ import org.apache.tapestry5.dom.Element;
 import org.apache.tapestry5.func.F;
 import org.apache.tapestry5.func.Flow;
 import org.apache.tapestry5.func.Worker;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.util.CaptureResultCallback;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.json.JSONObject;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/Autocomplete.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/Autocomplete.java
index 2a9cbad..8d72839 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/Autocomplete.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/Autocomplete.java
@@ -15,6 +15,7 @@ package org.apache.tapestry5.corelib.mixins;
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.AbstractEventContext;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.ioc.annotations.Inject;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java
index 68dec3b..372618c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java
@@ -18,6 +18,7 @@ import org.apache.tapestry5.annotations.Events;
 import org.apache.tapestry5.annotations.InjectContainer;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.corelib.components.Zone;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.util.CaptureResultCallback;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java
index 0384040..4ebaad2 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java
@@ -20,12 +20,12 @@ import java.util.Comparator;
 import java.util.List;
 
 import org.apache.tapestry5.Block;
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.annotations.Cached;
 import org.apache.tapestry5.annotations.OnEvent;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.UnknownActivationContextCheck;
 import org.apache.tapestry5.annotations.WhitelistAccessOnly;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.Description;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
@@ -90,7 +90,7 @@ public class ComponentLibraries
     private Block classesTable;
     
     @Inject
-    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
     @Property
     private boolean productionMode;
     
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 fa93da4..7d55aa1 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
@@ -14,7 +14,6 @@ package org.apache.tapestry5.corelib.pages;
 
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.alerts.AlertManager;
 import org.apache.tapestry5.annotations.ContentType;
@@ -26,6 +25,11 @@ import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.corelib.base.AbstractInternalPage;
 import org.apache.tapestry5.func.F;
 import org.apache.tapestry5.func.Mapper;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.internal.services.PageActivationContextCollector;
@@ -33,11 +37,8 @@ import org.apache.tapestry5.internal.services.ReloadHelper;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-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;
@@ -47,7 +48,7 @@ import java.util.regex.Pattern;
 
 /**
  * Responsible for reporting runtime exceptions. This page is quite verbose and is usually overridden in a production
- * application. When {@link org.apache.tapestry5.SymbolConstants#PRODUCTION_MODE} is "true", it is very abbreviated.
+ * application. When {@link org.apache.tapestry5.http.TapestryHttpSymbolConstants#PRODUCTION_MODE} is "true", it is very abbreviated.
  *
  * @see org.apache.tapestry5.corelib.components.ExceptionDisplay
  */
@@ -66,7 +67,7 @@ public class ExceptionReport extends AbstractInternalPage implements ExceptionRe
     private String attributeName;
 
     @Inject
-    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
     @Property(write = false)
     private boolean productionMode;
 
@@ -76,7 +77,7 @@ public class ExceptionReport extends AbstractInternalPage implements ExceptionRe
     private String tapestryVersion;
 
     @Inject
-    @Symbol(SymbolConstants.APPLICATION_VERSION)
+    @Symbol(TapestryHttpSymbolConstants.APPLICATION_VERSION)
     @Property(write = false)
     private String applicationVersion;
 
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 266343b..abaedb6 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
@@ -14,7 +14,6 @@
 
 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.Validate;
@@ -24,6 +23,7 @@ import org.apache.tapestry5.commons.Messages;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.corelib.components.Zone;
 import org.apache.tapestry5.func.*;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.internal.PageCatalogTotals;
 import org.apache.tapestry5.internal.services.PageSource;
 import org.apache.tapestry5.internal.services.ReloadHelper;
@@ -53,7 +53,7 @@ public class PageCatalog
 
     @Property
     @Inject
-    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
     private boolean productionMode;
 
     @Inject
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 8e9f2c1..cf98b1c 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
@@ -12,11 +12,11 @@
 
 package org.apache.tapestry5.corelib.pages;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.beanmodel.BeanModel;
 import org.apache.tapestry5.beanmodel.services.BeanModelSource;
 import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.Registry;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
@@ -51,7 +51,7 @@ public class ServiceStatus
 
     @Property
     @Inject
-    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
     private boolean productionMode;
 
     {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/T5Dashboard.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/T5Dashboard.java
index aa815f1..40c6bca 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/T5Dashboard.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/T5Dashboard.java
@@ -16,6 +16,7 @@ import org.apache.tapestry5.Block;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.annotations.*;
 import org.apache.tapestry5.corelib.base.AbstractInternalPage;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.dashboard.DashboardManager;
@@ -37,7 +38,7 @@ public class T5Dashboard extends AbstractInternalPage
 
     @Property
     @Inject
-    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
     private boolean productionMode;
 
     @Inject
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/ContextResourceSymbolProvider.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/ContextResourceSymbolProvider.java
index 56a74c5..bab4971 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/ContextResourceSymbolProvider.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/ContextResourceSymbolProvider.java
@@ -14,12 +14,12 @@
 
 package org.apache.tapestry5.internal;
 
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.internal.services.ContextResource;
 import org.apache.tapestry5.ioc.internal.services.ResourceSymbolProvider;
-import org.apache.tapestry5.services.Context;
 
 /**
- * Makes a {@link org.apache.tapestry5.commons.Resource} in the {@link org.apache.tapestry5.services.Context} available as a
+ * Makes a {@link org.apache.tapestry5.commons.Resource} in the {@link org.apache.tapestry5.http.services.Context} available as a
  * {@link org.apache.tapestry5.ioc.services.SymbolProvider}
  *
  * @since 5.1.0.5
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java
index 8f84269..36827e5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java
@@ -12,10 +12,12 @@
 
 package org.apache.tapestry5.internal;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.annotations.PublishEvent;
 import org.apache.tapestry5.commons.util.TimeInterval;
 import org.apache.tapestry5.dom.MarkupModel;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.TapestryHttpConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.services.javascript.JavaScriptStack;
 
@@ -25,13 +27,15 @@ public final class InternalConstants
      * Init parameter used to identify the package from which application classes are loaded. Such
      * classes are in the
      * pages, components and mixins sub-packages.
+     * @deprecated Use {@link TapestryHttpInternalConstants#TAPESTRY_APP_PACKAGE_PARAM} instead
      */
-    public static final String TAPESTRY_APP_PACKAGE_PARAM = "tapestry.app-package";
+    public static final String TAPESTRY_APP_PACKAGE_PARAM = TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM;
 
     /**
      * Turns off loading of default modules (as driven by JAR file Manifest entries).
+     * @deprecated Use {@link TapestryHttpInternalConstants#DISABLE_DEFAULT_MODULES_PARAM} instead
      */
-    public static final String DISABLE_DEFAULT_MODULES_PARAM = "tapestry.disable-default-modules";
+    public static final String DISABLE_DEFAULT_MODULES_PARAM = TapestryHttpInternalConstants.DISABLE_DEFAULT_MODULES_PARAM;
 
     /**
      * The name of the query parameter that stores the page activation context inside an action
@@ -64,11 +68,14 @@ public final class InternalConstants
     /**
      * Used in some Ajax scenarios to set the content type for the response early, when the Page
      * instance (the authority
-     * on content types) is known. The value is of type {@link org.apache.tapestry5.ContentType}.
+     * on content types) is known. The value is of type {@link org.apache.tapestry5.http.ContentType}.
      */
     public static final String CONTENT_TYPE_ATTRIBUTE_NAME = "content-type";
 
-    public static final String CHARSET_CONTENT_TYPE_PARAMETER = "charset";
+    /**
+     * @deprecated Use {@link TapestryHttpInternalConstants#CHARSET_CONTENT_TYPE_PARAMETER} instead
+     */
+    public static final String CHARSET_CONTENT_TYPE_PARAMETER = TapestryHttpInternalConstants.CHARSET_CONTENT_TYPE_PARAMETER;
 
     /**
      * As above but to store the name of the page. Necessary for determining the correct
@@ -88,25 +95,27 @@ public final class InternalConstants
      * suppressed. This is
      * useful when the code opening the response stream wants to explicitly control whether GZIP
      * compression occurs or
-     * not.
+     * not. Alias to {@link TapestryHttpConstants#SUPPRESS_COMPRESSION}.
      *
      * @since 5.1.0.0
      */
-    public static final String SUPPRESS_COMPRESSION = "tapestry.supress-compression";
+    public static final String SUPPRESS_COMPRESSION = TapestryHttpConstants.SUPPRESS_COMPRESSION;
 
     /**
      * Name of response header for content encoding.
      *
      * @since 5.1.0.0
+     * @deprecated Use {@link TapestryHttpInternalConstants#CONTENT_ENCODING_HEADER} instead
      */
-    public static final String CONTENT_ENCODING_HEADER = "Content-Encoding";
+    public static final String CONTENT_ENCODING_HEADER = TapestryHttpInternalConstants.CONTENT_ENCODING_HEADER;
 
     /**
      * Response content encoding value indicating use of GZIP compression.
      *
      * @since 5.1.0.0
+     * @deprecated Use {@link TapestryHttpInternalConstants#GZIP_CONTENT_ENCODING} instead
      */
-    public static final String GZIP_CONTENT_ENCODING = "gzip";
+    public static final String GZIP_CONTENT_ENCODING = TapestryHttpInternalConstants.GZIP_CONTENT_ENCODING;
 
     /**
      * Identifies the start of an expansion inside a template.
@@ -196,7 +205,7 @@ public final class InternalConstants
      * can most likely occur when a web spider, such as Google, uses an old component event URI from
      * a prior deployment, which no longer works in a new deployment, due to structural changes. Since
      * changing the APIs that significantly is forbidden, a non-null value is added as an
-     * {@link org.apache.tapestry5.services.Request} attribute.
+     * {@link org.apache.tapestry5.http.services.Request} attribute.
      *
      * @since 5.4
      */
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java
index b335ac9..c7fb218 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java
@@ -17,20 +17,6 @@ import org.apache.tapestry5.ioc.annotations.IncompatibleChange;
 public class InternalSymbols
 {
     /**
-     * The name of the application (i.e., the name of the application filter). Used, for example, to
-     * select additional resources related to the application.
-     */
-    public static final String APP_NAME = "tapestry.app-name";
-
-    /**
-     * The application package converted to a path ('.' becomes '/'). Useful for finding resources
-     * on the classpath relevant to the application.
-     *
-     * @since 5.1.0.0
-     */
-    public static final String APP_PACKAGE_PATH = "tapestry.app-package-path";
-
-    /**
      * Comma-separated list of pre-allocated Form component control names. Basically, this exists to
      * work around name collisions on the client side. Starting in 5.3, these names are
      * also pre-allocated as ids.
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 8678f84..49c544a 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
@@ -20,6 +20,7 @@ import org.apache.tapestry5.commons.Messages;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.func.Mapper;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.Orderable;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/alerts/AlertManagerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/alerts/AlertManagerImpl.java
index 2bfe6be..63ace7c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/alerts/AlertManagerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/alerts/AlertManagerImpl.java
@@ -15,10 +15,10 @@
 package org.apache.tapestry5.internal.alerts;
 
 import org.apache.tapestry5.alerts.*;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.services.PerThreadValue;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
 import org.apache.tapestry5.services.ApplicationStateManager;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.ajax.AjaxResponseRenderer;
 import org.apache.tapestry5.services.ajax.JavaScriptCallback;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
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 01cdf6c..781ca73 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
@@ -26,6 +26,7 @@ import org.apache.tapestry5.commons.util.AvailableValues;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.Stack;
 import org.apache.tapestry5.commons.util.UnknownValueException;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.bindings.LiteralBinding;
@@ -51,7 +52,6 @@ import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ComponentMessages;
 import org.apache.tapestry5.services.ComponentTemplates;
 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/renderers/RequestRenderer.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/renderers/RequestRenderer.java
index a03bd7a..b5ebd0c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/renderers/RequestRenderer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/renderers/RequestRenderer.java
@@ -15,14 +15,14 @@
 package org.apache.tapestry5.internal.renderers;
 
 import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Context;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Primary;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.Context;
 import org.apache.tapestry5.services.ObjectRenderer;
-import org.apache.tapestry5.services.Request;
 
 import java.util.List;
 
@@ -34,7 +34,7 @@ public class RequestRenderer implements ObjectRenderer<Request>
 
     private final ObjectRenderer masterObjectRenderer;
 
-    public RequestRenderer(@Primary ObjectRenderer masterObjectRenderer, Context context, @Symbol(SymbolConstants.CONTEXT_PATH) String contextPath)
+    public RequestRenderer(@Primary ObjectRenderer masterObjectRenderer, Context context, @Symbol(TapestryHttpSymbolConstants.CONTEXT_PATH) String contextPath)
     {
         this.masterObjectRenderer = masterObjectRenderer;
         this.context = context;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AbstractAssetFactory.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AbstractAssetFactory.java
index 1e1f263..f1cad8a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AbstractAssetFactory.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AbstractAssetFactory.java
@@ -19,10 +19,10 @@ import java.io.IOException;
 import org.apache.tapestry5.Asset;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.util.ExceptionUtils;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.AssetFactory;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.services.assets.AssetPathConstructor;
 import org.apache.tapestry5.services.assets.StreamableResource;
 import org.apache.tapestry5.services.assets.StreamableResourceProcessing;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AbstractSessionPersistentFieldStrategy.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AbstractSessionPersistentFieldStrategy.java
index 75b343d..7969234 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AbstractSessionPersistentFieldStrategy.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AbstractSessionPersistentFieldStrategy.java
@@ -20,11 +20,11 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.PersistentFieldChange;
 import org.apache.tapestry5.services.PersistentFieldStrategy;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 
 /**
  * Base class for strategies that store their values as keys in the session. Implements a uniform format for the keys,
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java
index 2f8e3ec..96ee1da 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java
@@ -18,6 +18,7 @@ import java.io.IOException;
 
 import org.apache.tapestry5.TrackableComponentEventCallback;
 import org.apache.tapestry5.commons.internal.util.TapestryException;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
@@ -28,7 +29,6 @@ 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.Request;
 
 /**
  * Similar to {@link ComponentEventRequestHandlerImpl}, but built around the Ajax request cycle, where the action
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 31f004a..2e16c12 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
@@ -17,11 +17,11 @@ package org.apache.tapestry5.internal.services;
 import java.io.IOException;
 
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.services.Request;
 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
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
index ada06d9..ba8eb9e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.services.Ajax;
@@ -23,7 +23,7 @@ import org.apache.tapestry5.services.ComponentEventResultProcessor;
 import java.io.IOException;
 
 /**
- * Handles {@link org.apache.tapestry5.Link} result types by building a JSON response with key "redirectURL".
+ * Handles {@link org.apache.tapestry5.http.Link} result types by building a JSON response with key "redirectURL".
  */
 @SuppressWarnings("all")
 public class AjaxLinkComponentEventResultProcessor implements ComponentEventResultProcessor<Link>
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
index 23ddaac..3bd0cd1 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.services.Ajax;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
 
@@ -41,7 +41,7 @@ public class AjaxPageNameComponentEventResultProcessor implements ComponentEvent
     }
 
     /**
-     * Obtains a page render {@link org.apache.tapestry5.Link} for the named, then builds a JSON response for the
+     * Obtains a page render {@link org.apache.tapestry5.http.Link} for the named, then builds a JSON response for the
      * client.
      * 
      * @param value
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java
index 4b95f37..89767ac 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPartialResponseRendererImpl.java
@@ -12,10 +12,13 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.TapestryConstants;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.annotations.Inject;
@@ -23,8 +26,6 @@ import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.services.MarkupWriterFactory;
 import org.apache.tapestry5.services.PartialMarkupRenderer;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
 
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -52,7 +53,7 @@ public class AjaxPartialResponseRendererImpl implements AjaxPartialResponseRende
                                            PartialMarkupRenderer partialMarkupRenderer,
 
                                            @Inject
-                                           @Symbol(SymbolConstants.CHARSET)
+                                           @Symbol(TapestryHttpSymbolConstants.CHARSET)
                                            String outputEncoding,
 
                                            @Symbol(SymbolConstants.COMPACT_JSON)
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStackTraceElementAnalyzer.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStackTraceElementAnalyzer.java
index 3af0ec0..c58aa23 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStackTraceElementAnalyzer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStackTraceElementAnalyzer.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.StackTraceElementAnalyzer;
 import org.apache.tapestry5.services.StackTraceElementClassConstants;
@@ -28,7 +28,7 @@ public class ApplicationStackTraceElementAnalyzer implements StackTraceElementAn
 {
     private final String appPackage;
 
-    public ApplicationStackTraceElementAnalyzer(@Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
+    public ApplicationStackTraceElementAnalyzer(@Symbol(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
     String appPackage)
     {
         this.appPackage = appPackage;
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 90387f2..1283675 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
@@ -17,15 +17,15 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 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.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/AssetSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetSourceImpl.java
index b54fd7d..0c6b391 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetSourceImpl.java
@@ -18,6 +18,7 @@ import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.internal.util.LockSupport;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.StrategyRegistry;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.AssetConstants;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
@@ -29,7 +30,6 @@ import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.ioc.services.ThreadLocale;
 import org.apache.tapestry5.services.AssetFactory;
 import org.apache.tapestry5.services.AssetSource;
-import org.apache.tapestry5.services.Request;
 import org.slf4j.Logger;
 
 import java.lang.ref.Reference;
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 4ebd7a4..99d2e55 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
@@ -17,16 +17,16 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.util.TimeInterval;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
 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.services.UpdateListenerHub;
-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 java.io.IOException;
 import java.util.concurrent.TimeUnit;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetFactory.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetFactory.java
index 7dccc3e..ca0702d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetFactory.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClasspathAssetFactory.java
@@ -16,13 +16,13 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.Asset;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
 import org.apache.tapestry5.ioc.annotations.Marker;
 import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
 import org.apache.tapestry5.services.AssetAlias;
 import org.apache.tapestry5.services.ClasspathAssetAliasManager;
 import org.apache.tapestry5.services.ClasspathProvider;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.services.assets.AssetPathConstructor;
 import org.apache.tapestry5.services.assets.StreamableResourceSource;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientBehaviorSupportImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientBehaviorSupportImpl.java
index a9d88b8..1bd14fe 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientBehaviorSupportImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientBehaviorSupportImpl.java
@@ -13,8 +13,8 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.Field;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.corelib.data.InsertPosition;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.services.ClientBehaviorSupport;
 
 public class ClientBehaviorSupportImpl implements ClientBehaviorSupport
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientDataEncoderImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientDataEncoderImpl.java
index 7a26009..ec6063a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientDataEncoderImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientDataEncoderImpl.java
@@ -16,7 +16,7 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.alerts.AlertManager;
-import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.internal.util.Base64InputStream;
 import org.apache.tapestry5.internal.util.MacOutputStream;
@@ -43,7 +43,7 @@ public class ClientDataEncoderImpl implements ClientDataEncoder
 
     public ClientDataEncoderImpl(URLEncoder urlEncoder, @Symbol(SymbolConstants.HMAC_PASSPHRASE) String passphrase,
                                  Logger logger,
-                                 @Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
+                                 @Symbol(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
                                  String applicationPackageName, AlertManager alertManager) throws UnsupportedEncodingException
     {
         this.urlEncoder = urlEncoder;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorage.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorage.java
index 6b6108e..e0e3e02 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorage.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorage.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.services.PersistentFieldChange;
 import org.apache.tapestry5.services.PersistentFieldStrategy;
 
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 fb5d221..4a3cbc3 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
@@ -12,17 +12,17 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
 import org.apache.tapestry5.ioc.ScopeConstants;
 import org.apache.tapestry5.ioc.annotations.Scope;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 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 635e295..2e0acda 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
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
 import org.apache.tapestry5.services.LinkCreationListener2;
 import org.apache.tapestry5.services.PageRenderRequestParameters;
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 5522d9f..5f421de 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
@@ -13,13 +13,13 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.InternalConstants;
 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 34abeab..9fab5ea 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
@@ -17,11 +17,15 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 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.InternalUtils;
-import org.apache.tapestry5.services.BaseURLSource;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ComponentEventLinkEncoder;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
@@ -30,8 +34,6 @@ 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;
@@ -75,7 +77,7 @@ public class ComponentEventLinkEncoderImpl implements ComponentEventLinkEncoder
                                          PersistentLocale persistentLocale,
                                          @Symbol(SymbolConstants.ENCODE_LOCALE_INTO_PATH)
                                          boolean encodeLocaleIntoPath,
-                                         @Symbol(SymbolConstants.CONTEXT_PATH)
+                                         @Symbol(TapestryHttpSymbolConstants.CONTEXT_PATH)
                                          String contextPath,
                                          @Symbol(SymbolConstants.APPLICATION_FOLDER) String applicationFolder,
                                          MetaDataLocator metaDataLocator,
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 e194e09..61076c6 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
@@ -15,6 +15,7 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.TrackableComponentEventCallback;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.internal.util.TapestryException;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.annotations.Primary;
@@ -22,7 +23,6 @@ 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 8dbcaff..09c568f 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
@@ -17,12 +17,12 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.services.PlasticProxyFactory;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.ExceptionUtils;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.model.MutableComponentModelImpl;
@@ -138,7 +138,7 @@ public final class ComponentInstantiatorSourceImpl implements ComponentInstantia
 
                                            Map<String, ControlledPackageType> configuration,
 
-                                           @Symbol(SymbolConstants.PRODUCTION_MODE)
+                                           @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                            boolean productionMode,
 
                                            ComponentClassResolver resolver,
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java
index 039ed8f..c88f9bc 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.Messages;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.services.InvalidationEventHub;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.PostInjection;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
@@ -69,7 +69,7 @@ public class ComponentMessagesSourceImpl implements ComponentMessagesSource, Upd
         }
     }
 
-    public ComponentMessagesSourceImpl(@Symbol(SymbolConstants.PRODUCTION_MODE)
+    public ComponentMessagesSourceImpl(@Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                        boolean productionMode, List<Resource> appCatalogResources, PropertiesFileParser parser,
                                        ComponentResourceLocator resourceLocator, ClasspathURLConverter classpathURLConverter)
     {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
index 28dd8b5..63cea07 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
@@ -15,13 +15,13 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ComponentSource;
-import org.apache.tapestry5.services.RequestGlobals;
 
 @SuppressWarnings("all")
 public class ComponentSourceImpl implements ComponentSource
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java
index 43cde62..88b2d52 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java
@@ -12,13 +12,13 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.TapestryConstants;
 import org.apache.tapestry5.commons.Location;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.services.InvalidationEventHub;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.MultiKey;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.internal.event.InvalidationEventHubImpl;
 import org.apache.tapestry5.internal.parser.ComponentTemplate;
 import org.apache.tapestry5.internal.parser.TemplateToken;
@@ -102,7 +102,7 @@ public final class ComponentTemplateSourceImpl extends InvalidationEventHubImpl
     };
 
     public ComponentTemplateSourceImpl(@Inject
-                                       @Symbol(SymbolConstants.PRODUCTION_MODE)
+                                       @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                        boolean productionMode, TemplateParser parser, ComponentResourceLocator locator,
                                        ClasspathURLConverter classpathURLConverter)
     {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextAssetFactory.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextAssetFactory.java
index 3b44454..a468096 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextAssetFactory.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextAssetFactory.java
@@ -16,10 +16,10 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.Asset;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.services.Context;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
 import org.apache.tapestry5.services.AssetFactory;
-import org.apache.tapestry5.services.Context;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.services.assets.AssetPathConstructor;
 import org.apache.tapestry5.services.assets.StreamableResourceSource;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
index 0ff3223..9391899 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.ioc.internal.util.AbstractResource;
-import org.apache.tapestry5.services.Context;
 
 import java.io.File;
 import java.net.MalformedURLException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CookiesImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CookiesImpl.java
index 58e18b2..5d898a5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CookiesImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CookiesImpl.java
@@ -17,12 +17,12 @@ package org.apache.tapestry5.internal.services;
 import javax.servlet.http.Cookie;
 
 import org.apache.tapestry5.CookieBuilder;
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.util.TimeInterval;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.IntermediateType;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.Cookies;
-import org.apache.tapestry5.services.Request;
 
 /**
  * Implementation of the {@link org.apache.tapestry5.services.Cookies} service interface.
@@ -53,7 +53,7 @@ public class CookiesImpl implements Cookies
 
                        CookieSink cookieSink,
 
-                       @Symbol(SymbolConstants.CONTEXT_PATH)
+                       @Symbol(TapestryHttpSymbolConstants.CONTEXT_PATH)
                        String contextPath,
 
                        @Symbol("tapestry.default-cookie-max-age") @IntermediateType(TimeInterval.class)
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 ee85b08..b512990 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
@@ -14,11 +14,13 @@ package org.apache.tapestry5.internal.services;
 
 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.commons.internal.util.TapestryException;
 import org.apache.tapestry5.commons.util.ExceptionUtils;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.ServiceResources;
@@ -28,9 +30,7 @@ import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.runtime.ComponentEventException;
 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 08cd973..a52eb42 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
@@ -16,13 +16,13 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.TapestryConstants;
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.OperationTracker;
 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/EndOfRequestEventHubImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EndOfRequestEventHubImpl.java
index e0cf073..8b5eabc 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EndOfRequestEventHubImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EndOfRequestEventHubImpl.java
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.events.EndOfRequestListener;
-import org.apache.tapestry5.services.RequestGlobals;
 
 import java.util.List;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/FlashPersistentFieldStrategy.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/FlashPersistentFieldStrategy.java
index fca9585..51a7db6 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/FlashPersistentFieldStrategy.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/FlashPersistentFieldStrategy.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 
 /**
  * The "flash" strategy stores data inside the {@link Session session}, just like {@link
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/HttpErrorComponentEventResultProcessor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/HttpErrorComponentEventResultProcessor.java
index 7404c81..0599d90 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/HttpErrorComponentEventResultProcessor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/HttpErrorComponentEventResultProcessor.java
@@ -14,9 +14,9 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
 import org.apache.tapestry5.services.HttpError;
-import org.apache.tapestry5.services.Response;
 
 import java.io.IOException;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/IgnoredPathsFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/IgnoredPathsFilter.java
index 862b9b8..af33367 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/IgnoredPathsFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/IgnoredPathsFilter.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.services.HttpServletRequestFilter;
-import org.apache.tapestry5.services.HttpServletRequestHandler;
+import org.apache.tapestry5.http.services.HttpServletRequestFilter;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalComponentInvalidationEventHubImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalComponentInvalidationEventHubImpl.java
index fe43063..e536a77 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalComponentInvalidationEventHubImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalComponentInvalidationEventHubImpl.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.internal.event.InvalidationEventHubImpl;
 import org.apache.tapestry5.ioc.annotations.PostInjection;
 import org.apache.tapestry5.ioc.annotations.Symbol;
@@ -22,7 +22,7 @@ import org.apache.tapestry5.ioc.annotations.Symbol;
 public class InternalComponentInvalidationEventHubImpl extends InvalidationEventHubImpl implements
         InternalComponentInvalidationEventHub
 {
-    public InternalComponentInvalidationEventHubImpl(@Symbol(SymbolConstants.PRODUCTION_MODE)
+    public InternalComponentInvalidationEventHubImpl(@Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                                      boolean productionMode)
     {
         super(productionMode);
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java
index 0e650b9..9db611c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessor.java
@@ -12,13 +12,14 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.json.JSONArray;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
-import org.apache.tapestry5.services.Response;
 
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -33,7 +34,7 @@ public class JSONArrayEventResultProcessor implements ComponentEventResultProces
 
     public JSONArrayEventResultProcessor(Response response,
 
-                                         @Symbol(SymbolConstants.CHARSET)
+                                         @Symbol(TapestryHttpSymbolConstants.CHARSET)
                                          String outputEncoding,
 
                                          @Symbol(SymbolConstants.COMPACT_JSON)
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkDecorationListener.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkDecorationListener.java
index ba0659a..fe1eaa3 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkDecorationListener.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkDecorationListener.java
@@ -15,7 +15,7 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.EventConstants;
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.services.ComponentClassResolver;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java
index fafcad5..7531062 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkImpl.java
@@ -14,12 +14,12 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
-import org.apache.tapestry5.LinkSecurity;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.LinkSecurity;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.BaseURLSource;
 import org.apache.tapestry5.services.ContextPathEncoder;
-import org.apache.tapestry5.services.Response;
 
 import java.util.Arrays;
 import java.util.List;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSource.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSource.java
index 40d62ba..9b416d3 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSource.java
@@ -12,14 +12,14 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
 import org.apache.tapestry5.services.LinkCreationHub;
 import org.apache.tapestry5.services.LinkCreationListener2;
 
 /**
- * A source for {@link org.apache.tapestry5.Link} objects.
+ * A source for {@link org.apache.tapestry5.http.Link} objects.
  *
  * @see org.apache.tapestry5.services.LinkCreationListener2
  * @since 5.1.0.0
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java
index eb485ed..eaf9128 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LinkSourceImpl.java
@@ -16,9 +16,10 @@ package org.apache.tapestry5.internal.services;
 
 import java.util.List;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.commons.services.TypeCoercer;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
@@ -29,7 +30,6 @@ import org.apache.tapestry5.services.LinkCreationHub;
 import org.apache.tapestry5.services.LinkCreationListener;
 import org.apache.tapestry5.services.LinkCreationListener2;
 import org.apache.tapestry5.services.PageRenderRequestParameters;
-import org.apache.tapestry5.services.RequestGlobals;
 
 @SuppressWarnings("all")
 public class LinkSourceImpl implements LinkSource, LinkCreationHub
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LocalizationSetterImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LocalizationSetterImpl.java
index 6cabf69..1976d39 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LocalizationSetterImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LocalizationSetterImpl.java
@@ -24,6 +24,7 @@ import org.apache.tapestry5.OptionModel;
 import org.apache.tapestry5.SelectModel;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.OptionModelImpl;
 import org.apache.tapestry5.internal.SelectModelImpl;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
@@ -31,7 +32,6 @@ import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.ThreadLocale;
 import org.apache.tapestry5.services.LocalizationSetter;
 import org.apache.tapestry5.services.PersistentLocale;
-import org.apache.tapestry5.services.Request;
 
 /**
  * Given a set of supported locales, for a specified desired locale, sets the current thread's locale to a supported
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterFactoryImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterFactoryImpl.java
index 3a875c9..1b24521 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterFactoryImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterFactoryImpl.java
@@ -16,12 +16,12 @@ package org.apache.tapestry5.internal.services;
 
 import java.util.List;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.dom.DefaultMarkupModel;
 import org.apache.tapestry5.dom.Html5MarkupModel;
 import org.apache.tapestry5.dom.MarkupModel;
 import org.apache.tapestry5.dom.XMLMarkupModel;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.internal.parser.DTDToken;
 import org.apache.tapestry5.internal.parser.TemplateToken;
 import org.apache.tapestry5.internal.parser.TokenType;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageContentTypeAnalyzer.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageContentTypeAnalyzer.java
index 5a3059b..79191f5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageContentTypeAnalyzer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageContentTypeAnalyzer.java
@@ -14,13 +14,13 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.ContentType;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.internal.structure.Page;
 
 public interface PageContentTypeAnalyzer
 {
     /**
-     * Analyzes the meta-data for the page and identifies the correct {@link org.apache.tapestry5.ContentType}
+     * Analyzes the meta-data for the page and identifies the correct {@link org.apache.tapestry5.http.ContentType}
      * (including encoding).
      *
      * @param page to be rendered
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageContentTypeAnalyzerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageContentTypeAnalyzerImpl.java
index 322ebc7..b73e5e7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageContentTypeAnalyzerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageContentTypeAnalyzerImpl.java
@@ -13,9 +13,9 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.MetaDataConstants;
-import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.MetaDataLocator;
@@ -28,7 +28,7 @@ public class PageContentTypeAnalyzerImpl implements PageContentTypeAnalyzer
 
     public PageContentTypeAnalyzerImpl(MetaDataLocator metaDataLocator,
 
-    @Symbol(SymbolConstants.CHARSET)
+    @Symbol(TapestryHttpSymbolConstants.CHARSET)
     String outputCharset)
     {
         this.metaDataLocator = metaDataLocator;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java
index f08f520..f4c6ddb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.annotations.Primary;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
 import org.apache.tapestry5.services.Traditional;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameMetaInjector.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameMetaInjector.java
index 889bfef..36c18dd 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameMetaInjector.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameMetaInjector.java
@@ -17,9 +17,9 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.dom.Document;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.services.MarkupRenderer;
 import org.apache.tapestry5.services.MarkupRendererFilter;
-import org.apache.tapestry5.services.RequestGlobals;
 
 /**
  * Injects a {@code <meta/>} element into the {@code <head/>} to identify the Tapestry page name.
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 5f9fcbc..fd9ae07 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
@@ -13,13 +13,13 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.InternalConstants;
 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/PageRenderLinkSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderLinkSourceImpl.java
index 8152a33..5b70184 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderLinkSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderLinkSourceImpl.java
@@ -16,8 +16,8 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.services.PageRenderLinkSource;
 import org.apache.tapestry5.services.ComponentClassResolver;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.http.Link;
 
 public class PageRenderLinkSourceImpl implements PageRenderLinkSource
 {
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 f1d633a..9a1d930 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
@@ -15,13 +15,13 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.services.Request;
 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.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/PageResponseRendererImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageResponseRendererImpl.java
index 71bf591..116be19 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageResponseRendererImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageResponseRendererImpl.java
@@ -17,12 +17,12 @@ package org.apache.tapestry5.internal.services;
 import java.io.IOException;
 import java.io.PrintWriter;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.services.MarkupWriterFactory;
-import org.apache.tapestry5.services.RequestGlobals;
-import org.apache.tapestry5.services.Response;
 import org.slf4j.Logger;
 
 public class PageResponseRendererImpl implements PageResponseRenderer
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PathConstructorImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PathConstructorImpl.java
index c8ac646..ee26f0c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PathConstructorImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PathConstructorImpl.java
@@ -15,6 +15,7 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.PathConstructor;
 
@@ -23,7 +24,7 @@ public class PathConstructorImpl implements PathConstructor
     private final String clientPrefix, dispatchPrefix;
 
     public PathConstructorImpl(
-            @Symbol(SymbolConstants.CONTEXT_PATH) String contextPath,
+            @Symbol(TapestryHttpSymbolConstants.CONTEXT_PATH) String contextPath,
             @Symbol(SymbolConstants.APPLICATION_FOLDER) String applicationFolder)
     {
         StringBuilder b = new StringBuilder("/");
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 34f631e..3563d2f 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
@@ -14,13 +14,13 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.util.UnknownValueException;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.Page;
 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/ReloadHelperImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ReloadHelperImpl.java
index 923a047..3813d12 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ReloadHelperImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ReloadHelperImpl.java
@@ -14,9 +14,9 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.alerts.AlertManager;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 
 import java.util.List;
@@ -29,7 +29,7 @@ public class ReloadHelperImpl implements ReloadHelper
 
     private final List<Runnable> callbacks = CollectionFactory.newThreadSafeList();
 
-    public ReloadHelperImpl(AlertManager alertManager, @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode)
+    public ReloadHelperImpl(AlertManager alertManager, @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE) boolean productionMode)
     {
         this.alertManager = alertManager;
         this.productionMode = productionMode;
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 7c259e0..20dc209 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
@@ -3,14 +3,14 @@ package org.apache.tapestry5.internal.services;
 import java.io.IOException;
 
 import org.apache.tapestry5.beanmodel.services.*;
-import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
 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
+ * Filter for the {@link org.apache.tapestry5.http.services.RequestHandler} pipeline used to intercept and report
  * exceptions.
  */
 public class RequestErrorFilter implements RequestFilter
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 6c37c8b..49cf464 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
@@ -15,6 +15,7 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.OperationTracker;
@@ -22,7 +23,6 @@ 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/RequestPageCacheImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCacheImpl.java
index ba3b288..457b409 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCacheImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCacheImpl.java
@@ -16,6 +16,7 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.ExceptionUtils;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.ioc.ScopeConstants;
@@ -23,7 +24,6 @@ import org.apache.tapestry5.ioc.annotations.PostInjection;
 import org.apache.tapestry5.ioc.annotations.Scope;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
 import org.apache.tapestry5.services.ComponentClassResolver;
-import org.apache.tapestry5.services.RequestGlobals;
 import org.slf4j.Logger;
 
 import java.util.Map;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestSecurityManager.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestSecurityManager.java
index 7321b40..ece9fcd 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestSecurityManager.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestSecurityManager.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.LinkSecurity;
+import org.apache.tapestry5.http.LinkSecurity;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
 import org.apache.tapestry5.services.PageRenderRequestParameters;
 
@@ -24,7 +24,7 @@ import java.io.IOException;
  * Used to manage the relationship between the security of a request and the security of a page. By secure, we mean
  * whether a request uses HTTPS and whether a page demands the use of HTTPS.
  *
- * @see org.apache.tapestry5.services.Request#isSecure()
+ * @see org.apache.tapestry5.http.services.Request#isSecure()
  */
 public interface RequestSecurityManager
 {
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 63c13b3..db56e7b 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
@@ -14,18 +14,18 @@
 
 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.SymbolConstants;
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.LinkSecurity;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 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/ResourceStreamerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java
index fa6b6a3..c803282 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java
@@ -15,6 +15,10 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.Asset;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
 import org.apache.tapestry5.ioc.IOOperation;
@@ -22,8 +26,6 @@ import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.ioc.annotations.InjectService;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.AssetFactory;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.assets.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -63,7 +65,7 @@ public class ResourceStreamerImpl implements ResourceStreamer
 
                                 OperationTracker tracker,
 
-                                @Symbol(SymbolConstants.PRODUCTION_MODE)
+                                @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                 boolean productionMode,
 
                                 ResourceChangeTracker resourceChangeTracker,
@@ -214,7 +216,7 @@ public class ResourceStreamerImpl implements ResourceStreamer
 
         if (streamable.getCompression() == CompressionStatus.COMPRESSED)
         {
-            response.setHeader(InternalConstants.CONTENT_ENCODING_HEADER, InternalConstants.GZIP_CONTENT_ENCODING);
+            response.setHeader(TapestryHttpInternalConstants.CONTENT_ENCODING_HEADER, TapestryHttpInternalConstants.GZIP_CONTENT_ENCODING);
         }
 
         ResponseCustomizer responseCustomizer = streamable.getResponseCustomizer();
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseRendererImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseRendererImpl.java
index a8952ca..ac48ce3 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseRendererImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseRendererImpl.java
@@ -16,7 +16,7 @@ package org.apache.tapestry5.internal.services;
 
 import java.io.IOException;
 
-import org.apache.tapestry5.ContentType;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.services.ResponseRenderer;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RestoreDirtySessionObjects.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RestoreDirtySessionObjects.java
index 95902e8..46f003a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RestoreDirtySessionObjects.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RestoreDirtySessionObjects.java
@@ -14,12 +14,12 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.events.EndOfRequestListener;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 
 /**
- * A listener that invokes {@link org.apache.tapestry5.services.Session#restoreDirtyObjects()}.
+ * A listener that invokes {@link org.apache.tapestry5.http.services.Session#restoreDirtyObjects()}.
  */
 public class RestoreDirtySessionObjects implements EndOfRequestListener
 {
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 610a052..4b82e61 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
@@ -17,15 +17,15 @@ 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.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 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/SessionApplicationStatePersistenceStrategy.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
index a459ae0..1840d8e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.services.ApplicationStateCreator;
 import org.apache.tapestry5.services.ApplicationStatePersistenceStrategy;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 
 /**
  * Stores ASOs in the {@link Session}, which will be created as necessary.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionPersistentFieldStrategy.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionPersistentFieldStrategy.java
index d53d910..b09a1f9 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionPersistentFieldStrategy.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionPersistentFieldStrategy.java
@@ -12,8 +12,8 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 
 /**
  * A strategy for storing persistent page properties into the {@link Session session}.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StaticFilesFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StaticFilesFilter.java
index a282e17..7001db7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StaticFilesFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StaticFilesFilter.java
@@ -20,11 +20,11 @@ import java.net.URL;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.tapestry5.TapestryConstants;
-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.apache.tapestry5.http.services.Context;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
 
 /**
  * Identifies requests that are for actual resource files in the context. For those, Tapestry allows the servlet
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 141c5c1..4d18b6a 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
@@ -18,6 +18,8 @@ import org.apache.tapestry5.EventContext;
 import org.apache.tapestry5.TapestryConstants;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.ioc.IOOperation;
@@ -25,8 +27,6 @@ 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/StreamResponseResultProcessor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamResponseResultProcessor.java
index a2b6e6a..29dd614 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamResponseResultProcessor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StreamResponseResultProcessor.java
@@ -20,10 +20,10 @@ import java.io.InputStream;
 import java.io.OutputStream;
 
 import org.apache.tapestry5.StreamResponse;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
-import org.apache.tapestry5.services.Response;
 
 public class StreamResponseResultProcessor implements ComponentEventResultProcessor<StreamResponse>
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxFormUpdateFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxFormUpdateFilter.java
index 5b914a9..7276f04 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxFormUpdateFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxFormUpdateFilter.java
@@ -16,13 +16,13 @@ package org.apache.tapestry5.internal.services.ajax;
 
 import java.io.IOException;
 
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.services.RequestConstants;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 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;
 
 /**
  * Filter for the {@link Ajax} {@link ComponentEventRequestHandler} that informs the {@link AjaxFormUpdateController}
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java
index df74e0c..cddf7e2 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java
@@ -14,6 +14,7 @@ package org.apache.tapestry5.internal.services.ajax;
 import org.apache.tapestry5.ClientBodyElement;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.services.PageRenderQueue;
 import org.apache.tapestry5.internal.services.PageSource;
@@ -24,7 +25,6 @@ import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.services.PartialMarkupRenderer;
 import org.apache.tapestry5.services.PartialMarkupRendererFilter;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.ajax.AjaxResponseRenderer;
 import org.apache.tapestry5.services.ajax.JSONCallback;
 import org.apache.tapestry5.services.ajax.JavaScriptCallback;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java
index 5657463..5b5f3c3 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java
@@ -15,12 +15,12 @@
 package org.apache.tapestry5.internal.services.assets;
 
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.AssetPathConverter;
-import org.apache.tapestry5.services.BaseURLSource;
 import org.apache.tapestry5.services.PathConstructor;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.assets.AssetPathConstructor;
 import org.apache.tapestry5.services.assets.CompressionStatus;
 import org.apache.tapestry5.services.assets.StreamableResource;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/CSSURLRewriter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/CSSURLRewriter.java
index 1e6484c..46313ed 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/CSSURLRewriter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/CSSURLRewriter.java
@@ -13,9 +13,9 @@
 package org.apache.tapestry5.internal.services.assets;
 
 import org.apache.tapestry5.Asset;
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.services.AssetSource;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ClasspathAssetRequestHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ClasspathAssetRequestHandler.java
index 88149fb..981774f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ClasspathAssetRequestHandler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ClasspathAssetRequestHandler.java
@@ -15,12 +15,12 @@
 package org.apache.tapestry5.internal.services.assets;
 
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.services.ResourceStreamer;
 import org.apache.tapestry5.services.AssetSource;
 import org.apache.tapestry5.services.ClasspathAssetAliasManager;
 import org.apache.tapestry5.services.ClasspathAssetProtectionRule;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.assets.AssetRequestHandler;
 
 import java.io.IOException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/CompressionAnalyzerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/CompressionAnalyzerImpl.java
index 32acc5c..fdb1554 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/CompressionAnalyzerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/CompressionAnalyzerImpl.java
@@ -2,7 +2,7 @@ package org.apache.tapestry5.internal.services.assets;
 
 import java.util.Map;
 
-import org.apache.tapestry5.services.assets.CompressionAnalyzer;
+import org.apache.tapestry5.http.services.CompressionAnalyzer;
 
 public class CompressionAnalyzerImpl implements CompressionAnalyzer
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ContentTypeAnalyzerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ContentTypeAnalyzerImpl.java
index 3114584..0be0a5d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ContentTypeAnalyzerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ContentTypeAnalyzerImpl.java
@@ -17,8 +17,8 @@ package org.apache.tapestry5.internal.services.assets;
 import java.util.Map;
 
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
-import org.apache.tapestry5.services.Context;
 import org.apache.tapestry5.services.assets.ContentTypeAnalyzer;
 
 public class ContentTypeAnalyzerImpl implements ContentTypeAnalyzer
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ContextAssetRequestHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ContextAssetRequestHandler.java
index faab6bb..ab0a8c8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ContextAssetRequestHandler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ContextAssetRequestHandler.java
@@ -15,9 +15,9 @@
 package org.apache.tapestry5.internal.services.assets;
 
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.services.ResourceStreamer;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.assets.AssetRequestHandler;
 
 import java.io.IOException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DelegatingSRS.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DelegatingSRS.java
index 04fff07..ffdbffa 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DelegatingSRS.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DelegatingSRS.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.internal.services.assets;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.services.assets.ResourceDependencies;
 import org.apache.tapestry5.services.assets.StreamableResource;
 import org.apache.tapestry5.services.assets.StreamableResourceProcessing;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/JavaScriptStackAssemblerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/JavaScriptStackAssemblerImpl.java
index bdc79f0..2b12769 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/JavaScriptStackAssemblerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/JavaScriptStackAssemblerImpl.java
@@ -13,10 +13,10 @@
 package org.apache.tapestry5.internal.services.assets;
 
 import org.apache.tapestry5.Asset;
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.ThreadLocale;
 import org.apache.tapestry5.services.assets.*;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/JavaScriptStackMinimizeDisabler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/JavaScriptStackMinimizeDisabler.java
index e228727..9bca3fa 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/JavaScriptStackMinimizeDisabler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/JavaScriptStackMinimizeDisabler.java
@@ -14,7 +14,7 @@ package org.apache.tapestry5.internal.services.assets;
 
 import org.apache.tapestry5.TapestryConstants;
 import org.apache.tapestry5.commons.Resource;
-import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.services.assets.ResourceDependencies;
 import org.apache.tapestry5.services.assets.StreamableResource;
 import org.apache.tapestry5.services.assets.StreamableResourceProcessing;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java
index 13425f5..917af3a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.internal.services.assets;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.internal.event.InvalidationEventHubImpl;
 import org.apache.tapestry5.ioc.annotations.PostInjection;
 import org.apache.tapestry5.ioc.annotations.Symbol;
@@ -37,7 +37,7 @@ public class ResourceChangeTrackerImpl extends InvalidationEventHubImpl implemen
     private final long fixedLastModifiedTime = Math.round(System.currentTimeMillis() / 1000d) * 1000L;
 
     public ResourceChangeTrackerImpl(ClasspathURLConverter classpathURLConverter,
-                                     @Symbol(SymbolConstants.PRODUCTION_MODE)
+                                     @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                      boolean productionMode)
     {
         super(productionMode);
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
index 91dc14f..fca88b2 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
@@ -12,12 +12,12 @@
 
 package org.apache.tapestry5.internal.services.assets;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.services.ResourceStreamer;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.services.LocalizationSetter;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.assets.AssetRequestHandler;
 import org.apache.tapestry5.services.assets.StreamableResource;
 import org.apache.tapestry5.services.javascript.JavaScriptStack;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StreamableResourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StreamableResourceImpl.java
index 40a4e31..8c10d1c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StreamableResourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StreamableResourceImpl.java
@@ -12,8 +12,8 @@
 
 package org.apache.tapestry5.internal.services.assets;
 
-import org.apache.tapestry5.ContentType;
-import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.services.assets.AssetChecksumGenerator;
 import org.apache.tapestry5.services.assets.CompressionStatus;
 import org.apache.tapestry5.services.assets.ResponseCustomizer;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StreamableResourceSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StreamableResourceSourceImpl.java
index 8351429..fcc30f7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StreamableResourceSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StreamableResourceSourceImpl.java
@@ -12,9 +12,10 @@
 
 package org.apache.tapestry5.internal.services.assets;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.services.CompressionAnalyzer;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.services.assets.*;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/UTF8ForTextAssets.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/UTF8ForTextAssets.java
index 0f637d7..0ac2b9f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/UTF8ForTextAssets.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/UTF8ForTextAssets.java
@@ -12,8 +12,8 @@
 
 package org.apache.tapestry5.internal.services.assets;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.services.assets.ResourceDependencies;
 import org.apache.tapestry5.services.assets.StreamableResource;
 import org.apache.tapestry5.services.assets.StreamableResourceProcessing;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/exceptions/ExceptionReportWriterImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/exceptions/ExceptionReportWriterImpl.java
index f5c4d37..786e862 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/exceptions/ExceptionReportWriterImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/exceptions/ExceptionReportWriterImpl.java
@@ -12,12 +12,15 @@
 
 package org.apache.tapestry5.internal.services.exceptions;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.func.F;
 import org.apache.tapestry5.func.Flow;
 import org.apache.tapestry5.func.Mapper;
 import org.apache.tapestry5.func.Reducer;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
@@ -26,9 +29,6 @@ import org.apache.tapestry5.ioc.services.ExceptionAnalysis;
 import org.apache.tapestry5.ioc.services.ExceptionAnalyzer;
 import org.apache.tapestry5.ioc.services.ExceptionInfo;
 import org.apache.tapestry5.services.ExceptionReportWriter;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.RequestGlobals;
-import org.apache.tapestry5.services.Session;
 
 import java.io.PrintWriter;
 import java.lang.reflect.Array;
@@ -81,7 +81,7 @@ public class ExceptionReportWriterImpl implements ExceptionReportWriter
     private RequestGlobals requestGlobals;
 
     @Inject
-    @Symbol(SymbolConstants.CONTEXT_PATH)
+    @Symbol(TapestryHttpSymbolConstants.CONTEXT_PATH)
     private String contextPath;
 
     @Override
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ConfigureHTMLElementFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ConfigureHTMLElementFilter.java
index 5732ee5..aab9c2e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ConfigureHTMLElementFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ConfigureHTMLElementFilter.java
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.internal.services.javascript;
 
 import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.ThreadLocale;
 import org.apache.tapestry5.services.MarkupRenderer;
@@ -34,7 +34,7 @@ public class ConfigureHTMLElementFilter implements MarkupRendererFilter
 
     private final boolean debugEnabled;
 
-    public ConfigureHTMLElementFilter(ThreadLocale threadLocale, @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode)
+    public ConfigureHTMLElementFilter(ThreadLocale threadLocale, @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE) boolean productionMode)
     {
         this.threadLocale = threadLocale;
         this.debugEnabled = !productionMode;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavaScriptStackPathConstructorImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavaScriptStackPathConstructorImpl.java
index 0d1acb2..0c96e39 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavaScriptStackPathConstructorImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavaScriptStackPathConstructorImpl.java
@@ -18,11 +18,11 @@ import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.ExceptionUtils;
 import org.apache.tapestry5.func.F;
 import org.apache.tapestry5.func.Mapper;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.services.RequestConstants;
 import org.apache.tapestry5.internal.services.assets.JavaScriptStackAssembler;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.ThreadLocale;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.services.assets.AssetPathConstructor;
 import org.apache.tapestry5.services.assets.StreamableResource;
 import org.apache.tapestry5.services.javascript.JavaScriptStack;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java
index 1923565..30522b4 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleDispatcher.java
@@ -15,17 +15,17 @@ package org.apache.tapestry5.internal.services.javascript;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.services.AssetDispatcher;
 import org.apache.tapestry5.internal.services.RequestConstants;
 import org.apache.tapestry5.internal.services.ResourceStreamer;
 import org.apache.tapestry5.ioc.IOOperation;
 import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.services.Dispatcher;
 import org.apache.tapestry5.services.LocalizationSetter;
 import org.apache.tapestry5.services.PathConstructor;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.javascript.JavaScriptStackSource;
 import org.apache.tapestry5.services.javascript.ModuleManager;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java
index 2e28a6b..c56f45a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/ModuleManagerImpl.java
@@ -17,6 +17,8 @@ import org.apache.tapestry5.commons.Messages;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
 import org.apache.tapestry5.ioc.annotations.PostInjection;
@@ -26,7 +28,6 @@ import org.apache.tapestry5.json.JSONLiteral;
 import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.services.AssetSource;
 import org.apache.tapestry5.services.PathConstructor;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.services.assets.StreamableResourceSource;
 import org.apache.tapestry5.services.javascript.JavaScriptModuleConfiguration;
 import org.apache.tapestry5.services.javascript.ModuleConfigurationCallback;
@@ -65,7 +66,7 @@ public class ModuleManagerImpl implements ModuleManager
                              StreamableResourceSource streamableResourceSource,
                              @Symbol(SymbolConstants.COMPACT_JSON)
                              boolean compactJSON,
-                             @Symbol(SymbolConstants.PRODUCTION_MODE)
+                             @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                              boolean productionMode,
                              @Symbol(SymbolConstants.MODULE_PATH_PREFIX)
                              String modulePathPrefix,
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java
index 7a66e7c..23f97e0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerImpl.java
@@ -14,11 +14,11 @@
 
 package org.apache.tapestry5.internal.services.linktransform;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Primary;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
 import org.apache.tapestry5.services.PageRenderRequestParameters;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.linktransform.ComponentEventLinkTransformer;
 import org.apache.tapestry5.services.linktransform.LinkTransformer;
 import org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java
index f18f471..5f6a187 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/linktransform/LinkTransformerInterceptor.java
@@ -14,11 +14,11 @@
 
 package org.apache.tapestry5.internal.services.linktransform;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.services.ComponentEventLinkEncoder;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
 import org.apache.tapestry5.services.PageRenderRequestParameters;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.linktransform.LinkTransformer;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/security/ClientWhitelistImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/security/ClientWhitelistImpl.java
index f80e3fc..bf1c855 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/security/ClientWhitelistImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/security/ClientWhitelistImpl.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.internal.services.security;
 
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.services.ChainBuilder;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.security.ClientWhitelist;
 import org.apache.tapestry5.services.security.WhitelistAnalyzer;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/security/LocalhostOnly.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/security/LocalhostOnly.java
index 8b48b23..e5c2871 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/security/LocalhostOnly.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/security/LocalhostOnly.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.services.security;
 
-import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.services.security.WhitelistAnalyzer;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
index d9628e1..7494647 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
@@ -20,6 +20,7 @@ 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.dom.Element;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.AbstractEventContext;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.InternalConstants;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java
index dc4f634..a3fa8f7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.internal.structure;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.ioc.services.PerThreadValue;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java
index 85543f6..0e378eb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java
@@ -15,9 +15,11 @@
 package org.apache.tapestry5.internal.structure;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.commons.*;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.services.ComponentClassCache;
 import org.apache.tapestry5.internal.services.LinkSource;
@@ -31,8 +33,6 @@ import org.apache.tapestry5.ioc.services.PerthreadManager;
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ContextValueEncoder;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.RequestGlobals;
 import org.apache.tapestry5.services.messages.ComponentMessagesSource;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java
index 6f03e84..e871fbb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java
@@ -17,6 +17,8 @@ package org.apache.tapestry5.internal.structure;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.services.TypeCoercer;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.services.ComponentClassCache;
 import org.apache.tapestry5.internal.services.LinkSource;
 import org.apache.tapestry5.internal.services.RequestPageCache;
@@ -26,7 +28,6 @@ import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ContextValueEncoder;
-import org.apache.tapestry5.services.RequestGlobals;
 import org.apache.tapestry5.services.messages.ComponentMessagesSource;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 
@@ -65,7 +66,7 @@ public class ComponentPageElementResourcesSourceImpl implements ComponentPageEle
             TypeCoercer typeCoercer, ComponentClassCache componentClassCache, ContextValueEncoder contextValueEncoder,
             LinkSource linkSource, RequestPageCache requestPageCache, ComponentClassResolver componentClassResolver,
             LoggerSource loggerSource, OperationTracker tracker, PerthreadManager perThreadManager,
-            @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode,
+            @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE) boolean productionMode,
             @Symbol(SymbolConstants.COMPONENT_RENDER_TRACING_ENABLED) boolean componentTracingEnabled,
             RequestGlobals requestGlobals)
     {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
index c1ecd07..08f72aa 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
@@ -22,6 +22,7 @@ import org.apache.tapestry5.commons.internal.util.LockSupport;
 import org.apache.tapestry5.commons.internal.util.TapestryException;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.func.Worker;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.bindings.InternalPropBinding;
 import org.apache.tapestry5.internal.bindings.PropBinding;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java
index 2968265..c38ce34 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/Page.java
@@ -203,7 +203,7 @@ public interface Page extends PageLifecycleCallbackHub
     /**
      * Discards all persistent field changes for the page containing the component. Changes are
      * eliminated from
-     * persistent storage (such as the {@link org.apache.tapestry5.services.Session}) which will
+     * persistent storage (such as the {@link org.apache.tapestry5.http.services.Session}) which will
      * take effect in the <em>next</em> request (the attached page instance is not affected).
      */
     void discardPersistentFieldChanges();
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/EndOfRequestCleanupFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/EndOfRequestCleanupFilter.java
index 2124553..7114c5b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/EndOfRequestCleanupFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/EndOfRequestCleanupFilter.java
@@ -14,17 +14,17 @@
 
 package org.apache.tapestry5.internal.test;
 
-import org.apache.tapestry5.services.RequestHandler;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
-import org.apache.tapestry5.services.RequestFilter;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
 
 import java.io.IOException;
 
 /**
  * Makes sure that {@link org.apache.tapestry5.ioc.services.PerthreadManager#cleanup()} is invoked at the end of each
- * request (normally handled by {@link org.apache.tapestry5.TapestryFilter}).
+ * request (normally handled by {@link org.apache.tapestry5.http.TapestryFilter}).
  */
 public class EndOfRequestCleanupFilter implements RequestFilter
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java
index 6e36df4..0b923de 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.test;
 
-import org.apache.tapestry5.services.Context;
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.test.TapestryRunnerConstants;
 
 import java.io.File;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterModule.java
index 7e92c5b..0dab8ed 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterModule.java
@@ -12,10 +12,15 @@
 
 package org.apache.tapestry5.internal.test;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.ObjectLocator;
 import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.services.CompressionAnalyzer;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.Response;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.services.CookieSink;
 import org.apache.tapestry5.internal.services.CookieSource;
 import org.apache.tapestry5.ioc.ServiceBinder;
@@ -23,11 +28,6 @@ import org.apache.tapestry5.ioc.annotations.Contribute;
 import org.apache.tapestry5.ioc.annotations.Local;
 import org.apache.tapestry5.ioc.services.ServiceOverride;
 import org.apache.tapestry5.services.MarkupRendererFilter;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.RequestFilter;
-import org.apache.tapestry5.services.Response;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
-import org.apache.tapestry5.services.assets.CompressionAnalyzer;
 import org.apache.tapestry5.test.PageTester;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterSession.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterSession.java
index b487f12..2a3b06a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterSession.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterSession.java
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.internal.test;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.Session;
 
 import static org.apache.tapestry5.commons.util.CollectionFactory.newList;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableRequest.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableRequest.java
index 8dda39a..3762c26 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableRequest.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableRequest.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.test;
 
-import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.test.PageTester;
 
 import java.util.Locale;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableRequestImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableRequestImpl.java
index 12c128d..89bd851 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableRequestImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableRequestImpl.java
@@ -14,12 +14,12 @@
 
 package org.apache.tapestry5.internal.test;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.Session;
 
 import java.util.*;
 
@@ -38,7 +38,7 @@ public class TestableRequestImpl implements TestableRequest
     private Locale locale = Locale.getDefault();
 
     @Inject
-    public TestableRequestImpl(@Symbol(SymbolConstants.CONTEXT_PATH) String contextPath)
+    public TestableRequestImpl(@Symbol(TapestryHttpSymbolConstants.CONTEXT_PATH) String contextPath)
     {
         this.contextPath = contextPath;
     }
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponse.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponse.java
index 5efc7c8..33c6d9b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponse.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponse.java
@@ -16,9 +16,9 @@ package org.apache.tapestry5.internal.test;
 
 import java.util.List;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.dom.Document;
-import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Response;
 
 public interface TestableResponse extends Response
 {
@@ -33,7 +33,7 @@ public interface TestableResponse extends Response
     Document getRenderedDocument();
 
     /**
-     * Returns the link redirected to via {@link org.apache.tapestry5.services.Response#sendRedirect(org.apache.tapestry5.Link)}.
+     * Returns the link redirected to via {@link org.apache.tapestry5.http.services.Response#sendRedirect(org.apache.tapestry5.http.Link)}.
      */
     Link getRedirectLink();
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java
index 64cac5f..a241240 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/TestableResponseImpl.java
@@ -26,9 +26,9 @@ import java.util.Map;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.dom.Document;
+import org.apache.tapestry5.http.Link;
 
 public class TestableResponseImpl implements TestableResponse
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ActivationRequestParameterWorker.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ActivationRequestParameterWorker.java
index 508b4ae..13d615b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ActivationRequestParameterWorker.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ActivationRequestParameterWorker.java
@@ -13,10 +13,11 @@
 package org.apache.tapestry5.internal.transform;
 
 import org.apache.tapestry5.EventConstants;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.annotations.ActivationRequestParameter;
 import org.apache.tapestry5.commons.internal.util.TapestryException;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.services.ComponentClassCache;
 import org.apache.tapestry5.ioc.util.IdAllocator;
 import org.apache.tapestry5.model.MutableComponentModel;
@@ -26,7 +27,6 @@ import org.apache.tapestry5.plastic.PlasticField;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.ComponentEvent;
 import org.apache.tapestry5.services.ComponentEventHandler;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.URLEncoder;
 import org.apache.tapestry5.services.ValueEncoderSource;
 import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
index e53a04f..506048e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
@@ -32,6 +32,7 @@ import org.apache.tapestry5.func.F;
 import org.apache.tapestry5.func.Flow;
 import org.apache.tapestry5.func.Mapper;
 import org.apache.tapestry5.func.Predicate;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.services.ComponentClassCache;
 import org.apache.tapestry5.ioc.OperationTracker;
@@ -52,7 +53,6 @@ import org.apache.tapestry5.plastic.PlasticMethod;
 import org.apache.tapestry5.runtime.ComponentEvent;
 import org.apache.tapestry5.runtime.Event;
 import org.apache.tapestry5.runtime.PageLifecycleListener;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.TransformConstants;
 import org.apache.tapestry5.services.ValueEncoderSource;
 import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/SessionAttributeWorker.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/SessionAttributeWorker.java
index 0bb8633..c32fe7f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/SessionAttributeWorker.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/SessionAttributeWorker.java
@@ -15,13 +15,13 @@
 package org.apache.tapestry5.internal.transform;
 
 import org.apache.tapestry5.annotations.SessionAttribute;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.plastic.FieldConduit;
 import org.apache.tapestry5.plastic.InstanceContext;
 import org.apache.tapestry5.plastic.PlasticClass;
 import org.apache.tapestry5.plastic.PlasticField;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
 import org.apache.tapestry5.services.transform.TransformationSupport;
 
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 dd85c9b..49ecfdc 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
@@ -19,8 +19,14 @@ import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.beanmodel.internal.services.*;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.*;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
+import org.apache.tapestry5.http.services.ApplicationGlobals;
+import org.apache.tapestry5.http.services.CompressionAnalyzer;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.AssetConstants;
-import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.services.AssetSourceImpl;
 import org.apache.tapestry5.internal.services.ClasspathAssetAliasManagerImpl;
 import org.apache.tapestry5.internal.services.ClasspathAssetFactory;
@@ -37,7 +43,6 @@ 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.ApplicationGlobals;
 import org.apache.tapestry5.services.AssetFactory;
 import org.apache.tapestry5.services.AssetPathConverter;
 import org.apache.tapestry5.services.AssetRequestDispatcher;
@@ -48,9 +53,6 @@ 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;
@@ -101,7 +103,6 @@ public class AssetsModule
         // Minification may be enabled in production mode, but unless a minimizer is provided, nothing
         // will change.
         configuration.add(SymbolConstants.MINIFICATION_ENABLED, SymbolConstants.PRODUCTION_MODE_VALUE);
-        configuration.add(SymbolConstants.GZIP_COMPRESSION_ENABLED, true);
         configuration.add(SymbolConstants.COMBINE_SCRIPTS, SymbolConstants.PRODUCTION_MODE_VALUE);
         configuration.add(SymbolConstants.ASSET_URL_FULL_QUALIFIED, false);
 
@@ -119,8 +120,8 @@ public class AssetsModule
 
     @Decorate(id = "GZipCompression", serviceInterface = StreamableResourceSource.class)
     public StreamableResourceSource enableCompression(StreamableResourceSource delegate,
-                                                      @Symbol(SymbolConstants.GZIP_COMPRESSION_ENABLED)
-                                                      boolean gzipEnabled, @Symbol(SymbolConstants.MIN_GZIP_SIZE)
+                                                      @Symbol(TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED)
+                                                      boolean gzipEnabled, @Symbol(TapestryHttpSymbolConstants.MIN_GZIP_SIZE)
                                                       int compressionCutoff,
                                                       AssetChecksumGenerator checksumGenerator)
     {
@@ -132,7 +133,7 @@ public class AssetsModule
     @Decorate(id = "CacheCompressed", serviceInterface = StreamableResourceSource.class)
     @Order("before:GZIpCompression")
     public StreamableResourceSource enableCompressedCaching(StreamableResourceSource delegate,
-                                                            @Symbol(SymbolConstants.GZIP_COMPRESSION_ENABLED)
+                                                            @Symbol(TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED)
                                                             boolean gzipEnabled, ResourceChangeTracker tracker)
     {
         return gzipEnabled
@@ -275,7 +276,7 @@ public class AssetsModule
     @Contribute(ClasspathAssetAliasManager.class)
     public static void addApplicationAndTapestryMappings(MappedConfiguration<String, String> configuration,
 
-                                                         @Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
+                                                         @Symbol(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
                                                          String appPackage)
     {
         configuration.add("tapestry", "org/apache/tapestry5");
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 8fa7b7d..0b9b738 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
@@ -16,6 +16,9 @@ import org.apache.tapestry5.beanmodel.internal.services.*;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.http.internal.services.ResponseCompressionAnalyzerImpl;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.pageload.PageLoaderImpl;
 import org.apache.tapestry5.internal.services.AjaxPartialResponseRenderer;
 import org.apache.tapestry5.internal.services.AjaxPartialResponseRendererImpl;
@@ -60,7 +63,6 @@ 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;
@@ -76,8 +78,6 @@ 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;
@@ -111,7 +111,6 @@ public class InternalModule
         binder.bind(RequestSecurityManager.class, RequestSecurityManagerImpl.class);
         binder.bind(InternalRequestGlobals.class, InternalRequestGlobalsImpl.class);
         binder.bind(EndOfRequestEventHub.class);
-        binder.bind(ResponseCompressionAnalyzer.class, ResponseCompressionAnalyzerImpl.class);
         binder.bind(ComponentModelSource.class);
         binder.bind(JavaScriptStackPathConstructor.class);
         binder.bind(AjaxFormUpdateController.class);
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
index 5fb0ae5..cd4c585 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
@@ -23,6 +23,8 @@ import org.apache.tapestry5.commons.OrderedConfiguration;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.corelib.components.FontAwesomeIcon;
 import org.apache.tapestry5.corelib.components.Glyphicon;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.services.DocumentLinker;
 import org.apache.tapestry5.internal.services.ResourceStreamer;
@@ -47,7 +49,6 @@ import org.apache.tapestry5.ioc.util.IdAllocator;
 import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.services.ComponentOverride;
 import org.apache.tapestry5.services.Core;
-import org.apache.tapestry5.services.Dispatcher;
 import org.apache.tapestry5.services.Environment;
 import org.apache.tapestry5.services.EnvironmentalShadowBuilder;
 import org.apache.tapestry5.services.LocalizationSetter;
@@ -56,7 +57,6 @@ import org.apache.tapestry5.services.MarkupRendererFilter;
 import org.apache.tapestry5.services.PartialMarkupRenderer;
 import org.apache.tapestry5.services.PartialMarkupRendererFilter;
 import org.apache.tapestry5.services.PathConstructor;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.compatibility.Compatibility;
 import org.apache.tapestry5.services.compatibility.Trait;
 import org.apache.tapestry5.services.javascript.AMDWrapper;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
index f1e049c..597a38a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
@@ -13,6 +13,7 @@
 package org.apache.tapestry5.modules;
 
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.internal.pageload.DefaultComponentRequestSelectorAnalyzer;
 import org.apache.tapestry5.internal.pageload.DefaultComponentResourceLocator;
 import org.apache.tapestry5.internal.pageload.PagePreloaderImpl;
@@ -46,7 +47,7 @@ public class PageLoadModule
     public static void preloadPages(PagePreloader preloader,
                                     @Symbol(SymbolConstants.PRELOADER_MODE)
                                     PreloaderMode mode,
-                                    @Symbol(SymbolConstants.PRODUCTION_MODE)
+                                    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                     boolean productionMode)
     {
         if (mode.isEnabledFor(productionMode))
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 567e055..3e441c1 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
@@ -12,29 +12,133 @@
 
 package org.apache.tapestry5.modules;
 
-import org.apache.tapestry5.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tapestry5.Asset;
+import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.Block;
+import org.apache.tapestry5.ComponentParameterConstants;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.Field;
+import org.apache.tapestry5.FieldValidationSupport;
+import org.apache.tapestry5.FieldValidator;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.MetaDataConstants;
+import org.apache.tapestry5.NullFieldStrategy;
+import org.apache.tapestry5.PersistenceConstants;
+import org.apache.tapestry5.PropertyOverrides;
+import org.apache.tapestry5.Renderable;
+import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.StreamResponse;
+import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.Translator;
+import org.apache.tapestry5.ValidationDecorator;
+import org.apache.tapestry5.Validator;
+import org.apache.tapestry5.ValueEncoder;
+import org.apache.tapestry5.VersionUtils;
 import org.apache.tapestry5.ajax.MultiZoneUpdate;
 import org.apache.tapestry5.alerts.AlertManager;
-import org.apache.tapestry5.annotations.*;
+import org.apache.tapestry5.annotations.ActivationRequestParameter;
+import org.apache.tapestry5.annotations.BindParameter;
 import org.apache.tapestry5.annotations.ContentType;
+import org.apache.tapestry5.annotations.DiscardAfter;
+import org.apache.tapestry5.annotations.HeartbeatDeferred;
+import org.apache.tapestry5.annotations.Import;
+import org.apache.tapestry5.annotations.Meta;
+import org.apache.tapestry5.annotations.MixinAfter;
+import org.apache.tapestry5.annotations.PageActivationContext;
+import org.apache.tapestry5.annotations.PageAttached;
+import org.apache.tapestry5.annotations.PageDetached;
+import org.apache.tapestry5.annotations.PageLoaded;
+import org.apache.tapestry5.annotations.PageReset;
+import org.apache.tapestry5.annotations.Path;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Secure;
+import org.apache.tapestry5.annotations.Service;
+import org.apache.tapestry5.annotations.SessionAttribute;
+import org.apache.tapestry5.annotations.UnknownActivationContextCheck;
+import org.apache.tapestry5.annotations.WhitelistAccessOnly;
 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.commons.*;
+import org.apache.tapestry5.beanmodel.internal.services.BeanModelSourceImpl;
+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.commons.AnnotationProvider;
+import org.apache.tapestry5.commons.Configuration;
+import org.apache.tapestry5.commons.Location;
+import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.ObjectLocator;
+import org.apache.tapestry5.commons.ObjectProvider;
+import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.internal.BasicDataTypeAnalyzers;
 import org.apache.tapestry5.commons.internal.services.AnnotationDataTypeAnalyzer;
 import org.apache.tapestry5.commons.internal.services.DefaultDataTypeAnalyzer;
 import org.apache.tapestry5.commons.internal.services.StringInterner;
 import org.apache.tapestry5.commons.internal.services.StringInternerImpl;
-import org.apache.tapestry5.commons.services.*;
+import org.apache.tapestry5.commons.services.Coercion;
+import org.apache.tapestry5.commons.services.CoercionTuple;
+import org.apache.tapestry5.commons.services.DataTypeAnalyzer;
+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.TypeCoercer;
 import org.apache.tapestry5.commons.util.AvailableValues;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.StrategyRegistry;
 import org.apache.tapestry5.corelib.data.SecureOption;
 import org.apache.tapestry5.grid.GridConstants;
 import org.apache.tapestry5.grid.GridDataSource;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalSymbols;
+import org.apache.tapestry5.http.internal.gzip.GZipFilter;
+import org.apache.tapestry5.http.internal.services.ApplicationGlobalsImpl;
+import org.apache.tapestry5.http.internal.services.RequestGlobalsImpl;
+import org.apache.tapestry5.http.internal.services.RequestImpl;
+import org.apache.tapestry5.http.internal.services.ResponseImpl;
+import org.apache.tapestry5.http.internal.services.TapestrySessionFactory;
+import org.apache.tapestry5.http.internal.services.TapestrySessionFactoryImpl;
+import org.apache.tapestry5.http.services.ApplicationGlobals;
+import org.apache.tapestry5.http.services.ApplicationInitializer;
+import org.apache.tapestry5.http.services.ApplicationInitializerFilter;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Context;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.HttpServletRequestFilter;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
+import org.apache.tapestry5.http.services.ServletApplicationInitializer;
+import org.apache.tapestry5.http.services.ServletApplicationInitializerFilter;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.ComponentOverrideImpl;
 import org.apache.tapestry5.internal.DefaultNullFieldStrategy;
 import org.apache.tapestry5.internal.DefaultValueLabelProvider;
@@ -48,12 +152,28 @@ import org.apache.tapestry5.internal.beaneditor.EnvironmentMessages;
 import org.apache.tapestry5.internal.beaneditor.MessagesConstraintGenerator;
 import org.apache.tapestry5.internal.beaneditor.PrimitiveFieldConstraintGenerator;
 import org.apache.tapestry5.internal.beaneditor.ValidateAnnotationConstraintGenerator;
-import org.apache.tapestry5.internal.bindings.*;
+import org.apache.tapestry5.internal.bindings.AssetBindingFactory;
+import org.apache.tapestry5.internal.bindings.BlockBindingFactory;
+import org.apache.tapestry5.internal.bindings.ComponentBindingFactory;
+import org.apache.tapestry5.internal.bindings.ContextBindingFactory;
+import org.apache.tapestry5.internal.bindings.LiteralBindingFactory;
+import org.apache.tapestry5.internal.bindings.MessageBindingFactory;
+import org.apache.tapestry5.internal.bindings.NullFieldStrategyBindingFactory;
+import org.apache.tapestry5.internal.bindings.PropBindingFactory;
+import org.apache.tapestry5.internal.bindings.RenderVariableBindingFactory;
+import org.apache.tapestry5.internal.bindings.SymbolBindingFactory;
+import org.apache.tapestry5.internal.bindings.TranslateBindingFactory;
+import org.apache.tapestry5.internal.bindings.ValidateBindingFactory;
 import org.apache.tapestry5.internal.dynamic.DynamicTemplateParserImpl;
 import org.apache.tapestry5.internal.grid.CollectionGridDataSource;
 import org.apache.tapestry5.internal.grid.NullDataSource;
-import org.apache.tapestry5.internal.gzip.GZipFilter;
-import org.apache.tapestry5.internal.renderers.*;
+import org.apache.tapestry5.internal.renderers.AvailableValuesRenderer;
+import org.apache.tapestry5.internal.renderers.ComponentResourcesRenderer;
+import org.apache.tapestry5.internal.renderers.EventContextRenderer;
+import org.apache.tapestry5.internal.renderers.ListRenderer;
+import org.apache.tapestry5.internal.renderers.LocationRenderer;
+import org.apache.tapestry5.internal.renderers.ObjectArrayRenderer;
+import org.apache.tapestry5.internal.renderers.RequestRenderer;
 import org.apache.tapestry5.internal.services.*;
 import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateFilter;
 import org.apache.tapestry5.internal.services.ajax.AjaxResponseRendererImpl;
@@ -71,7 +191,38 @@ import org.apache.tapestry5.internal.services.security.ClientWhitelistImpl;
 import org.apache.tapestry5.internal.services.security.LocalhostOnly;
 import org.apache.tapestry5.internal.services.templates.DefaultTemplateLocator;
 import org.apache.tapestry5.internal.services.templates.PageTemplateLocator;
-import org.apache.tapestry5.internal.transform.*;
+import org.apache.tapestry5.internal.transform.ActivationRequestParameterWorker;
+import org.apache.tapestry5.internal.transform.ApplicationStateWorker;
+import org.apache.tapestry5.internal.transform.BindParameterWorker;
+import org.apache.tapestry5.internal.transform.CachedWorker;
+import org.apache.tapestry5.internal.transform.ComponentWorker;
+import org.apache.tapestry5.internal.transform.DiscardAfterWorker;
+import org.apache.tapestry5.internal.transform.EnvironmentalWorker;
+import org.apache.tapestry5.internal.transform.HeartbeatDeferredWorker;
+import org.apache.tapestry5.internal.transform.ImportWorker;
+import org.apache.tapestry5.internal.transform.InjectComponentWorker;
+import org.apache.tapestry5.internal.transform.InjectContainerWorker;
+import org.apache.tapestry5.internal.transform.InjectNamedProvider;
+import org.apache.tapestry5.internal.transform.InjectPageWorker;
+import org.apache.tapestry5.internal.transform.InjectServiceWorker;
+import org.apache.tapestry5.internal.transform.InjectWorker;
+import org.apache.tapestry5.internal.transform.LogWorker;
+import org.apache.tapestry5.internal.transform.MixinAfterWorker;
+import org.apache.tapestry5.internal.transform.MixinWorker;
+import org.apache.tapestry5.internal.transform.OnEventWorker;
+import org.apache.tapestry5.internal.transform.OperationWorker;
+import org.apache.tapestry5.internal.transform.PageActivationContextWorker;
+import org.apache.tapestry5.internal.transform.PageLifecycleAnnotationWorker;
+import org.apache.tapestry5.internal.transform.PageResetAnnotationWorker;
+import org.apache.tapestry5.internal.transform.ParameterWorker;
+import org.apache.tapestry5.internal.transform.PersistWorker;
+import org.apache.tapestry5.internal.transform.PropertyWorker;
+import org.apache.tapestry5.internal.transform.RenderCommandWorker;
+import org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker;
+import org.apache.tapestry5.internal.transform.RetainWorker;
+import org.apache.tapestry5.internal.transform.SessionAttributeWorker;
+import org.apache.tapestry5.internal.transform.SupportsInformalParametersWorker;
+import org.apache.tapestry5.internal.transform.UnclaimedFieldWorker;
 import org.apache.tapestry5.internal.translator.NumericTranslator;
 import org.apache.tapestry5.internal.translator.NumericTranslatorSupport;
 import org.apache.tapestry5.internal.translator.StringTranslator;
@@ -82,7 +233,22 @@ import org.apache.tapestry5.ioc.MethodAdviceReceiver;
 import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.ioc.ScopeConstants;
 import org.apache.tapestry5.ioc.ServiceBinder;
-import org.apache.tapestry5.ioc.annotations.*;
+import org.apache.tapestry5.ioc.annotations.Advise;
+import org.apache.tapestry5.ioc.annotations.Autobuild;
+import org.apache.tapestry5.ioc.annotations.ComponentClasses;
+import org.apache.tapestry5.ioc.annotations.ComponentLayer;
+import org.apache.tapestry5.ioc.annotations.Contribute;
+import org.apache.tapestry5.ioc.annotations.ImportModule;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.ioc.annotations.InjectService;
+import org.apache.tapestry5.ioc.annotations.Local;
+import org.apache.tapestry5.ioc.annotations.Marker;
+import org.apache.tapestry5.ioc.annotations.Match;
+import org.apache.tapestry5.ioc.annotations.Operation;
+import org.apache.tapestry5.ioc.annotations.Primary;
+import org.apache.tapestry5.ioc.annotations.Scope;
+import org.apache.tapestry5.ioc.annotations.Startup;
+import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.Builtin;
 import org.apache.tapestry5.ioc.services.ChainBuilder;
 import org.apache.tapestry5.ioc.services.LazyAdvisor;
@@ -106,7 +272,93 @@ import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.ComponentResourcesAware;
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.Ajax;
+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.BeanBlockContribution;
+import org.apache.tapestry5.services.BeanBlockOverrideSource;
+import org.apache.tapestry5.services.BeanBlockSource;
+import org.apache.tapestry5.services.BindingFactory;
+import org.apache.tapestry5.services.BindingSource;
+import org.apache.tapestry5.services.ClientBehaviorSupport;
+import org.apache.tapestry5.services.ClientDataEncoder;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentDefaultProvider;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+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.ComponentLibraryInfo;
+import org.apache.tapestry5.services.ComponentLibraryInfoSource;
+import org.apache.tapestry5.services.ComponentMessages;
+import org.apache.tapestry5.services.ComponentOverride;
+import org.apache.tapestry5.services.ComponentRequestFilter;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.ComponentSource;
+import org.apache.tapestry5.services.ComponentTemplates;
+import org.apache.tapestry5.services.ContextPathEncoder;
+import org.apache.tapestry5.services.ContextProvider;
+import org.apache.tapestry5.services.ContextValueEncoder;
+import org.apache.tapestry5.services.Cookies;
+import org.apache.tapestry5.services.Core;
+import org.apache.tapestry5.services.DateUtilities;
+import org.apache.tapestry5.services.DefaultObjectRenderer;
+import org.apache.tapestry5.services.DisplayBlockContribution;
+import org.apache.tapestry5.services.EditBlockContribution;
+import org.apache.tapestry5.services.Environment;
+import org.apache.tapestry5.services.EnvironmentalShadowBuilder;
+import org.apache.tapestry5.services.ExceptionReportWriter;
+import org.apache.tapestry5.services.ExceptionReporter;
+import org.apache.tapestry5.services.FieldTranslatorSource;
+import org.apache.tapestry5.services.FieldValidatorDefaultSource;
+import org.apache.tapestry5.services.FieldValidatorSource;
+import org.apache.tapestry5.services.FormSupport;
+import org.apache.tapestry5.services.Heartbeat;
+import org.apache.tapestry5.services.HiddenFieldLocationRules;
+import org.apache.tapestry5.services.Html5Support;
+import org.apache.tapestry5.services.HttpError;
+import org.apache.tapestry5.services.InitializeActivePageName;
+import org.apache.tapestry5.services.LibraryMapping;
+import org.apache.tapestry5.services.LinkCreationHub;
+import org.apache.tapestry5.services.MarkupRenderer;
+import org.apache.tapestry5.services.MarkupRendererFilter;
+import org.apache.tapestry5.services.MarkupWriterFactory;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.NullFieldStrategySource;
+import org.apache.tapestry5.services.ObjectRenderer;
+import org.apache.tapestry5.services.PageDocumentGenerator;
+import org.apache.tapestry5.services.PageRenderLinkSource;
+import org.apache.tapestry5.services.PageRenderRequestFilter;
+import org.apache.tapestry5.services.PageRenderRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.PartialMarkupRenderer;
+import org.apache.tapestry5.services.PartialMarkupRendererFilter;
+import org.apache.tapestry5.services.PartialTemplateRenderer;
+import org.apache.tapestry5.services.PathConstructor;
+import org.apache.tapestry5.services.PersistentFieldStrategy;
+import org.apache.tapestry5.services.PersistentLocale;
+import org.apache.tapestry5.services.RelativeElementPosition;
+import org.apache.tapestry5.services.RequestExceptionHandler;
+import org.apache.tapestry5.services.ResourceDigestGenerator;
+import org.apache.tapestry5.services.ResponseRenderer;
+import org.apache.tapestry5.services.SelectModelFactory;
+import org.apache.tapestry5.services.StackTraceElementAnalyzer;
+import org.apache.tapestry5.services.StackTraceElementClassConstants;
+import org.apache.tapestry5.services.StreamPageContent;
+import org.apache.tapestry5.services.Traditional;
+import org.apache.tapestry5.services.TransformConstants;
+import org.apache.tapestry5.services.TranslatorAlternatesSource;
+import org.apache.tapestry5.services.TranslatorSource;
+import org.apache.tapestry5.services.URLEncoder;
+import org.apache.tapestry5.services.ValidationConstraintGenerator;
+import org.apache.tapestry5.services.ValidationDecoratorFactory;
+import org.apache.tapestry5.services.ValueEncoderFactory;
+import org.apache.tapestry5.services.ValueEncoderSource;
+import org.apache.tapestry5.services.ValueLabelProvider;
 import org.apache.tapestry5.services.ajax.AjaxResponseRenderer;
 import org.apache.tapestry5.services.dynamic.DynamicTemplate;
 import org.apache.tapestry5.services.dynamic.DynamicTemplateParser;
@@ -126,23 +378,19 @@ import org.apache.tapestry5.services.security.WhitelistAnalyzer;
 import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
 import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
 import org.apache.tapestry5.services.transform.InjectionProvider2;
-import org.apache.tapestry5.validator.*;
+import org.apache.tapestry5.validator.Checked;
+import org.apache.tapestry5.validator.Email;
+import org.apache.tapestry5.validator.Max;
+import org.apache.tapestry5.validator.MaxLength;
+import org.apache.tapestry5.validator.Min;
+import org.apache.tapestry5.validator.MinLength;
+import org.apache.tapestry5.validator.None;
+import org.apache.tapestry5.validator.Regexp;
+import org.apache.tapestry5.validator.Required;
+import org.apache.tapestry5.validator.Unchecked;
+import org.apache.tapestry5.validator.ValidatorMacro;
 import org.slf4j.Logger;
 
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.annotation.Annotation;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.URL;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.regex.Pattern;
-
 /**
  * The root module for Tapestry.
  */
@@ -153,8 +401,6 @@ public final class TapestryModule
 {
     private final PipelineBuilder pipelineBuilder;
 
-    private final ApplicationGlobals applicationGlobals;
-
     private final PropertyShadowBuilder shadowBuilder;
 
     private final Environment environment;
@@ -191,8 +437,6 @@ public final class TapestryModule
 
                           RequestGlobals requestGlobals,
 
-                          ApplicationGlobals applicationGlobals,
-
                           ChainBuilder chainBuilder,
 
                           Environment environment,
@@ -212,7 +456,6 @@ public final class TapestryModule
         this.pipelineBuilder = pipelineBuilder;
         this.shadowBuilder = shadowBuilder;
         this.requestGlobals = requestGlobals;
-        this.applicationGlobals = applicationGlobals;
         this.chainBuilder = chainBuilder;
         this.environment = environment;
         this.strategyBuilder = strategyBuilder;
@@ -223,121 +466,6 @@ public final class TapestryModule
         this.endOfRequestEventHub = endOfRequestEventHub;
     }
 
-    // A bunch of classes "promoted" from inline inner class to nested classes,
-    // just so that the stack trace would be more readable. Most of these
-    // are terminators for pipeline services.
-
-    /**
-     * @since 5.1.0.0
-     */
-    private class ApplicationInitializerTerminator implements ApplicationInitializer
-    {
-        public void initializeApplication(Context context)
-        {
-            applicationGlobals.storeContext(context);
-        }
-    }
-
-    /**
-     * @since 5.1.0.0
-     */
-    private class HttpServletRequestHandlerTerminator implements HttpServletRequestHandler
-    {
-        private final RequestHandler handler;
-        private final String applicationCharset;
-        private final TapestrySessionFactory sessionFactory;
-
-        public HttpServletRequestHandlerTerminator(RequestHandler handler, String applicationCharset,
-                                                   TapestrySessionFactory sessionFactory)
-        {
-            this.handler = handler;
-            this.applicationCharset = applicationCharset;
-            this.sessionFactory = sessionFactory;
-        }
-
-        public boolean service(HttpServletRequest servletRequest, HttpServletResponse servletResponse)
-                throws IOException
-        {
-            requestGlobals.storeServletRequestResponse(servletRequest, servletResponse);
-
-            // Should have started doing this a long time ago: recoding attributes into
-            // the request for things that may be needed downstream, without having to extend
-            // Request.
-
-            servletRequest.setAttribute("servletAPI.protocol", servletRequest.getProtocol());
-            servletRequest.setAttribute("servletAPI.characterEncoding", servletRequest.getCharacterEncoding());
-            servletRequest.setAttribute("servletAPI.contentLength", servletRequest.getContentLength());
-            servletRequest.setAttribute("servletAPI.authType", servletRequest.getAuthType());
-            servletRequest.setAttribute("servletAPI.contentType", servletRequest.getContentType());
-            servletRequest.setAttribute("servletAPI.scheme", servletRequest.getScheme());
-
-            Request request = new RequestImpl(servletRequest, applicationCharset, sessionFactory);
-            Response response = new ResponseImpl(servletRequest, servletResponse);
-
-            // TAP5-257: Make sure that the "initial guess" for request/response
-            // is available, even ifsome filter in the RequestHandler pipeline replaces them.
-            // Which just goes to show that there should have been only one way to access the Request/Response:
-            // either functionally (via parameters) or global (via ReqeuestGlobals) but not both.
-            // That ship has sailed.
-
-            requestGlobals.storeRequestResponse(request, response);
-
-            // Transition from the Servlet API-based pipeline, to the
-            // Tapestry-based pipeline.
-
-            return handler.service(request, response);
-        }
-    }
-
-    /**
-     * @since 5.1.0.0
-     */
-    private class ServletApplicationInitializerTerminator implements ServletApplicationInitializer
-    {
-        private final ApplicationInitializer initializer;
-
-        public ServletApplicationInitializerTerminator(ApplicationInitializer initializer)
-        {
-            this.initializer = initializer;
-        }
-
-        public void initializeApplication(ServletContext servletContext)
-        {
-            applicationGlobals.storeServletContext(servletContext);
-
-            // And now, down the (Web) ApplicationInitializer pipeline ...
-
-            ContextImpl context = new ContextImpl(servletContext);
-
-            applicationGlobals.storeContext(context);
-
-            initializer.initializeApplication(context);
-        }
-    }
-
-    /**
-     * @since 5.1.0.0
-     */
-    private class RequestHandlerTerminator implements RequestHandler
-    {
-        private final Dispatcher masterDispatcher;
-
-        public RequestHandlerTerminator(Dispatcher masterDispatcher)
-        {
-            this.masterDispatcher = masterDispatcher;
-        }
-
-        public boolean service(Request request, Response response) throws IOException
-        {
-            // Update RequestGlobals with the current request/response (in case
-            // some filter replaced the
-            // normal set).
-            requestGlobals.storeRequestResponse(request, response);
-
-            return masterDispatcher.dispatch(request, response);
-        }
-    }
-
     public static void bind(ServiceBinder binder)
     {
         binder.bind(PersistentLocale.class, PersistentLocaleImpl.class);
@@ -346,10 +474,8 @@ public final class TapestryModule
                 ApplicationStatePersistenceStrategySourceImpl.class);
         binder.bind(BindingSource.class, BindingSourceImpl.class);
         binder.bind(FieldValidatorSource.class, FieldValidatorSourceImpl.class);
-        binder.bind(ApplicationGlobals.class, ApplicationGlobalsImpl.class);
         binder.bind(Cookies.class, CookiesImpl.class);
         binder.bind(FieldValidatorDefaultSource.class, FieldValidatorDefaultSourceImpl.class);
-        binder.bind(RequestGlobals.class, RequestGlobalsImpl.class);
         binder.bind(ResourceDigestGenerator.class, ResourceDigestGeneratorImpl.class);  // Remove in 5.5
         binder.bind(ValidationConstraintGenerator.class, ValidationConstraintGeneratorImpl.class);
         binder.bind(EnvironmentalShadowBuilder.class, EnvironmentalShadowBuilderImpl.class);
@@ -366,7 +492,6 @@ public final class TapestryModule
         binder.bind(NullFieldStrategySource.class, NullFieldStrategySourceImpl.class);
         binder.bind(HttpServletRequestFilter.class, IgnoredPathsFilter.class).withSimpleId();
         binder.bind(ContextValueEncoder.class, ContextValueEncoderImpl.class);
-        binder.bind(BaseURLSource.class, BaseURLSourceImpl.class);
         binder.bind(BeanBlockOverrideSource.class, BeanBlockOverrideSourceImpl.class);
         binder.bind(HiddenFieldLocationRules.class, HiddenFieldLocationRulesImpl.class);
         binder.bind(PageDocumentGenerator.class, PageDocumentGeneratorImpl.class);
@@ -382,7 +507,6 @@ public final class TapestryModule
         binder.bind(URLEncoder.class, URLEncoderImpl.class);
         binder.bind(ContextPathEncoder.class, ContextPathEncoderImpl.class);
         binder.bind(ApplicationStatePersistenceStrategy.class, SessionApplicationStatePersistenceStrategy.class).withSimpleId();
-        binder.bind(TapestrySessionFactory.class, TapestrySessionFactoryImpl.class);
         binder.bind(NumericTranslatorSupport.class);
         binder.bind(ClientDataEncoder.class, ClientDataEncoderImpl.class);
         binder.bind(ComponentEventLinkEncoder.class, ComponentEventLinkEncoderImpl.class);
@@ -476,7 +600,7 @@ public final class TapestryModule
 
     @Contribute(ComponentClassResolver.class)
     public static void provideCoreAndAppLibraries(Configuration<LibraryMapping> configuration,
-                                                  @Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
+                                                  @Symbol(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
                                                   String appRootPackage)
     {
         configuration.add(new LibraryMapping(InternalConstants.CORE_LIBRARY, "org.apache.tapestry5.corelib"));
@@ -796,7 +920,7 @@ public final class TapestryModule
     /**
      * <dl>
      * <dt>StoreIntoGlobals</dt>
-     * <dd>Stores the request and response into {@link org.apache.tapestry5.services.RequestGlobals} at the start of the
+     * <dd>Stores the request and response into {@link org.apache.tapestry5.http.services.RequestGlobals} at the start of the
      * pipeline</dd>
      * <dt>IgnoredPaths</dt>
      * <dd>Identifies requests that are known (via the IgnoredPathsFilter service's configuration) to be mapped to other
@@ -807,31 +931,10 @@ public final class TapestryModule
      */
     public void contributeHttpServletRequestHandler(OrderedConfiguration<HttpServletRequestFilter> configuration,
 
-                                                    @Symbol(SymbolConstants.GZIP_COMPRESSION_ENABLED)
-                                                    boolean gzipCompressionEnabled,
-
-                                                    @Autobuild
-                                                    GZipFilter gzipFilter,
-
                                                     @InjectService("IgnoredPathsFilter")
                                                     HttpServletRequestFilter ignoredPathsFilter)
     {
         configuration.add("IgnoredPaths", ignoredPathsFilter);
-
-        configuration.add("GZIP", gzipCompressionEnabled ? gzipFilter : null);
-
-        HttpServletRequestFilter storeIntoGlobals = new HttpServletRequestFilter()
-        {
-            public boolean service(HttpServletRequest request, HttpServletResponse response,
-                                   HttpServletRequestHandler handler) throws IOException
-            {
-                requestGlobals.storeServletRequestResponse(request, response);
-
-                return handler.service(request, response);
-            }
-        };
-
-        configuration.add("StoreIntoGlobals", storeIntoGlobals, "before:*");
     }
 
     /**
@@ -848,7 +951,7 @@ public final class TapestryModule
      * <dd>Catches request errors and lets the {@link org.apache.tapestry5.services.RequestExceptionHandler} handle them
      * </dd>
      * <dt>StoreIntoGlobals</dt>
-     * <dd>Stores the request and response into the {@link org.apache.tapestry5.services.RequestGlobals} service (this
+     * <dd>Stores the request and response into the {@link org.apache.tapestry5.http.services.RequestGlobals} service (this
      * is repeated at the end of the pipeline, in case any filter substitutes the request or response).
      * <dt>EndOfRequest</dt>
      * <dd>Notifies internal services that the request has ended</dd>
@@ -856,7 +959,7 @@ public final class TapestryModule
      */
     public void contributeRequestHandler(OrderedConfiguration<RequestFilter> configuration, Context context,
 
-                                         @Symbol(SymbolConstants.PRODUCTION_MODE)
+                                         @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                          boolean productionMode)
     {
         RequestFilter staticFilesFilter = new StaticFilesFilter(context);
@@ -1277,61 +1380,6 @@ public final class TapestryModule
     }
 
     /**
-     * Initializes the application, using a pipeline of {@link org.apache.tapestry5.services.ApplicationInitializer}s.
-     */
-    @Marker(Primary.class)
-    public ApplicationInitializer buildApplicationInitializer(Logger logger,
-                                                              List<ApplicationInitializerFilter> configuration)
-    {
-        ApplicationInitializer terminator = new ApplicationInitializerTerminator();
-
-        return pipelineBuilder.build(logger, ApplicationInitializer.class, ApplicationInitializerFilter.class,
-                configuration, terminator);
-    }
-
-    public HttpServletRequestHandler buildHttpServletRequestHandler(Logger logger,
-
-                                                                    List<HttpServletRequestFilter> configuration,
-
-                                                                    @Primary
-                                                                    RequestHandler handler,
-
-                                                                    @Symbol(SymbolConstants.CHARSET)
-                                                                    String applicationCharset,
-
-                                                                    TapestrySessionFactory sessionFactory)
-    {
-        HttpServletRequestHandler terminator = new HttpServletRequestHandlerTerminator(handler, applicationCharset,
-                sessionFactory);
-
-        return pipelineBuilder.build(logger, HttpServletRequestHandler.class, HttpServletRequestFilter.class,
-                configuration, terminator);
-    }
-
-    @Marker(Primary.class)
-    public RequestHandler buildRequestHandler(Logger logger, List<RequestFilter> configuration,
-
-                                              @Primary
-                                              Dispatcher masterDispatcher)
-    {
-        RequestHandler terminator = new RequestHandlerTerminator(masterDispatcher);
-
-        return pipelineBuilder.build(logger, RequestHandler.class, RequestFilter.class, configuration, terminator);
-    }
-
-    public ServletApplicationInitializer buildServletApplicationInitializer(Logger logger,
-                                                                            List<ServletApplicationInitializerFilter> configuration,
-
-                                                                            @Primary
-                                                                            ApplicationInitializer initializer)
-    {
-        ServletApplicationInitializer terminator = new ServletApplicationInitializerTerminator(initializer);
-
-        return pipelineBuilder.build(logger, ServletApplicationInitializer.class,
-                ServletApplicationInitializerFilter.class, configuration, terminator);
-    }
-
-    /**
      * The component event result processor used for normal component requests.
      */
     @Marker(
@@ -1427,16 +1475,6 @@ public final class TapestryModule
     }
 
     /**
-     * Ordered contributions to the MasterDispatcher service allow different URL
-     * matching strategies to occur.
-     */
-    @Marker(Primary.class)
-    public Dispatcher buildMasterDispatcher(List<Dispatcher> configuration)
-    {
-        return chainBuilder.build(Dispatcher.class, configuration);
-    }
-
-    /**
      * Builds a shadow of the RequestGlobals.request property. Note again that
      * the shadow can be an ordinary singleton,
      * even though RequestGlobals is perthread.
@@ -1447,34 +1485,6 @@ public final class TapestryModule
     }
 
     /**
-     * Builds a shadow of the RequestGlobals.HTTPServletRequest property.
-     * Generally, you should inject the {@link Request} service instead, as
-     * future version of Tapestry may operate beyond just the servlet API.
-     */
-    public HttpServletRequest buildHttpServletRequest()
-    {
-        return shadowBuilder.build(requestGlobals, "HTTPServletRequest", HttpServletRequest.class);
-    }
-
-    /**
-     * @since 5.1.0.0
-     */
-    public HttpServletResponse buildHttpServletResponse()
-    {
-        return shadowBuilder.build(requestGlobals, "HTTPServletResponse", HttpServletResponse.class);
-    }
-
-    /**
-     * Builds a shadow of the RequestGlobals.response property. Note again that
-     * the shadow can be an ordinary singleton,
-     * even though RequestGlobals is perthread.
-     */
-    public Response buildResponse()
-    {
-        return shadowBuilder.build(requestGlobals, "response", Response.class);
-    }
-
-    /**
      * The MarkupRenderer service is used to render a full page as markup.
      * Supports an ordered configuration of {@link org.apache.tapestry5.services.MarkupRendererFilter}s.
      */
@@ -1494,7 +1504,6 @@ public final class TapestryModule
                                                             List<PartialMarkupRendererFilter> configuration, @Autobuild
     PartialMarkupRendererTerminator terminator)
     {
-
         return pipelineBuilder.build(logger, PartialMarkupRenderer.class, PartialMarkupRendererFilter.class,
                 configuration, terminator);
     }
@@ -1628,7 +1637,7 @@ public final class TapestryModule
      * <dd>The stream response is sent as the actual response</dd>
      * <dt>String</dt>
      * <dd>Interprets the value as a logical page name and sends a client response to redirect to that page</dd>
-     * <dt>{@link org.apache.tapestry5.Link}</dt>
+     * <dt>{@link org.apache.tapestry5.http.Link}</dt>
      * <dd>Sends a JSON response to redirect to the link</dd>
      * <dt>{@link Class}</dt>
      * <dd>Treats the class as a page class and sends a redirect for a page render for that page</dd>
@@ -1689,7 +1698,7 @@ public final class TapestryModule
 
     /**
      * Contributes a default object renderer for type Object, plus specialized
-     * renderers for {@link org.apache.tapestry5.services.Request}, {@link org.apache.tapestry5.commons.Location},
+     * renderers for {@link org.apache.tapestry5.http.services.Request}, {@link org.apache.tapestry5.commons.Location},
      * {@link org.apache.tapestry5.ComponentResources}, {@link org.apache.tapestry5.EventContext},
      * {@link AvailableValues},
      * List, and Object[].
@@ -1746,7 +1755,7 @@ public final class TapestryModule
      * </dl>
      *
      * @see org.apache.tapestry5.SymbolConstants#OMIT_GENERATOR_META
-     * @see org.apache.tapestry5.SymbolConstants#PRODUCTION_MODE
+     * @see org.apache.tapestry5.http.TapestryHttpSymbolConstants#PRODUCTION_MODE
      * @see org.apache.tapestry5.SymbolConstants#INCLUDE_CORE_STACK
      * @see org.apache.tapestry5.SymbolConstants#ENABLE_PAGELOADING_MASK
      */
@@ -1760,7 +1769,7 @@ public final class TapestryModule
                                          @Symbol(SymbolConstants.TAPESTRY_VERSION)
                                          final String tapestryVersion,
 
-                                         @Symbol(SymbolConstants.PRODUCTION_MODE)
+                                         @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                          boolean productionMode,
 
                                          @Symbol(SymbolConstants.INCLUDE_CORE_STACK)
@@ -2055,9 +2064,7 @@ public final class TapestryModule
 
         configuration.add(SymbolConstants.START_PAGE_NAME, "start");
 
-        configuration.add(SymbolConstants.PRODUCTION_MODE, true);
-
-        configuration.add(SymbolConstants.CLUSTERED_SESSIONS, true);
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, true);
 
         configuration.add(SymbolConstants.COMPRESS_WHITESPACE, true);
 
@@ -2082,17 +2089,11 @@ public final class TapestryModule
 
         configuration.add(MetaDataConstants.RESPONSE_CONTENT_TYPE, "text/html");
 
-        configuration.add(SymbolConstants.CHARSET, "UTF-8");
-
         configuration.add(SymbolConstants.APPLICATION_CATALOG,
-                String.format("context:WEB-INF/${%s}.properties", InternalSymbols.APP_NAME));
+                String.format("context:WEB-INF/${%s}.properties", TapestryHttpInternalSymbols.APP_NAME));
 
         configuration.add(SymbolConstants.EXCEPTION_REPORT_PAGE, "ExceptionReport");
 
-        configuration.add(SymbolConstants.MIN_GZIP_SIZE, 100);
-
-        configuration.add(SymbolConstants.APPLICATION_VERSION, "0.0.1");
-
         configuration.add(SymbolConstants.OMIT_GENERATOR_META, false);
 
         configuration.add(SymbolConstants.SECURE_ENABLED, SymbolConstants.PRODUCTION_MODE_VALUE);
@@ -2104,11 +2105,6 @@ public final class TapestryModule
 
         configuration.add(SymbolConstants.COMPONENT_RENDER_TRACING_ENABLED, false);
 
-        // The default values denote "use values from request"
-        configuration.add(SymbolConstants.HOSTNAME, "");
-        configuration.add(SymbolConstants.HOSTPORT, 0);
-        configuration.add(SymbolConstants.HOSTPORT_SECURE, 0);
-
         configuration.add(SymbolConstants.APPLICATION_FOLDER, "");
 
         // Grid component parameter defaults
@@ -2138,14 +2134,12 @@ public final class TapestryModule
         // By default, no page is on the whitelist unless it has the @WhitelistAccessOnly annotation
         configuration.add(MetaDataConstants.WHITELIST_ONLY_PAGE, false);
 
-        configuration.add(SymbolConstants.CONTEXT_PATH, "");
+        configuration.add(TapestryHttpSymbolConstants.CONTEXT_PATH, "");
 
         // Leaving this as the default results in a runtime error logged to the console (and a default password is used);
         // you are expected to override this symbol.
         configuration.add(SymbolConstants.HMAC_PASSPHRASE, "");
 
-        configuration.add(SymbolConstants.SESSION_LOCKING_ENABLED, true);
-
         // TAP5-2070 keep the old behavior, defaults to false
         configuration.add(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK, false);
 
@@ -2371,46 +2365,6 @@ public final class TapestryModule
     }
 
     /**
-     * The master SessionPersistedObjectAnalyzer.
-     *
-     * @since 5.1.0.0
-     */
-    @Marker(Primary.class)
-    public SessionPersistedObjectAnalyzer buildSessionPersistedObjectAnalyzer(
-            Map<Class, SessionPersistedObjectAnalyzer> configuration)
-    {
-        return strategyBuilder.build(SessionPersistedObjectAnalyzer.class, configuration);
-    }
-
-    /**
-     * Identifies String, Number and Boolean as immutable objects, a catch-all
-     * handler for Object (that understands
-     * the {@link org.apache.tapestry5.annotations.ImmutableSessionPersistedObject} annotation),
-     * and a handler for {@link org.apache.tapestry5.OptimizedSessionPersistedObject}.
-     *
-     * @since 5.1.0.0
-     */
-    public static void contributeSessionPersistedObjectAnalyzer(
-            MappedConfiguration<Class, SessionPersistedObjectAnalyzer> configuration)
-    {
-        configuration.add(Object.class, new DefaultSessionPersistedObjectAnalyzer());
-
-        SessionPersistedObjectAnalyzer<Object> immutable = new SessionPersistedObjectAnalyzer<Object>()
-        {
-            public boolean checkAndResetDirtyState(Object sessionPersistedObject)
-            {
-                return false;
-            }
-        };
-
-        configuration.add(String.class, immutable);
-        configuration.add(Number.class, immutable);
-        configuration.add(Boolean.class, immutable);
-
-        configuration.add(OptimizedSessionPersistedObject.class, new OptimizedSessionPersistedObjectAnalyzer());
-    }
-
-    /**
      * @since 5.1.1.0
      */
     @Marker(Primary.class)
@@ -2496,7 +2450,7 @@ public final class TapestryModule
      *
      * @since 5.2.0
      */
-    public void contributeComponentRequestHandler(OrderedConfiguration<ComponentRequestFilter> configuration, @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode)
+    public void contributeComponentRequestHandler(OrderedConfiguration<ComponentRequestFilter> configuration, @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE) boolean productionMode)
     {
         configuration.addInstance("OperationTracker", RequestOperationTracker.class);
 
@@ -2659,7 +2613,7 @@ public final class TapestryModule
      */
     @Contribute(ServiceOverride.class)
     public static void productionModeOverrides(MappedConfiguration<Class, Object> configuration,
-                                               @Symbol(SymbolConstants.PRODUCTION_MODE)
+                                               @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
                                                boolean productionMode)
     {
         if (productionMode)
@@ -2810,5 +2764,5 @@ public final class TapestryModule
             return info;
         }
     }
-
+    
 }
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetRequestDispatcher.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetRequestDispatcher.java
index 8d9f58d..1f31e97 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetRequestDispatcher.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/AssetRequestDispatcher.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Target;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 /**
- * Marker annotation used to specifically identify the {@link org.apache.tapestry5.services.Dispatcher} used to dispatch
+ * Marker annotation used to specifically identify the {@link org.apache.tapestry5.http.services.Dispatcher} used to dispatch
  * asset requests (so that {@link org.apache.tapestry5.services.assets.AssetRequestHandler}s can be contributed).
  */
 @Target(
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ClientBehaviorSupport.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ClientBehaviorSupport.java
index 22e5bc0..145e89e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ClientBehaviorSupport.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ClientBehaviorSupport.java
@@ -13,8 +13,8 @@
 package org.apache.tapestry5.services;
 
 import org.apache.tapestry5.Field;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.corelib.data.InsertPosition;
+import org.apache.tapestry5.http.Link;
 
 /**
  * Collects details about zone usage for efficient initialization of the client side objects. This has grown to include
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java
index c2c491e..3110ef1 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventLinkEncoder.java
@@ -12,12 +12,13 @@
 
 package org.apache.tapestry5.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.services.linktransform.ComponentEventLinkTransformer;
 import org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer;
 
 /**
- * Responsible for creating {@link org.apache.tapestry5.Link}s for page render requests and for component event
+ * Responsible for creating {@link org.apache.tapestry5.http.Link}s for page render requests and for component event
  * requests, and for parsing incoming paths to identify requests that are component event or page render requests. This
  * centralizes some logic that was scattered about in Tapestry 5.0.
  * 
@@ -57,7 +58,7 @@ public interface ComponentEventLinkEncoder
      * In many cases the context name is blank, so the path begins with a "/" and then the locale name or page name.
      *
      * The page name portion may itself consist of a series of folder names, i.e., "admin/user/create". The context
-     * portion isn't the concern of this code, since {@link org.apache.tapestry5.services.Request#getPath()} will
+     * portion isn't the concern of this code, since {@link org.apache.tapestry5.http.services.Request#getPath()} will
      * already have stripped that off. We can act as if the context is always "/" (the path always starts with a slash).
      *
      * Passes the resulting Link through the {@link ComponentEventLinkTransformer} chain of command, returning the
@@ -72,7 +73,7 @@ public interface ComponentEventLinkEncoder
     Link createComponentEventLink(ComponentEventRequestParameters parameters, boolean forForm);
 
     /**
-     * Checks the request, primarily the {@linkplain org.apache.tapestry5.services.Request#getPath() path}, to determine
+     * Checks the request, primarily the {@linkplain org.apache.tapestry5.http.services.Request#getPath() path}, to determine
      * the if the request is a component event request. As a side-effect (necessary for historical reasons), responsible
      * for setting the locale for the thread, including the {@link org.apache.tapestry5.services.PersistentLocale} ...
      * but only if the locale is a component event.
@@ -84,7 +85,7 @@ public interface ComponentEventLinkEncoder
     ComponentEventRequestParameters decodeComponentEventRequest(Request request);
 
     /**
-     * Checks the request, primarily the {@linkplain org.apache.tapestry5.services.Request#getPath() path}, to determine
+     * Checks the request, primarily the {@linkplain org.apache.tapestry5.http.services.Request#getPath() path}, to determine
      * the if the request is a page render request. As a side-effect (necessary for historical reasons), responsible for
      * setting the locale for the thread, including the {@link org.apache.tapestry5.services.PersistentLocale} ... but
      * only if the request is a page render.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventResultProcessor.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventResultProcessor.java
index 63ed7a3..468b3f8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventResultProcessor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentEventResultProcessor.java
@@ -36,7 +36,7 @@ public interface ComponentEventResultProcessor<T>
      *
      * Starting in release 5.4, it is recommended that for any response that involves Tapestry pages or components,
      * the implementation should create an {@link org.apache.tapestry5.ioc.IOOperation} to do the rendering, and
-     * add the operation to the {@link org.apache.tapestry5.services.Request} as attribute
+     * add the operation to the {@link org.apache.tapestry5.http.services.Request} as attribute
      * {@link org.apache.tapestry5.TapestryConstants#RESPONSE_RENDERER}.
      * This avoids a number of issues related to the {@link org.apache.tapestry5.services.Environment}.
      *
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
index bd589d2..2917f67 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
@@ -15,6 +15,8 @@
 package org.apache.tapestry5.services;
 
 import org.apache.tapestry5.EventConstants;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.runtime.Component;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/Cookies.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/Cookies.java
index a275ae9..2cdb34b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/Cookies.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/Cookies.java
@@ -15,11 +15,12 @@
 package org.apache.tapestry5.services;
 
 import org.apache.tapestry5.CookieBuilder;
+import org.apache.tapestry5.http.services.Request;
 
 /**
  * Used by other services to obtain cookie values for the current request, or to write cookie values as part of the
  * request.  Note that when writing cookies, the cookie's secure flag will match {@link
- * org.apache.tapestry5.services.Request#isSecure()}.
+ * org.apache.tapestry5.http.services.Request#isSecure()}.
  */
 public interface Cookies
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/DelegatingRequest.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/DelegatingRequest.java
index d2f366f..db4c2b0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/DelegatingRequest.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/DelegatingRequest.java
@@ -17,6 +17,9 @@ package org.apache.tapestry5.services;
 import java.util.List;
 import java.util.Locale;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
+
 /**
  * Class that wraps an {@linkplain Request}, delegating all its methods.
  * 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/InitializeActivePageName.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/InitializeActivePageName.java
index c9c6e3d..8daa1bc 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/InitializeActivePageName.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/InitializeActivePageName.java
@@ -16,6 +16,8 @@ package org.apache.tapestry5.services;
 
 import java.io.IOException;
 
+import org.apache.tapestry5.http.services.RequestGlobals;
+
 /**
  * Filter contributed into the {@link ComponentRequestHandler} pipeline to set the
  * {@link RequestGlobals#getActivePageName() activePageName property}.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationHub.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationHub.java
index f0bfa67..fc5b9e0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationHub.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationHub.java
@@ -15,7 +15,7 @@
 package org.apache.tapestry5.services;
 
 /**
- * A service that allows listeners to be registered to learn about {@link org.apache.tapestry5.Link} creation.
+ * A service that allows listeners to be registered to learn about {@link org.apache.tapestry5.http.Link} creation.
  */
 public interface LinkCreationHub
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationListener.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationListener.java
index 4219360..2c61246 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationListener.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationListener.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 
 /**
  * Listener interface for objects that need to be notified about newly created links.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationListener2.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationListener2.java
index c17b6cf..df28d7c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationListener2.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/LinkCreationListener2.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 
 public interface LinkCreationListener2
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/MarkupWriterFactory.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/MarkupWriterFactory.java
index b00c338..1d358f8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/MarkupWriterFactory.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/MarkupWriterFactory.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.services;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.internal.structure.Page;
 
 /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/PageRenderLinkSource.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/PageRenderLinkSource.java
index 6ea42ae..003e8d2 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/PageRenderLinkSource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/PageRenderLinkSource.java
@@ -13,7 +13,7 @@
 package org.apache.tapestry5.services;
 
 import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 
 /**
  * A service that allows other services to create page render links.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/PathConstructor.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/PathConstructor.java
index b6ccb3e..65fc945 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/PathConstructor.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/PathConstructor.java
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry5.services;
 
+import org.apache.tapestry5.http.services.Dispatcher;
+
 /**
  * Central location for logic related to building client-side paths, taking into account
  * the context path (if any), and the {@link org.apache.tapestry5.SymbolConstants#APPLICATION_FOLDER}
@@ -36,7 +38,7 @@ public interface PathConstructor
 
     /**
      * Constructs the dispatch path, which is like the client path, but omits the context path; this aligns
-     * the result with the value returned from {@link org.apache.tapestry5.services.Request#getPath()}, and is used
+     * the result with the value returned from {@link org.apache.tapestry5.http.services.Request#getPath()}, and is used
      * in code, typically {@link Dispatcher} implementations, that are attempting to route based on the incoming request path.
      *
      * @param terms
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseRenderer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseRenderer.java
index eddd156..5d3c135 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseRenderer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseRenderer.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.services;
 
-import org.apache.tapestry5.ContentType;
-
 import java.io.IOException;
 
+import org.apache.tapestry5.http.ContentType;
+
 /**
  * Public facade around internal services related to rendering a markup response.
  */
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/StreamPageContent.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/StreamPageContent.java
index 1f54e18..96dd8e8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/StreamPageContent.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/StreamPageContent.java
@@ -58,7 +58,7 @@ public final class StreamPageContent
      * Renders the page using the supplied page activation context.
      *
      * @param pageClass             class of the page to render, or null to render the currently active page (as per
-     *                              {@link org.apache.tapestry5.services.RequestGlobals#getActivePageName()})
+     *                              {@link org.apache.tapestry5.http.services.RequestGlobals#getActivePageName()})
      * @param pageActivationContext activation context of the page
      */
     public StreamPageContent(final Class<?> pageClass, final Object... pageActivationContext)
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetRequestHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetRequestHandler.java
index 54d8164..379f960 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetRequestHandler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetRequestHandler.java
@@ -13,9 +13,9 @@
 package org.apache.tapestry5.services.assets;
 
 import org.apache.tapestry5.Asset;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.services.AssetDispatcher;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/CompressionStatus.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/CompressionStatus.java
index f80bed3..448ce43 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/CompressionStatus.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/CompressionStatus.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.services.assets;
 
-import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.http.services.Response;
 
 /**
  * Indicates how the content inside a {@link StreamableResource} is (potentially) compressed.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ContentTypeAnalyzer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ContentTypeAnalyzer.java
index 4424afb..79db1c7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ContentTypeAnalyzer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ContentTypeAnalyzer.java
@@ -13,8 +13,8 @@
 package org.apache.tapestry5.services.assets;
 
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
-import org.apache.tapestry5.services.Context;
 
 /**
  * Used to determine the MIME content type for a resource. The service configuration is the first step,
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceTransformer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceTransformer.java
index c853781..8e8f34f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceTransformer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceTransformer.java
@@ -12,8 +12,8 @@
 
 package org.apache.tapestry5.services.assets;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.ContentType;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResponseCustomizer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResponseCustomizer.java
index 6958bdf..dd03d8e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResponseCustomizer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResponseCustomizer.java
@@ -12,10 +12,10 @@
 
 package org.apache.tapestry5.services.assets;
 
-import org.apache.tapestry5.services.Response;
-
 import java.io.IOException;
 
+import org.apache.tapestry5.http.services.Response;
+
 /**
  * Used to customize the response prior to streaming content to the client; typically this is used to
  * set special headers.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/StreamableResource.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/StreamableResource.java
index 4131610..15b0b83 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/StreamableResource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/StreamableResource.java
@@ -12,8 +12,8 @@
 
 package org.apache.tapestry5.services.assets;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.ioc.annotations.IncompatibleChange;
 
 import java.io.IOException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/StreamableResourceSource.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/StreamableResourceSource.java
index 60f3009..8acee93 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/StreamableResourceSource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/StreamableResourceSource.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.services.assets;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
 
 import java.io.IOException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java
index 08556e3..d36cfbd 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/ComponentEventLinkTransformer.java
@@ -12,12 +12,12 @@
 
 package org.apache.tapestry5.services.linktransform;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.services.ComponentEventDispatcher;
 import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
 import org.apache.tapestry5.services.LocalizationSetter;
-import org.apache.tapestry5.services.Request;
 
 /**
  * Allows for selective replacement of the default {@link Link} used to represent a component event request.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java
index 03b8133..69bc6c8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/linktransform/PageRenderLinkTransformer.java
@@ -12,13 +12,13 @@
 
 package org.apache.tapestry5.services.linktransform;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.services.PageRenderDispatcher;
 import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
 import org.apache.tapestry5.services.ComponentEventLinkEncoder;
 import org.apache.tapestry5.services.LocalizationSetter;
 import org.apache.tapestry5.services.PageRenderRequestParameters;
-import org.apache.tapestry5.services.Request;
 
 /**
  * Allows the default {@link Link} for a page render request to be replaced.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java
index b543b27..05ac9a1 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.java
@@ -18,7 +18,7 @@ import org.apache.tapestry5.ioc.services.ThreadLocale;
 
 /**
  * Determines the {@link ComponentResourceSelector} for the current request. This is often based on cookies, query
- * parameters, or other details available in the {@link org.apache.tapestry5.services.Request}. The default implementation simply wraps the
+ * parameters, or other details available in the {@link org.apache.tapestry5.http.services.Request}. The default implementation simply wraps the
  * {@linkplain ThreadLocale current locale} as a ComponentResourceSelector. A custom implementation may
  * {@linkplain ComponentResourceSelector#withAxis(Class, Object) add additional axes} to the selector.
  * 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/security/WhitelistAnalyzer.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/security/WhitelistAnalyzer.java
index b7f81e4..866ae65 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/security/WhitelistAnalyzer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/security/WhitelistAnalyzer.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.services.security;
 
-import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.http.services.Request;
 
 /**
  * Given a request, determine if the request is from a client on the whitelist.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/test/PageTester.java b/tapestry-core/src/main/java/org/apache/tapestry5/test/PageTester.java
index 86c84ba..41921d6 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/test/PageTester.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/test/PageTester.java
@@ -12,13 +12,15 @@
 
 package org.apache.tapestry5.test;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.dom.Document;
 import org.apache.tapestry5.dom.Element;
 import org.apache.tapestry5.dom.Visitor;
-import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.internal.SingleKeySymbolProvider;
-import org.apache.tapestry5.internal.TapestryAppInitializer;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.internal.SingleKeySymbolProvider;
+import org.apache.tapestry5.http.internal.TapestryAppInitializer;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
+import org.apache.tapestry5.http.services.ApplicationGlobals;
+import org.apache.tapestry5.http.services.RequestHandler;
 import org.apache.tapestry5.internal.test.PageTesterContext;
 import org.apache.tapestry5.internal.test.PageTesterModule;
 import org.apache.tapestry5.internal.test.TestableRequest;
@@ -27,8 +29,6 @@ import org.apache.tapestry5.ioc.Registry;
 import org.apache.tapestry5.ioc.def.ModuleDef;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.services.SymbolProvider;
-import org.apache.tapestry5.services.ApplicationGlobals;
-import org.apache.tapestry5.services.RequestHandler;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
@@ -97,7 +97,7 @@ public class PageTester
         assert appName != null;
         assert InternalUtils.isNonBlank(contextPath);
 
-        SymbolProvider provider = new SingleKeySymbolProvider(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM, appPackage);
+        SymbolProvider provider = new SingleKeySymbolProvider(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM, appPackage);
 
         TapestryAppInitializer initializer = new TapestryAppInitializer(LoggerFactory.getLogger(PageTester.class), provider, appName,
                 null);
@@ -595,7 +595,7 @@ public class PageTester
 
     /**
      * Sets the simulated browser's preferred language, i.e., the value returned from
-     * {@link org.apache.tapestry5.services.Request#getLocale()}.
+     * {@link org.apache.tapestry5.http.services.Request#getLocale()}.
      *
      * @param preferedLanguage
      *         preferred language setting
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 539dd51..3b000c9 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
@@ -24,6 +24,15 @@ import org.apache.tapestry5.beanmodel.PropertyModel;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.*;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Context;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.services.MapMessages;
 import org.apache.tapestry5.internal.services.MarkupWriterImpl;
 import org.apache.tapestry5.ioc.annotations.Inject;
@@ -40,7 +49,6 @@ 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;
@@ -48,22 +56,15 @@ 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;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java b/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java
index 3cb0b71..20c08eb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/util/ResponseWrapper.java
@@ -18,11 +18,11 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
 
-import org.apache.tapestry5.Link;
-import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Response;
 
 /**
- * Implementation of {@link org.apache.tapestry5.services.Response} that delegates all method invocations to a delegate
+ * Implementation of {@link org.apache.tapestry5.http.services.Response} that delegates all method invocations to a delegate
  * instance. This is used as a base class for overriding just some behaviors of Response.
  */
 public class ResponseWrapper implements Response
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/util/TextStreamResponse.java b/tapestry-core/src/main/java/org/apache/tapestry5/util/TextStreamResponse.java
index d3ad2f1..fcc2e1e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/util/TextStreamResponse.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/util/TextStreamResponse.java
@@ -16,9 +16,9 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.tapestry5.ContentType;
 import org.apache.tapestry5.StreamResponse;
-import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.services.Response;
 
 public class TextStreamResponse implements StreamResponse
 {
@@ -43,7 +43,7 @@ public class TextStreamResponse implements StreamResponse
      *            character set of output, usually "UTF-8"
      * @param text
      *            text to be streamed in the response
-     * @see org.apache.tapestry5.SymbolConstants#CHARSET
+     * @see org.apache.tapestry5.http.TapestryHttpSymbolConstants#CHARSET
      */
     public TextStreamResponse(String contentType, String charset, String text)
     {
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/corelib/components/PageLinkTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/corelib/components/PageLinkTest.groovy
index aaf49d3..34e6a4f 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/corelib/components/PageLinkTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/corelib/components/PageLinkTest.groovy
@@ -1,8 +1,8 @@
 package org.apache.tapestry5.corelib.components
 
 import org.apache.tapestry5.ComponentResources
-import org.apache.tapestry5.Link
 import org.apache.tapestry5.MarkupWriter
+import org.apache.tapestry5.http.Link
 import org.apache.tapestry5.services.PageRenderLinkSource
 import org.apache.tapestry5.test.TapestryTestCase
 import org.testng.annotations.Test
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/components/Layout.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/components/Layout.groovy
index 85076f9..66a7aff 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/components/Layout.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/components/Layout.groovy
@@ -15,9 +15,9 @@
 package org.apache.tapestry5.integration.app5.components
 
 import org.apache.tapestry5.annotations.Property
+import org.apache.tapestry5.http.services.Request
+import org.apache.tapestry5.http.services.Session
 import org.apache.tapestry5.ioc.annotations.Inject
-import org.apache.tapestry5.services.Request
-import org.apache.tapestry5.services.Session;
 
 class Layout {
 
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Error404.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Error404.groovy
index c180748..d4cbe40 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Error404.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Error404.groovy
@@ -2,9 +2,9 @@ package org.apache.tapestry5.integration.app5.pages
 
 import javax.servlet.http.HttpServletResponse
 
+import org.apache.tapestry5.http.services.Request
+import org.apache.tapestry5.http.services.Response
 import org.apache.tapestry5.ioc.annotations.Inject
-import org.apache.tapestry5.services.Request
-import org.apache.tapestry5.services.Response
 
 class Error404 {
 
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/services/AppModule.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/services/AppModule.groovy
index cfb5f6e..3ff57f8 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/services/AppModule.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/services/AppModule.groovy
@@ -16,13 +16,13 @@ import org.apache.tapestry5.SymbolConstants
 import org.apache.tapestry5.commons.MappedConfiguration
 import org.apache.tapestry5.commons.Resource
 import org.apache.tapestry5.func.F
+import org.apache.tapestry5.http.services.Response
 import org.apache.tapestry5.integration.app5.Client
 import org.apache.tapestry5.integration.app5.ClientTracker
 import org.apache.tapestry5.internal.services.assets.DelegatingSRS
 import org.apache.tapestry5.ioc.annotations.Decorate
 import org.apache.tapestry5.model.ComponentModel
 import org.apache.tapestry5.services.ApplicationStateManager
-import org.apache.tapestry5.services.Response
 import org.apache.tapestry5.services.assets.*
 import org.apache.tapestry5.services.pageload.ComponentRequestSelectorAnalyzer
 import org.apache.tapestry5.services.pageload.ComponentResourceLocator
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/symbolparam/components/Layout.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/symbolparam/components/Layout.groovy
index 132b69a..165aca5 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/symbolparam/components/Layout.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/symbolparam/components/Layout.groovy
@@ -16,9 +16,9 @@ package org.apache.tapestry5.integration.symbolparam.components
 
 import org.apache.tapestry5.annotations.Import
 import org.apache.tapestry5.annotations.Property
+import org.apache.tapestry5.http.services.Request
+import org.apache.tapestry5.http.services.Session
 import org.apache.tapestry5.ioc.annotations.Inject
-import org.apache.tapestry5.services.Request
-import org.apache.tapestry5.services.Session
 
 @Import(stack="core")
 class Layout {
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerTest.groovy
index db3b0bc..530830f 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerTest.groovy
@@ -2,8 +2,9 @@ package org.apache.tapestry5.internal.services
 
 import javax.servlet.http.HttpServletRequest
 
+import org.apache.tapestry5.http.internal.services.ResponseCompressionAnalyzerImpl
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer
 import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer
 import org.apache.tapestry5.test.ioc.TestBase
 import org.testng.annotations.Test
 
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImplTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImplTest.groovy
index 128a151..4fa9521 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImplTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImplTest.groovy
@@ -1,9 +1,9 @@
 package org.apache.tapestry5.internal.services.assets
 
+import org.apache.tapestry5.http.services.BaseURLSource
+import org.apache.tapestry5.http.services.Request
 import org.apache.tapestry5.internal.services.IdentityAssetPathConverter
-import org.apache.tapestry5.services.BaseURLSource
 import org.apache.tapestry5.services.PathConstructor
-import org.apache.tapestry5.services.Request
 import org.apache.tapestry5.services.assets.AssetChecksumGenerator
 import org.apache.tapestry5.services.assets.CompressionStatus
 import org.apache.tapestry5.services.assets.StreamableResource
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImplTest.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImplTest.groovy
index 0d5c1c4..1523cbd 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImplTest.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImplTest.groovy
@@ -1,7 +1,7 @@
 package org.apache.tapestry5.internal.structure
 
-import org.apache.tapestry5.internal.services.RequestGlobalsImpl
-import org.apache.tapestry5.services.Request
+import org.apache.tapestry5.http.internal.services.RequestGlobalsImpl
+import org.apache.tapestry5.http.services.Request
 import org.apache.tapestry5.test.ioc.TestBase
 import org.testng.annotations.Test
 
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy
index 26f5184..7f8eaf3 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/services/javascript/ModuleDispatcherTests.groovy
@@ -2,13 +2,13 @@ package org.apache.tapestry5.services.javascript
 
 import javax.servlet.http.HttpServletResponse
 
+import org.apache.tapestry5.http.services.Request
+import org.apache.tapestry5.http.services.Response
 import org.apache.tapestry5.internal.services.javascript.JavaScriptStackPathConstructor
 import org.apache.tapestry5.internal.services.javascript.ModuleDispatcher
 import org.apache.tapestry5.ioc.internal.QuietOperationTracker
 import org.apache.tapestry5.services.LocalizationSetter
 import org.apache.tapestry5.services.PathConstructor
-import org.apache.tapestry5.services.Request
-import org.apache.tapestry5.services.Response
 import org.apache.tapestry5.test.ioc.TestBase
 import org.easymock.EasyMock
 import org.testng.annotations.DataProvider
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/base/AbstractLinkTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/base/AbstractLinkTest.java
index ff7a46d..021b51e 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/base/AbstractLinkTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/base/AbstractLinkTest.java
@@ -15,9 +15,9 @@
 package org.apache.tapestry5.corelib.base;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.MarkupWriter;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.services.MarkupWriterImpl;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java
index 3fafab8..8e941f7 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java
@@ -20,6 +20,7 @@ import org.apache.tapestry5.corelib.components.SelectTest.Platform;
 import org.apache.tapestry5.corelib.data.BlankOption;
 import org.apache.tapestry5.corelib.data.SecureOption;
 import org.apache.tapestry5.dom.XMLMarkupModel;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.OptionGroupModelImpl;
 import org.apache.tapestry5.internal.OptionModelImpl;
@@ -32,7 +33,6 @@ import org.apache.tapestry5.internal.services.StringValueEncoder;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.services.ContextValueEncoder;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.ValueEncoderSource;
 import org.apache.tapestry5.util.EnumSelectModel;
 import org.apache.tapestry5.util.EnumValueEncoder;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SubmitTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SubmitTest.java
index 472c0ea..d2d863f 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SubmitTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SubmitTest.java
@@ -20,11 +20,11 @@ import org.apache.tapestry5.Asset;
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.EventConstants;
 import org.apache.tapestry5.corelib.internal.FormSupportImpl;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.services.HeartbeatImpl;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.services.FormSupport;
 import org.apache.tapestry5.services.Heartbeat;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.test.ioc.TestBase;
 import org.testng.annotations.Test;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/activationctx/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/activationctx/services/AppModule.java
index e2e6e82..6fa5e3f 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/activationctx/services/AppModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/activationctx/services/AppModule.java
@@ -16,6 +16,7 @@ package org.apache.tapestry5.integration.activationctx.services;
 
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 
 /**
  *
@@ -25,6 +26,6 @@ public class AppModule
     public static void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
     {
         configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en,fr");
-        configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, "false");
     }
 }
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/activationctx2/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/activationctx2/services/AppModule.java
index a8e201f..190a686 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/activationctx2/services/AppModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/activationctx2/services/AppModule.java
@@ -17,6 +17,7 @@ package org.apache.tapestry5.integration.activationctx2.services;
 import org.apache.tapestry5.MetaDataConstants;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 
 /**
  *
@@ -26,7 +27,7 @@ public class AppModule
     public static void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
     {
         configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en");
-        configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, "false");
         configuration.add(SymbolConstants.COMPRESS_WHITESPACE, "false");
 
         // Enable by default the check on activation context parameters
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
index e2d99fe..9214e2d 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
@@ -15,8 +15,8 @@ package org.apache.tapestry5.integration.app1.components;
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 
 import java.util.Calendar;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ActionViaLinkDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ActionViaLinkDemo.java
index 5289cac..83622e5 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ActionViaLinkDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ActionViaLinkDemo.java
@@ -13,9 +13,9 @@
 package org.apache.tapestry5.integration.app1.pages;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.PersistenceConstants;
 import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.annotations.Inject;
 
 public class ActionViaLinkDemo
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/AtInjectDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/AtInjectDemo.java
index 0977ec4..47be9f5 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/AtInjectDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/AtInjectDemo.java
@@ -19,12 +19,12 @@ import javax.inject.Named;
 
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.integration.app1.services.French;
 import org.apache.tapestry5.integration.app1.services.Greeter;
 import org.apache.tapestry5.integration.app1.services.MusicLibrary;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.BindingSource;
-import org.apache.tapestry5.services.Request;
 
 public class AtInjectDemo 
 {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ClientPersistenceDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ClientPersistenceDemo.java
index 41b924f..5cd7284 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ClientPersistenceDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ClientPersistenceDemo.java
@@ -13,10 +13,10 @@
 package org.apache.tapestry5.integration.app1.pages;
 
 import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.integration.app1.ClientDataWrapper;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 
 public class ClientPersistenceDemo
 {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DecorateComponentEventLinkDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DecorateComponentEventLinkDemo.java
index 35b66b0..da05480 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DecorateComponentEventLinkDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DecorateComponentEventLinkDemo.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.integration.app1.pages;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.RequestParameter;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
 
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DecoratePageRenderLinkDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DecoratePageRenderLinkDemo.java
index 2bd8099..7785abc 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DecoratePageRenderLinkDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DecoratePageRenderLinkDemo.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.integration.app1.pages;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.RequestParameter;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.services.PageRenderRequestParameters;
 
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/FormLinkParameters.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/FormLinkParameters.java
index 96d999c..aa3b252 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/FormLinkParameters.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/FormLinkParameters.java
@@ -15,10 +15,10 @@ package org.apache.tapestry5.integration.app1.pages;
 
 import java.net.URLEncoder;
 import org.apache.commons.codec.net.URLCodec;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.RequestParameter;
+import org.apache.tapestry5.http.Link;
 
 public class FormLinkParameters {
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
index 6fdd8d1..4af960f 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
@@ -13,12 +13,12 @@
 package org.apache.tapestry5.integration.app1.pages;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.PersistenceConstants;
 import org.apache.tapestry5.annotations.InjectPage;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.PageRenderLinkSource;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/InjectDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/InjectDemo.java
index 907e5f4..d052ecc 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/InjectDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/InjectDemo.java
@@ -18,6 +18,7 @@ import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.annotations.InjectPage;
 import org.apache.tapestry5.annotations.OnEvent;
 import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.integration.app1.services.French;
 import org.apache.tapestry5.integration.app1.services.Greeter;
 import org.apache.tapestry5.integration.app1.services.MusicLibrary;
@@ -25,7 +26,6 @@ import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.InjectService;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.BindingSource;
-import org.apache.tapestry5.services.Request;
 
 public class InjectDemo
 {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/LinkQueryParameters.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/LinkQueryParameters.java
index f885ab9..13f39d5 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/LinkQueryParameters.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/LinkQueryParameters.java
@@ -13,11 +13,11 @@
 // limitations under the License.
 package org.apache.tapestry5.integration.app1.pages;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.services.PageRenderLinkSource;
-import org.apache.tapestry5.services.Request;
 
 import java.util.Collections;
 import java.util.HashMap;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Localization.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Localization.java
index b879801..2eb3bf4 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Localization.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Localization.java
@@ -15,9 +15,9 @@
 package org.apache.tapestry5.integration.app1.pages;
 
 import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.services.PersistentLocale;
-import org.apache.tapestry5.services.Request;
 
 import java.util.Locale;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java
index 155e755..326c849 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java
@@ -30,8 +30,8 @@ import org.apache.tapestry5.corelib.components.Select;
 import org.apache.tapestry5.corelib.components.Zone;
 import org.apache.tapestry5.func.F;
 import org.apache.tapestry5.func.Mapper;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.util.AbstractSelectModel;
 
 public class MultiZoneUpdateInsideForm
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/OnActivateRedirect.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/OnActivateRedirect.java
index 557f17b..ec84212 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/OnActivateRedirect.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/OnActivateRedirect.java
@@ -2,8 +2,8 @@ package org.apache.tapestry5.integration.app1.pages;
 
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 
 public class OnActivateRedirect {
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RequestParameterDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RequestParameterDemo.java
index 8e1184c..1556e86 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RequestParameterDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RequestParameterDemo.java
@@ -13,10 +13,10 @@
 package org.apache.tapestry5.integration.app1.pages;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.RequestParameter;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.annotations.Inject;
 
 import java.util.Arrays;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SessionAttributeDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SessionAttributeDemo.java
index a860a32..b4dc042 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SessionAttributeDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SessionAttributeDemo.java
@@ -15,9 +15,9 @@
 package org.apache.tapestry5.integration.app1.pages;
 
 import org.apache.tapestry5.annotations.SessionAttribute;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.integration.app1.data.Track;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
 
 public class SessionAttributeDemo
 {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
index da3efe3..db04ba5 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
@@ -30,6 +30,12 @@ import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.OrderedConfiguration;
 import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.integration.app1.data.Address;
 import org.apache.tapestry5.integration.app1.data.Entity;
 import org.apache.tapestry5.integration.app1.data.ToDoItem;
@@ -43,17 +49,12 @@ import org.apache.tapestry5.ioc.annotations.Value;
 import org.apache.tapestry5.ioc.services.ServiceOverride;
 import org.apache.tapestry5.modules.Bootstrap4Module;
 import org.apache.tapestry5.modules.NoBootstrapModule;
-import org.apache.tapestry5.services.BaseURLSource;
 import org.apache.tapestry5.services.BeanBlockContribution;
 import org.apache.tapestry5.services.BeanBlockSource;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.EditBlockContribution;
 import org.apache.tapestry5.services.LibraryMapping;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.RequestFilter;
-import org.apache.tapestry5.services.RequestHandler;
 import org.apache.tapestry5.services.ResourceDigestGenerator;
-import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.ValueEncoderFactory;
 import org.apache.tapestry5.services.ValueLabelProvider;
 import org.apache.tapestry5.services.compatibility.Compatibility;
@@ -165,7 +166,7 @@ public class AppModule
     public static void contributeApplicationDefaults(MappedConfiguration<String, Object> configuration)
     {
         configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en,fr,de");
-        configuration.add(SymbolConstants.PRODUCTION_MODE, false);
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, false);
         configuration.add(SymbolConstants.COMPRESS_WHITESPACE, false);
         configuration.add(SymbolConstants.COMBINE_SCRIPTS, false);
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/pages/TestPageForHttpHeaders.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/pages/TestPageForHttpHeaders.java
index 079ba8b..f4b3e55 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/pages/TestPageForHttpHeaders.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/pages/TestPageForHttpHeaders.java
@@ -13,8 +13,8 @@
 // limitations under the License.
 package org.apache.tapestry5.integration.app2.pages;
 
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Response;
 
 public class TestPageForHttpHeaders
 {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/services/AppModule.java
index 1e8c9c5..5319bcc 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/services/AppModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app3/services/AppModule.java
@@ -18,6 +18,8 @@ import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.Configuration;
 import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.integration.app3.components.OverrideComponent;
 import org.apache.tapestry5.integration.app3.components.OverridenComponent;
 import org.apache.tapestry5.integration.app3.mixins.OverrideMixin;
@@ -27,7 +29,6 @@ import org.apache.tapestry5.integration.app3.pages.OverridenPage;
 import org.apache.tapestry5.ioc.annotations.Contribute;
 import org.apache.tapestry5.services.ComponentOverride;
 import org.apache.tapestry5.services.DisplayBlockContribution;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.compatibility.Compatibility;
 import org.apache.tapestry5.services.compatibility.Trait;
 import org.apache.tapestry5.services.security.ClientWhitelist;
@@ -52,9 +53,9 @@ public class AppModule
 
     public static void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
     {
-        configuration.add(SymbolConstants.GZIP_COMPRESSION_ENABLED, "false");
+        configuration.add(TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED, "false");
 
-        configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, "false");
 
         configuration.add(SymbolConstants.JAVASCRIPT_INFRASTRUCTURE_PROVIDER, "jquery");
         
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/cluster/data/ImmutableByAnnotation.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/cluster/data/ImmutableByAnnotation.java
index ccb4a44..6586458 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/cluster/data/ImmutableByAnnotation.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/cluster/data/ImmutableByAnnotation.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.integration.cluster.data;
 
-import org.apache.tapestry5.annotations.ImmutableSessionPersistedObject;
+import org.apache.tapestry5.http.annotations.ImmutableSessionPersistedObject;
 
 @ImmutableSessionPersistedObject
 public class ImmutableByAnnotation implements SessionStateObject {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/cluster/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/cluster/services/AppModule.java
index 7be73cf..280e2c5 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/cluster/services/AppModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/cluster/services/AppModule.java
@@ -15,9 +15,9 @@
 package org.apache.tapestry5.integration.cluster.services;
 
 import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
 import org.apache.tapestry5.integration.cluster.data.AnalyzedSessionObject;
 import org.apache.tapestry5.ioc.annotations.Contribute;
-import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
 
 public class AppModule
 {
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppComponentEventLinkTransformer.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppComponentEventLinkTransformer.java
index e8aa552..1fcc783 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppComponentEventLinkTransformer.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppComponentEventLinkTransformer.java
@@ -17,15 +17,15 @@ package org.apache.tapestry5.integration.linktrans.services;
 import java.util.Locale;
 
 import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.services.ArrayEventContext;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.services.ComponentEventRequestParameters;
 import org.apache.tapestry5.services.LocalizationSetter;
 import org.apache.tapestry5.services.PersistentLocale;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.linktransform.ComponentEventLinkTransformer;
 
 public class AppComponentEventLinkTransformer implements ComponentEventLinkTransformer
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppModule.java
index 8de0949..4a3bc44 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppModule.java
@@ -17,6 +17,7 @@ package org.apache.tapestry5.integration.linktrans.services;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.services.linktransform.ComponentEventLinkTransformer;
 import org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer;
 
@@ -25,7 +26,7 @@ public class AppModule
     public static void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
     {
         configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en,fr,de");
-        configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, "false");
         configuration.add(SymbolConstants.COMPRESS_WHITESPACE, "false");
         configuration.add(SymbolConstants.COMBINE_SCRIPTS, "true");
     }
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppPageRenderLinkTransformer.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppPageRenderLinkTransformer.java
index 7771db9..a65e7cd 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppPageRenderLinkTransformer.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/linktrans/services/AppPageRenderLinkTransformer.java
@@ -16,15 +16,15 @@ package org.apache.tapestry5.integration.linktrans.services;
 
 import java.util.Locale;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.TapestryConstants;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.services.ArrayEventContext;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.services.LocalizationSetter;
 import org.apache.tapestry5.services.PageRenderRequestParameters;
 import org.apache.tapestry5.services.PersistentLocale;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer;
 
 public class AppPageRenderLinkTransformer implements PageRenderLinkTransformer
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagetester/PageTesterTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagetester/PageTesterTest.java
index 2604c48..992d9f4 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagetester/PageTesterTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagetester/PageTesterTest.java
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.integration.pagetester;
 
 import org.apache.tapestry5.dom.Document;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalSymbols;
 import org.apache.tapestry5.integration.pagelevel.TestConstants;
-import org.apache.tapestry5.internal.InternalSymbols;
 import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.test.PageTester;
 import org.testng.Assert;
@@ -83,6 +83,6 @@ public class PageTesterTest extends Assert
     {
         SymbolSource source = tester.getRegistry().getService(SymbolSource.class);
 
-        assertEquals(source.valueForSymbol(InternalSymbols.APP_PACKAGE_PATH), "org/apache/tapestry5/integration/app2");
+        assertEquals(source.valueForSymbol(TapestryHttpInternalSymbols.APP_PACKAGE_PATH), "org/apache/tapestry5/integration/app2");
     }
 }
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java
index f4f6781..5a8789a 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java
@@ -16,12 +16,13 @@ package org.apache.tapestry5.integration.reload.services;
 
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 
 public class AppModule
 {
     public static void contributeApplicationDefaults(MappedConfiguration<String, Object> conf)
     {
         conf.add(SymbolConstants.FILE_CHECK_INTERVAL, "0ms");
-        conf.add(SymbolConstants.PRODUCTION_MODE, false);
+        conf.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, false);
     }
 }
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/ContextResourceSymbolProviderTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/ContextResourceSymbolProviderTest.java
index b9a772b..d2ae8b7 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/ContextResourceSymbolProviderTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/ContextResourceSymbolProviderTest.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.internal;
 
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.Context;
 import org.testng.annotations.Test;
 
 import java.io.File;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/ResponseImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/ResponseImplTest.java
index 15d4e6b..1c76979 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/ResponseImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/ResponseImplTest.java
@@ -17,9 +17,9 @@ package org.apache.tapestry5.internal;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.tapestry5.internal.services.ResponseImpl;
+import org.apache.tapestry5.http.internal.services.ResponseImpl;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.Response;
 import org.testng.annotations.Test;
 
 public class ResponseImplTest extends InternalBaseTestCase
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/ServletContextSymbolProviderTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/ServletContextSymbolProviderTest.java
index 204d041..5eec138 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/ServletContextSymbolProviderTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/ServletContextSymbolProviderTest.java
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.internal;
 
+import org.apache.tapestry5.http.internal.ServletContextSymbolProvider;
 import org.apache.tapestry5.ioc.services.SymbolProvider;
 import org.apache.tapestry5.test.ioc.TestBase;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/SingleKeySymbolProviderTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/SingleKeySymbolProviderTest.java
index 8de4967..0acc646 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/SingleKeySymbolProviderTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/SingleKeySymbolProviderTest.java
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.internal;
 
+import org.apache.tapestry5.http.internal.SingleKeySymbolProvider;
 import org.apache.tapestry5.ioc.services.SymbolProvider;
 import org.testng.Assert;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/TapestryAppInitializerTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/TapestryAppInitializerTest.java
index 9e951a0..779a170 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/TapestryAppInitializerTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/TapestryAppInitializerTest.java
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.internal;
 
+import org.apache.tapestry5.http.internal.TapestryAppInitializer;
 import org.apache.tapestry5.ioc.Registry;
 import org.apache.tapestry5.util.Transformer;
 import org.slf4j.Logger;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BaseURLSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BaseURLSourceImplTest.java
index 31edf38..88d325b 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BaseURLSourceImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BaseURLSourceImplTest.java
@@ -12,9 +12,10 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.internal.services.BaseURLSourceImpl;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.BaseURLSource;
-import org.apache.tapestry5.services.Request;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImplTest.java
index 08ba051..f9233ab 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClientPersistentFieldStorageImplTest.java
@@ -12,14 +12,14 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.services.ClientDataEncoder;
 import org.apache.tapestry5.services.PersistentFieldChange;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
 import org.testng.annotations.BeforeClass;
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 a9cb726..219a98d 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
@@ -15,6 +15,9 @@ 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.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.URLEventContext;
@@ -24,11 +27,8 @@ 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 fb791f1..22bd5fc 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
@@ -14,12 +14,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.TapestryConstants;
 import org.apache.tapestry5.beanmodel.services.*;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.LinkSecurity;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
@@ -30,8 +32,6 @@ 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/ComponentSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
index d33f5cc..7993330 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
@@ -14,13 +14,13 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.RequestGlobals;
 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.runtime.Component;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ComponentSource;
-import org.apache.tapestry5.services.RequestGlobals;
 import org.testng.annotations.Test;
 
 public class ComponentSourceImplTest extends InternalBaseTestCase
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextImplTest.java
index ab61610..09f7f48 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextImplTest.java
@@ -15,8 +15,9 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.internal.services.ContextImpl;
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.Context;
 import org.testng.annotations.Test;
 
 import javax.servlet.ServletContext;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextResourceTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextResourceTest.java
index 7f81c9e..3e51761 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextResourceTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextResourceTest.java
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.commons.Resource;
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.Context;
 import org.testng.annotations.Test;
 
 import java.io.File;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java
index 9fc1122..a042bb4 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java
@@ -14,15 +14,15 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.ContextAwareException;
 import org.apache.tapestry5.ExceptionHandlerAssistant;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.commons.internal.util.TapestryException;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.ServiceResources;
 import org.apache.tapestry5.ioc.internal.OperationException;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ExceptionReporter;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
 import org.easymock.EasyMock;
 import org.slf4j.Logger;
 import org.testng.annotations.BeforeMethod;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EndOfRequestEventHubImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EndOfRequestEventHubImplTest.java
index 35254cc..f3f5ef3 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EndOfRequestEventHubImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EndOfRequestEventHubImplTest.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.events.EndOfRequestListener;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.RequestGlobals;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/FlashPersistentFieldStrategyTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/FlashPersistentFieldStrategyTest.java
index 1bf4377..42b121a 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/FlashPersistentFieldStrategyTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/FlashPersistentFieldStrategyTest.java
@@ -14,11 +14,11 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.services.PersistentFieldChange;
 import org.apache.tapestry5.services.PersistentFieldStrategy;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 import org.testng.annotations.Test;
 
 import java.util.Collection;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java
index a5f1e00..378fcc0 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java
@@ -16,7 +16,8 @@ package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.MappedConfiguration;
-import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
 import org.apache.tapestry5.ioc.annotations.Contribute;
 import org.apache.tapestry5.ioc.services.ApplicationDefaults;
 import org.apache.tapestry5.ioc.services.SymbolProvider;
@@ -27,8 +28,8 @@ public class ForceDevelopmentModeModule
     @ApplicationDefaults
     public static void enableDevelopmentMode(MappedConfiguration<String, Object> configuration)
     {
-        configuration.add(SymbolConstants.PRODUCTION_MODE, false);
-        configuration.add(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM, "app.root.package");
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, false);
+        configuration.add(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM, "app.root.package");
         configuration.add(SymbolConstants.HMAC_PASSPHRASE, "hmac passphrase for testing");
     }
 }
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/IgnoredPathsFilterTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/IgnoredPathsFilterTest.java
index d7c319e..171d0f0 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/IgnoredPathsFilterTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/IgnoredPathsFilterTest.java
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
-import org.apache.tapestry5.services.HttpServletRequestFilter;
-import org.apache.tapestry5.services.HttpServletRequestHandler;
+import org.apache.tapestry5.http.services.HttpServletRequestFilter;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
 import org.apache.tapestry5.test.TapestryTestCase;
 import org.testng.annotations.Test;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java
index 16e417d..0e980e9 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/JSONArrayEventResultProcessorTest.java
@@ -14,9 +14,9 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.json.JSONArray;
-import org.apache.tapestry5.services.Response;
 import org.testng.annotations.Test;
 
 import java.io.CharArrayWriter;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java
index 6cefbfb..35b0bd7 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LinkImplTest.java
@@ -14,12 +14,12 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.Link;
-import org.apache.tapestry5.LinkSecurity;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.LinkSecurity;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.BaseURLSource;
 import org.apache.tapestry5.services.ContextPathEncoder;
-import org.apache.tapestry5.services.Response;
 import org.testng.annotations.Test;
 
 public class LinkImplTest extends InternalBaseTestCase
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 0222ca7..8bfdc29 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
@@ -19,10 +19,11 @@ 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.commons.services.TypeCoercer;
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.services.ComponentClassResolver;
@@ -30,7 +31,6 @@ 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/LocalizationSetterImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LocalizationSetterImplTest.java
index ed09a0e..90502c3 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LocalizationSetterImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LocalizationSetterImplTest.java
@@ -21,11 +21,11 @@ import java.util.Locale;
 
 import org.apache.tapestry5.OptionModel;
 import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.services.ThreadLocale;
 import org.apache.tapestry5.services.LocalizationSetter;
 import org.apache.tapestry5.services.PersistentLocale;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.test.ioc.TestBase;
 import org.testng.annotations.Test;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderLinkSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderLinkSourceImplTest.java
index 7fe30d2..a61f3dc 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderLinkSourceImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderLinkSourceImplTest.java
@@ -15,7 +15,7 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.integration.app3.pages.Index;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.services.ComponentClassResolver;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java
index 88ec5ed..a5710d8 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java
@@ -15,6 +15,7 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
@@ -23,7 +24,6 @@ import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 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.testng.annotations.Test;
 
 public class PageRenderRequestHandlerImplTest extends InternalBaseTestCase
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java
index bc9b925..3b6fb8d 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java
@@ -12,9 +12,11 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.internal.services.RequestImpl;
+import org.apache.tapestry5.http.internal.services.TapestrySessionFactory;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -132,7 +134,7 @@ public class RequestImplTest extends InternalBaseTestCase
     {
         HttpServletRequest sr = mockHttpServletRequest();
 
-        expect(sr.getHeader(RequestImpl.REQUESTED_WITH_HEADER)).andReturn(headerValue);
+        expect(sr.getHeader(Request.REQUESTED_WITH_HEADER)).andReturn(headerValue);
 
         replay();
 
@@ -283,7 +285,7 @@ public class RequestImplTest extends InternalBaseTestCase
         HttpServletRequest sr = mockHttpServletRequest();
 
         expect(sr.isSecure()).andReturn(false);
-        expect(sr.getHeader(RequestImpl.X_FORWARDED_PROTO_HEADER)).andReturn("https");
+        expect(sr.getHeader(Request.X_FORWARDED_PROTO_HEADER)).andReturn("https");
 
         replay();
 
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 9690723..e4874db 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
@@ -14,17 +14,17 @@
 
 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.http.Link;
+import org.apache.tapestry5.http.LinkSecurity;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.EmptyEventContext;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 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/ResponseRendererImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResponseRendererImplTest.java
index 637bb04..fc0d73d 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResponseRendererImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResponseRendererImplTest.java
@@ -15,11 +15,11 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.ContentType;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.runtime.Component;
-import org.apache.tapestry5.services.Response;
 import org.apache.tapestry5.services.ResponseRenderer;
 import org.testng.annotations.Test;
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
index 594931e..fe71446 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
@@ -14,12 +14,12 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.internal.transform.pages.ReadOnlyBean;
 import org.apache.tapestry5.services.ApplicationStateCreator;
 import org.apache.tapestry5.services.ApplicationStatePersistenceStrategy;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 import org.testng.annotations.Test;
 
 import spock.lang.Issue;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionImplTest.java
index 4f1aebf..2f7cbd4 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionImplTest.java
@@ -14,9 +14,12 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.internal.services.ClusteredSessionImpl;
+import org.apache.tapestry5.http.internal.services.SessionImpl;
+import org.apache.tapestry5.http.internal.services.SessionLock;
+import org.apache.tapestry5.http.services.Session;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.services.Session;
-import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
 import org.testng.annotations.Test;
 
 import javax.servlet.http.HttpServletRequest;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionPersistentFieldStrategyTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionPersistentFieldStrategyTest.java
index 332d229..743111d 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionPersistentFieldStrategyTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionPersistentFieldStrategyTest.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.services.PersistentFieldChange;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 import org.testng.annotations.Test;
 
 import java.util.Collection;
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 e4874dd..308d169 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
@@ -15,12 +15,12 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.beanmodel.services.*;
+import org.apache.tapestry5.http.services.Context;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-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 e9a7144..2942a24 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
@@ -16,7 +16,6 @@ package org.apache.tapestry5.internal.test;
 
 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.*;
@@ -26,6 +25,9 @@ import org.apache.tapestry5.commons.services.ClassPropertyAdapter;
 import org.apache.tapestry5.commons.services.InvalidationListener;
 import org.apache.tapestry5.commons.services.PropertyAccess;
 import org.apache.tapestry5.commons.services.PropertyAdapter;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.parser.ComponentTemplate;
 import org.apache.tapestry5.internal.services.ComponentModelSource;
@@ -50,13 +52,11 @@ 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.BaseURLSource;
 import org.apache.tapestry5.services.ClientBehaviorSupport;
 import org.apache.tapestry5.services.ComponentClassResolver;
 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-core/src/test/java/org/apache/tapestry5/root/ContentTypeTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/root/ContentTypeTest.java
index 371a0b6..5be6bda 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/root/ContentTypeTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/root/ContentTypeTest.java
@@ -12,7 +12,7 @@
 
 package org.apache.tapestry5.root;
 
-import org.apache.tapestry5.ContentType;
+import org.apache.tapestry5.http.ContentType;
 import org.apache.tapestry5.test.ioc.TestBase;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java
index bae11fd..207d0cf 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java
@@ -15,9 +15,9 @@
 package org.apache.tapestry5.root;
 
 import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.Link;
 import org.apache.tapestry5.PageCallback;
 import org.apache.tapestry5.commons.services.TypeCoercer;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.internal.services.ArrayEventContext;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.services.PageRenderLinkSource;
diff --git a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/HibernatePersistenceConstants.java b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/HibernatePersistenceConstants.java
index 84220c7..2647f1a 100644
--- a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/HibernatePersistenceConstants.java
+++ b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/HibernatePersistenceConstants.java
@@ -26,7 +26,7 @@ public class HibernatePersistenceConstants
 {
     /**
      * If the field's value is a persistent Hibernate entity its type and primary key is stored in the
-     * {@link org.apache.tapestry5.services.Session}. Otherwise,
+     * {@link org.apache.tapestry5.http.services.Session}. Otherwise,
      * the value is stored as per {@link PersistenceConstants#SESSION}.
      */
     public static final String ENTITY = "entity";
diff --git a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityApplicationStatePersistenceStrategy.java b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityApplicationStatePersistenceStrategy.java
index e214546..de3be93 100644
--- a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityApplicationStatePersistenceStrategy.java
+++ b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityApplicationStatePersistenceStrategy.java
@@ -14,13 +14,13 @@
 
 package org.apache.tapestry5.hibernate.web.internal;
 
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.services.SessionApplicationStatePersistenceStrategy;
 import org.apache.tapestry5.services.ApplicationStateCreator;
-import org.apache.tapestry5.services.Request;
 import org.hibernate.Session;
 
 /**
- * Persists Hibernate entities as SSOs by storing their primary key in the {@link org.apache.tapestry5.services.Session}.
+ * Persists Hibernate entities as SSOs by storing their primary key in the {@link org.apache.tapestry5.http.services.Session}.
  *
  * @see org.apache.tapestry5.hibernate.web.internal.PersistedEntity
  */
diff --git a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityPersistentFieldStrategy.java b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityPersistentFieldStrategy.java
index 719a5e6..35d3426 100644
--- a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityPersistentFieldStrategy.java
+++ b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/EntityPersistentFieldStrategy.java
@@ -14,8 +14,8 @@
 
 package org.apache.tapestry5.hibernate.web.internal;
 
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.internal.services.AbstractSessionPersistentFieldStrategy;
-import org.apache.tapestry5.services.Request;
 import org.hibernate.HibernateException;
 import org.hibernate.Session;
 
diff --git a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/PersistedEntity.java b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/PersistedEntity.java
index be8ed15..5412f78 100644
--- a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/PersistedEntity.java
+++ b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/internal/PersistedEntity.java
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.hibernate.web.internal;
 
-import org.apache.tapestry5.annotations.ImmutableSessionPersistedObject;
+import org.apache.tapestry5.http.annotations.ImmutableSessionPersistedObject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.hibernate.Session;
 
diff --git a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/modules/HibernateModule.java b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/modules/HibernateModule.java
index 8f28785..129d5b1 100644
--- a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/modules/HibernateModule.java
+++ b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/modules/HibernateModule.java
@@ -28,7 +28,7 @@ import org.apache.tapestry5.hibernate.web.internal.CommitAfterWorker;
 import org.apache.tapestry5.hibernate.web.internal.EntityApplicationStatePersistenceStrategy;
 import org.apache.tapestry5.hibernate.web.internal.EntityPersistentFieldStrategy;
 import org.apache.tapestry5.hibernate.web.internal.HibernateEntityValueEncoder;
-import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
 import org.apache.tapestry5.ioc.LoggerSource;
 import org.apache.tapestry5.ioc.annotations.Contribute;
 import org.apache.tapestry5.ioc.annotations.Primary;
@@ -64,7 +64,7 @@ public class HibernateModule
      */
     public static void contributeHibernateEntityPackageManager(Configuration<String> configuration,
 
-                                                               @Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
+                                                               @Symbol(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
                                                                String appRootPackage)
     {
         configuration.add(appRootPackage + ".entities");
diff --git a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/pages/HibernateStatistics.java b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/pages/HibernateStatistics.java
index c13f378..b2de246 100644
--- a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/pages/HibernateStatistics.java
+++ b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/web/pages/HibernateStatistics.java
@@ -14,10 +14,10 @@
 
 package org.apache.tapestry5.hibernate.web.pages;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.UnknownActivationContextCheck;
 import org.apache.tapestry5.annotations.WhitelistAccessOnly;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.hibernate.Session;
@@ -40,7 +40,7 @@ public class HibernateStatistics
 
     @Property
     @Inject
-    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE)
     private boolean productionMode;
 
     @Property
diff --git a/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java b/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
index b59f6fa..5e6fe83 100644
--- a/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
+++ b/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
@@ -15,9 +15,9 @@ package org.example.app0.pages;
 
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
 import org.example.app0.entities.User;
 import org.example.app0.services.UserDAO;
 
diff --git a/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java b/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java
index bc4db36..584f388 100644
--- a/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java
+++ b/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java
@@ -12,19 +12,19 @@
 
 package org.example.app0.services;
 
-import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.OrderedConfiguration;
 import org.apache.tapestry5.hibernate.HibernateSymbols;
 import org.apache.tapestry5.hibernate.HibernateTransactionDecorator;
 import org.apache.tapestry5.hibernate.modules.HibernateCoreModule;
 import org.apache.tapestry5.hibernate.web.modules.HibernateModule;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.ServiceBinder;
 import org.apache.tapestry5.ioc.ServiceResources;
 import org.apache.tapestry5.ioc.annotations.Contribute;
 import org.apache.tapestry5.ioc.annotations.ImportModule;
 import org.apache.tapestry5.ioc.annotations.Match;
-import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.security.ClientWhitelist;
 import org.apache.tapestry5.services.security.WhitelistAnalyzer;
 
@@ -39,7 +39,7 @@ public class AppModule
 
     public static void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
     {
-        configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
+        configuration.add(TapestryHttpSymbolConstants.PRODUCTION_MODE, "false");
         configuration.add(HibernateSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED, "true");
     }
 
diff --git a/tapestry-http/build.gradle b/tapestry-http/build.gradle
new file mode 100644
index 0000000..8debeb9
--- /dev/null
+++ b/tapestry-http/build.gradle
@@ -0,0 +1,31 @@
+import org.gradle.plugins.ide.idea.model.*
+import org.apache.tools.ant.filters.ReplaceTokens
+import t5build.*
+
+description = "Tapestry classes that handle HTTP requests"
+
+dependencies {
+    compile project(':tapestry-ioc')
+    compile project(':tapestry-json')
+    compile project(':beanmodel')
+
+    provided project(":tapestry-test")
+    provided project(":tapestry-test-constants")
+
+    provided "javax.servlet:javax.servlet-api:${versions.servletapi}"
+
+    compile "commons-codec:commons-codec:1.10"
+
+    testRuntime "org.hsqldb:hsqldb:1.8.0.10"
+
+    testRuntime 'com.google.inject:guice:3.0'
+}
+
+// Not sure why this is necessary:
+compileTestGroovy.dependsOn compileTestJava
+
+jar {
+    from("src/main/filtered-resources") {
+        filter(ReplaceTokens, tokens: [version: project.version])
+    }
+}
\ No newline at end of file
diff --git a/tapestry-core/src/main/filtered-resources/META-INF/gradle/org.apache.tapestry/tapestry-core/project.properties b/tapestry-http/src/main/filtered-resources/META-INF/gradle/org.apache.tapestry/tapestry-core/project.properties
similarity index 100%
rename from tapestry-core/src/main/filtered-resources/META-INF/gradle/org.apache.tapestry/tapestry-core/project.properties
rename to tapestry-http/src/main/filtered-resources/META-INF/gradle/org.apache.tapestry/tapestry-core/project.properties
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/ContentType.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/ContentType.java
similarity index 95%
rename from tapestry-core/src/main/java/org/apache/tapestry5/ContentType.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/ContentType.java
index 4aaa96d..0c8b01a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/ContentType.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/ContentType.java
@@ -10,11 +10,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5;
-
-import org.apache.tapestry5.commons.util.CollectionFactory;
-import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+package org.apache.tapestry5.http;
 
 import java.util.Collections;
 import java.util.List;
@@ -23,6 +19,10 @@ import java.util.StringTokenizer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
+import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+
 /**
  * Represents an HTTP content type. Allows to set various elements like the MIME type, the character set, and other
  * parameters. This is similar to a number of other implementations of the same concept in JAF, etc. We have created
@@ -143,7 +143,7 @@ public final class ContentType
      */
     public String getCharset()
     {
-        return getParameter(InternalConstants.CHARSET_CONTENT_TYPE_PARAMETER);
+        return getParameter(TapestryHttpInternalConstants.CHARSET_CONTENT_TYPE_PARAMETER);
     }
 
     /**
@@ -192,7 +192,7 @@ public final class ContentType
 
     public ContentType withCharset(String charset)
     {
-        return withParameter(InternalConstants.CHARSET_CONTENT_TYPE_PARAMETER, charset);
+        return withParameter(TapestryHttpInternalConstants.CHARSET_CONTENT_TYPE_PARAMETER, charset);
     }
 
     /**
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/Link.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/Link.java
similarity index 93%
rename from tapestry-core/src/main/java/org/apache/tapestry5/Link.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/Link.java
index c9437e7..81c15f9 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/Link.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/Link.java
@@ -10,20 +10,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5;
+package org.apache.tapestry5.http;
+
+import java.util.List;
 
 import org.apache.commons.codec.net.URLCodec;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.IncompatibleChange;
-import org.apache.tapestry5.services.BaseURLSource;
-import org.apache.tapestry5.services.ContextPathEncoder;
-import org.apache.tapestry5.services.Request;
-
-import java.util.List;
 
 /**
  * A link is the Tapestry representation of a URL or URI that triggers dynamic behavior. This link is in three parts: a
  * path portion, an optional anchor, and a set of query parameters. A request for a link will ultimately be recognized
- * by a {@link org.apache.tapestry5.services.Dispatcher}.
+ * by a {@link org.apache.tapestry5.http.services.Dispatcher}.
  *
  * Query parameter values are kept separate from the path portion to support encoding those values into hidden form
  * fields (where appropriate).
@@ -68,7 +67,8 @@ public interface Link
 
     /**
      * Adds a parameter value as a value object; the value object is converted to a string via
-     * {@link ContextPathEncoder#encodeValue(Object)} and the result is added via {@link #addParameter(String, String)}.
+     * <a href="http://tapestry.apache.org/current/apidocs/src-html/org/apache/tapestry5/services/ContextPathEncoder.html#line.31>ContextPathEncoder.encodeValue(Object)</a>
+     * from tapestry-core and the result is added via {@link #addParameter(String, String)}.
      * The Link object is returned for further configuration.
      *
      * @since 5.2.2
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/LinkSecurity.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/LinkSecurity.java
similarity index 98%
rename from tapestry-core/src/main/java/org/apache/tapestry5/LinkSecurity.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/LinkSecurity.java
index 34ff445..0579ed9 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/LinkSecurity.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/LinkSecurity.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.http;
 
 /**
  * Identifies how a {@link Link} should handle security.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/OptimizedSessionPersistedObject.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/OptimizedSessionPersistedObject.java
similarity index 93%
rename from tapestry-core/src/main/java/org/apache/tapestry5/OptimizedSessionPersistedObject.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/OptimizedSessionPersistedObject.java
index 41c5334..5205957 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/OptimizedSessionPersistedObject.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/OptimizedSessionPersistedObject.java
@@ -10,10 +10,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5;
+package org.apache.tapestry5.http;
 
 /**
- * An optional interface implemented by objects that are persisted in the {@link org.apache.tapestry5.services.Session}.
+ * An optional interface implemented by objects that are persisted in the {@link org.apache.tapestry5.http.services.Session}.
  * At the end of each request, any objects read from the session are re-stored into the session, to ensure that
  * in-memory changes are flushed to other persistent session stores (e.g. RDBMS, servers in a cluster, etc). Objects
  * that implement this interface are expected to track when they are dirty (have pending changes), so that the save
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/TapestryFilter.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryFilter.java
similarity index 86%
copy from tapestry-core/src/main/java/org/apache/tapestry5/TapestryFilter.java
copy to tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryFilter.java
index d4237e0..7aea81f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/TapestryFilter.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryFilter.java
@@ -10,26 +10,33 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5;
+package org.apache.tapestry5.http;
 
-import org.apache.tapestry5.internal.ServletContextSymbolProvider;
-import org.apache.tapestry5.internal.SingleKeySymbolProvider;
-import org.apache.tapestry5.internal.TapestryAppInitializer;
-import org.apache.tapestry5.internal.util.DelegatingSymbolProvider;
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tapestry5.http.internal.ServletContextSymbolProvider;
+import org.apache.tapestry5.http.internal.SingleKeySymbolProvider;
+import org.apache.tapestry5.http.internal.TapestryAppInitializer;
+import org.apache.tapestry5.http.internal.util.DelegatingSymbolProvider;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
+import org.apache.tapestry5.http.services.ServletApplicationInitializer;
 import org.apache.tapestry5.ioc.Registry;
 import org.apache.tapestry5.ioc.def.ModuleDef;
 import org.apache.tapestry5.ioc.internal.services.SystemPropertiesSymbolProvider;
 import org.apache.tapestry5.ioc.services.SymbolProvider;
-import org.apache.tapestry5.services.HttpServletRequestHandler;
-import org.apache.tapestry5.services.ServletApplicationInitializer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
 /**
  * The TapestryFilter is responsible for intercepting all requests into the web application. It
  * identifies the requests
@@ -86,11 +93,11 @@ public class TapestryFilter implements Filter
 
         SymbolProvider combinedProvider = new DelegatingSymbolProvider(
                 new SystemPropertiesSymbolProvider(),
-                new SingleKeySymbolProvider(SymbolConstants.CONTEXT_PATH, context.getContextPath()),
+                new SingleKeySymbolProvider(TapestryHttpSymbolConstants.CONTEXT_PATH, context.getContextPath()),
                 new ServletContextSymbolProvider(context),
-                new SingleKeySymbolProvider(SymbolConstants.EXECUTION_MODE, "production"));
+                new SingleKeySymbolProvider(TapestryHttpSymbolConstants.EXECUTION_MODE, "production"));
 
-        String executionMode = combinedProvider.valueForSymbol(SymbolConstants.EXECUTION_MODE);
+        String executionMode = combinedProvider.valueForSymbol(TapestryHttpSymbolConstants.EXECUTION_MODE);
 
         TapestryAppInitializer appInitializer = new TapestryAppInitializer(logger, combinedProvider,
                 filterName, executionMode);
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaPersistenceConstants.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryHttpConstants.java
similarity index 52%
copy from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaPersistenceConstants.java
copy to tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryHttpConstants.java
index 8a04a6a..16a1821 100644
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaPersistenceConstants.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryHttpConstants.java
@@ -1,5 +1,3 @@
-// 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
@@ -11,22 +9,22 @@
 // WITHOUT WARRANTIES 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.jpa;
-
-import org.apache.tapestry5.PersistenceConstants;
+package org.apache.tapestry5.http;
 
 /**
- * Constants for persistent field strategies.
- *
- * @since 5.3
+ * Class defining constants for Tapestry HTTP.
  */
-public class JpaPersistenceConstants
-{
+final public class TapestryHttpConstants {
+
     /**
-     * If the field's value is a persistent JPA entity, its type and primary key is stored in the
-     * {@link org.apache.tapestry5.services.Session}. Otherwise,
-     * the value is stored as per {@link PersistenceConstants#SESSION}.
+     * Request attribute key; if non-null, then automatic GZIP compression of response stream is
+     * suppressed. This is
+     * useful when the code opening the response stream wants to explicitly control whether GZIP
+     * compression occurs or
+     * not.
+     *
+     * @since 5.1.0.0
      */
-    public static final String ENTITY = "entity";
+    public static final String SUPPRESS_COMPRESSION = "tapestry.supress-compression";
+
 }
diff --git a/tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryHttpSymbolConstants.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryHttpSymbolConstants.java
new file mode 100644
index 0000000..79aa2c5
--- /dev/null
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/TapestryHttpSymbolConstants.java
@@ -0,0 +1,136 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES 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.http;
+
+/**
+ * Class defining constants for Tapestry HTTP symbols.
+ */
+final public class TapestryHttpSymbolConstants {
+
+    /**
+     * The hostname that application should use when constructing an absolute URL. The default is "", i.e. an empty
+     * string,
+     * in which case system will use request.getServerName(). Not the same as environment variable HOSTNAME, but you can
+     * also
+     * contribute "$HOSTNAME" as the value to make it the same as the environment variable HOSTNAME.
+     *
+     * @since 5.3
+     */
+    public static final String HOSTNAME = "tapestry.hostname";
+    /**
+     * The hostport that application should use when constructing an absolute URL. The default is "0", i.e. use the port
+     * value from
+     * the request.
+     *
+     * @since 5.3
+     */
+    public static final String HOSTPORT = "tapestry.hostport";
+    /**
+     * The secure (https) hostport that application should use when constructing an absolute URL. The default is "0",
+     * i.e. use
+     * the value from the request.
+     * This is an alias to {@link TapestryHttpSymbolConstnats#HOSTPORT_SECURE}.
+     *
+     * @since 5.3
+     */
+    public static final String HOSTPORT_SECURE = "tapestry.hostport-secure";
+    /**
+     * If "true" then at the end of each request the
+     * {@link org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer} will be called on each session persisted
+     * object that was accessed during the request.
+     *
+     * This is provided as a performance enhancement for servers that do not use clustered sessions.
+     *
+     * The default is {@code true}, to preserve 5.2 behavior. For non-clustered applications (the majority), this value should be
+     * overridden to {@code false}. A future release of Tapestry may change the default.
+     *
+     * @since 5.3
+     */
+    public static final String CLUSTERED_SESSIONS = "tapestry.clustered-sessions";
+    /**
+     * If true (the default), then Tapestry will apply locking semantics around access to the {@link javax.servlet.http.HttpSession}.
+     * Reading attribute names occurs with a shared read lock; getting or setting an attribute upgrades to an exclusive write lock.
+     * This can tend to serialize threads when a number of simultaneous (Ajax) requests from the client arrive ... however,
+     * many implementations of HttpSession are not thread safe, and often mutable objects are stored in the session and shared
+     * between threads. Leaving this on the default will yield a more robust application; setting it to false may speed
+     * up processing for more Ajax intensive applications (but care should then be given to ensuring that objects shared inside
+     * the session are themselves immutable or thread-safe).
+     *
+     * @since 5.4
+     */
+    public static final String SESSION_LOCKING_ENABLED = "tapestry.session-locking-enabled";
+    /**
+     * Version number of the application. Prior to 5.4, this version number was integrated into asset URLs. Starting
+     * with 5.4, a checksum of the individual asset's content is used instead, and this version number is only used
+     * for documentation purposes; it appears in the default exception report page, for example.
+     *
+     * The default value is "0.0.1".  In 5.3 and earlier, the default value was a random hexadecimal string.
+     *
+     * @since 5.1.0.0
+     */
+    public static final String APPLICATION_VERSION = "tapestry.application-version";
+    
+    /**
+     * Indicates whether Tapestry is running in production mode or developer mode. This affects a large
+     * number of Tapestry behaviors related to performance and security, including how exceptions are
+     * reported, whether far-future expire headers are emitted, whether JavaScript files may be combined,
+     * whether JSON is compressed, whether component field and parameter values are shadowed to instance
+     * variables (to assist with debugging), and more.
+     */
+    public static final String PRODUCTION_MODE = "tapestry.production-mode";
+    
+    /**
+     * The version number of the core Tapestry framework, or UNKNOWN if the version number is not available (which
+     * should only occur when developing Tapestry).
+     */
+    public static final String TAPESTRY_VERSION = "tapestry.version";
+    
+    /**
+     * Identifies the context path of the application, as determined from {@link javax.servlet.ServletContext#getContextPath()}.
+     * This is either a blank string or a string that starts with a slash but does not end with one.
+     *
+     * @since 5.4
+     */
+    public static final String CONTEXT_PATH = "tapestry.context-path";
+    /**
+     * A comma separated list of execution modes used to control how the application is initialized.
+     * Each modes can contribute a list (comma separated) of Module classes to be loaded during startup,
+     * the order in which they appear is preserved.
+     * The default value is: <code>production</code>.
+     */
+    public static final String EXECUTION_MODE = "tapestry.execution-mode";
+    /**
+     * The charset used when rendering page markup; the charset is also used as the request encoding when handling
+     * incoming requests. The default is "UTF-8".
+     */
+    public static final String CHARSET = "tapestry.charset";
+    /**
+     * Minimum output stream size, in bytes, before output is compressed using GZIP. Shorter streams are not compressed.
+     * Tapestry buffers this amount and switches to a GZIP output stream as needed. The default is "100".
+     *
+     * @see SymbolConstants#GZIP_COMPRESSION_ENABLED
+     * @since 5.1.0.0
+     */
+    public static final String MIN_GZIP_SIZE = "tapestry.min-gzip-size";
+    /**
+     * If "true" (the default) then GZip compression is enabled for dynamic requests and for static assets. If you are
+     * using a server that handles GZip compression for you, or you don't want to use the extra processing power
+     * necessary to GZIP requests, then override this to "false".
+     *
+     * @see MIN_GZIP_SIZE
+     * @see org.apache.tapestry5.services.ResponseCompressionAnalyzer
+     * @see org.apache.tapestry5.services.assets.CompressionAnalyzer
+     * @since 5.1.0.0
+     */
+    public static final String GZIP_COMPRESSION_ENABLED = "tapestry.gzip-compression-enabled";
+
+}
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/AbstractContributionDef.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/AbstractContributionDef.java
similarity index 97%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/AbstractContributionDef.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/AbstractContributionDef.java
index 64a6704..2b625e7 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/AbstractContributionDef.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/AbstractContributionDef.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal;
+package org.apache.tapestry5.http.internal;
 
 import org.apache.tapestry5.commons.*;
 import org.apache.tapestry5.ioc.ModuleBuilderSource;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/ServletContextSymbolProvider.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/ServletContextSymbolProvider.java
similarity index 93%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/ServletContextSymbolProvider.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/ServletContextSymbolProvider.java
index cc17091..a827791 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/ServletContextSymbolProvider.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/ServletContextSymbolProvider.java
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2020 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal;
+package org.apache.tapestry5.http.internal;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/SingleKeySymbolProvider.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SingleKeySymbolProvider.java
similarity index 96%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/SingleKeySymbolProvider.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SingleKeySymbolProvider.java
index 5332cfa..886b1ec 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/SingleKeySymbolProvider.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SingleKeySymbolProvider.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal;
+package org.apache.tapestry5.http.internal;
 
 import org.apache.tapestry5.ioc.services.SymbolProvider;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/SyntheticModuleDef.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SyntheticModuleDef.java
similarity index 97%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/SyntheticModuleDef.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SyntheticModuleDef.java
index 28af69b..c85746a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/SyntheticModuleDef.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SyntheticModuleDef.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal;
+package org.apache.tapestry5.http.internal;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.ioc.def.ContributionDef;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/SyntheticSymbolSourceContributionDef.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SyntheticSymbolSourceContributionDef.java
similarity index 97%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/SyntheticSymbolSourceContributionDef.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SyntheticSymbolSourceContributionDef.java
index 1ef7592..d787ef5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/SyntheticSymbolSourceContributionDef.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/SyntheticSymbolSourceContributionDef.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal;
+package org.apache.tapestry5.http.internal;
 
 import org.apache.tapestry5.commons.OrderedConfiguration;
 import org.apache.tapestry5.ioc.ModuleBuilderSource;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryAppInitializer.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryAppInitializer.java
similarity index 82%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryAppInitializer.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryAppInitializer.java
index 3e25262..14fb4f3 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryAppInitializer.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryAppInitializer.java
@@ -10,10 +10,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal;
+package org.apache.tapestry5.http.internal;
 
-import org.apache.tapestry5.SymbolConstants;
-import org.apache.tapestry5.commons.services.*;
+import java.util.Formatter;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.modules.TapestryHttpModule;
 import org.apache.tapestry5.ioc.IOCUtilities;
 import org.apache.tapestry5.ioc.Registry;
 import org.apache.tapestry5.ioc.RegistryBuilder;
@@ -25,12 +29,8 @@ import org.apache.tapestry5.ioc.services.ServiceActivityScoreboard;
 import org.apache.tapestry5.ioc.services.Status;
 import org.apache.tapestry5.ioc.services.SymbolProvider;
 import org.apache.tapestry5.ioc.services.SymbolSource;
-import org.apache.tapestry5.modules.TapestryModule;
 import org.slf4j.Logger;
 
-import java.util.Formatter;
-import java.util.List;
-
 /**
  * This class is used to build the {@link Registry}. The Registry contains
  * {@link org.apache.tapestry5.ioc.modules.TapestryIOCModule} and {@link TapestryModule}, any
@@ -68,7 +68,7 @@ public class TapestryAppInitializer
      */
     public TapestryAppInitializer(Logger logger, String appPackage, String appName)
     {
-        this(logger, new SingleKeySymbolProvider(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM, appPackage), appName,
+        this(logger, new SingleKeySymbolProvider(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM, appPackage), appName,
                 null);
     }
 
@@ -91,20 +91,20 @@ public class TapestryAppInitializer
         this.logger = logger;
         this.appProvider = appProvider;
 
-        String appPackage = appProvider.valueForSymbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM);
+        String appPackage = appProvider.valueForSymbol(TapestryHttpInternalConstants.TAPESTRY_APP_PACKAGE_PARAM);
 
         this.appName = appName;
 
         startTime = System.currentTimeMillis();
 
-        if (!Boolean.parseBoolean(appProvider.valueForSymbol(InternalConstants.DISABLE_DEFAULT_MODULES_PARAM)))
+        if (!Boolean.parseBoolean(appProvider.valueForSymbol(TapestryHttpInternalConstants.DISABLE_DEFAULT_MODULES_PARAM)))
         {
             IOCUtilities.addDefaultModules(builder);
         }
 
         // This gets added automatically.
 
-        addModules(TapestryModule.class);
+        addModules(TapestryHttpModule.class);
 
         String className = appPackage + ".services." + InternalUtils.capitalize(this.appName) + "Module";
 
@@ -129,12 +129,12 @@ public class TapestryAppInitializer
 
         addSyntheticSymbolSourceModule(appPackage);
 
-        for (String mode : TapestryInternalUtils.splitAtCommas(executionModes))
+        for (String mode : splitAtCommas(executionModes))
         {
             String key = String.format("tapestry.%s-modules", mode);
             String moduleList = appProvider.valueForSymbol(key);
 
-            for (String moduleClassName : TapestryInternalUtils.splitAtCommas(moduleList))
+            for (String moduleClassName : splitAtCommas(moduleList))
             {
                 builder.add(moduleClassName);
             }
@@ -160,13 +160,13 @@ public class TapestryAppInitializer
     private void addSyntheticSymbolSourceModule(String appPackage)
     {
         ContributionDef appPathContribution = new SyntheticSymbolSourceContributionDef("AppPath",
-                new SingleKeySymbolProvider(InternalSymbols.APP_PACKAGE_PATH, appPackage.replace('.', '/')));
+                new SingleKeySymbolProvider(TapestryHttpInternalSymbols.APP_PACKAGE_PATH, appPackage.replace('.', '/')));
 
         ContributionDef symbolSourceContribution = new SyntheticSymbolSourceContributionDef("ServletContext",
                 appProvider, "before:ApplicationDefaults", "after:EnvironmentVariables");
 
         ContributionDef appNameContribution = new SyntheticSymbolSourceContributionDef("AppName",
-                new SingleKeySymbolProvider(InternalSymbols.APP_NAME, appName), "before:ServletContext");
+                new SingleKeySymbolProvider(TapestryHttpInternalSymbols.APP_NAME, appName), "before:ServletContext");
 
         builder.add(new SyntheticModuleDef(symbolSourceContribution, appNameContribution, appPathContribution));
     }
@@ -232,12 +232,12 @@ public class TapestryAppInitializer
 
 
         f.format("\nApplication '%s' (version %s) startup time: %,d ms to build IoC Registry, %,d ms overall.", appName,
-                source.valueForSymbol(SymbolConstants.APPLICATION_VERSION),
+                source.valueForSymbol(TapestryHttpSymbolConstants.APPLICATION_VERSION),
                 registryCreatedTime - startTime,
                 toFinish - startTime);
 
-        String version = source.valueForSymbol(SymbolConstants.TAPESTRY_VERSION);
-        boolean productionMode = Boolean.parseBoolean(source.valueForSymbol(SymbolConstants.PRODUCTION_MODE));
+        String version = source.valueForSymbol(TapestryHttpSymbolConstants.TAPESTRY_VERSION);
+        boolean productionMode = Boolean.parseBoolean(source.valueForSymbol(TapestryHttpSymbolConstants.PRODUCTION_MODE));
 
 
         buffer.append("\n\n");
@@ -251,4 +251,22 @@ public class TapestryAppInitializer
         // log multi-line string with OS-specific line endings (TAP5-2294)
         logger.info(buffer.toString().replaceAll("\\n", System.getProperty("line.separator")));
     }
+    
+    private static final String[] EMPTY_STRING_ARRAY = new String[0];
+    
+    private static final Pattern COMMA_PATTERN = Pattern.compile("\\s*,\\s*");
+
+    /**
+     * 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 (InternalUtils.isBlank(value))
+            return EMPTY_STRING_ARRAY;
+
+        return COMMA_PATTERN.split(value.trim());
+    }
+    
 }
diff --git a/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryHttpInternalConstants.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryHttpInternalConstants.java
new file mode 100644
index 0000000..52158b9
--- /dev/null
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryHttpInternalConstants.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.http.internal;
+
+
+public class TapestryHttpInternalConstants {
+
+    /**
+     * Init parameter used to identify the package from which application classes are loaded. Such
+     * classes are in the
+     * pages, components and mixins sub-packages.
+     */
+    public static final String TAPESTRY_APP_PACKAGE_PARAM = "tapestry.app-package";
+    
+    /**
+     * Turns off loading of default modules (as driven by JAR file Manifest entries).
+     */
+    public static final String DISABLE_DEFAULT_MODULES_PARAM = "tapestry.disable-default-modules";
+
+    public static final String CHARSET_CONTENT_TYPE_PARAMETER = "charset";
+
+    /**
+     * Name of response header for content encoding.
+     *
+     * @since 5.1.0.0
+     */
+    public static final String CONTENT_ENCODING_HEADER = "Content-Encoding";
+
+    /**
+     * Response content encoding value indicating use of GZIP compression.
+     *
+     * @since 5.1.0.0
+     */
+    public static final String GZIP_CONTENT_ENCODING = "gzip";
+
+}
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryHttpInternalSymbols.java
similarity index 64%
copy from tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java
copy to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryHttpInternalSymbols.java
index b335ac9..f64c0ad 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/TapestryHttpInternalSymbols.java
@@ -9,19 +9,16 @@
 // WITHOUT WARRANTIES 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.http.internal;
 
-package org.apache.tapestry5.internal;
 
-import org.apache.tapestry5.ioc.annotations.IncompatibleChange;
+public class TapestryHttpInternalSymbols {
 
-public class InternalSymbols
-{
     /**
      * The name of the application (i.e., the name of the application filter). Used, for example, to
      * select additional resources related to the application.
      */
     public static final String APP_NAME = "tapestry.app-name";
-
     /**
      * The application package converted to a path ('.' becomes '/'). Useful for finding resources
      * on the classpath relevant to the application.
@@ -30,14 +27,4 @@ public class InternalSymbols
      */
     public static final String APP_PACKAGE_PATH = "tapestry.app-package-path";
 
-    /**
-     * Comma-separated list of pre-allocated Form component control names. Basically, this exists to
-     * work around name collisions on the client side. Starting in 5.3, these names are
-     * also pre-allocated as ids.
-     *
-     *
-     * @since 5.2.0
-     */
-    @IncompatibleChange(release = "5.4", details = "Renamed from PRE_SELECTED_FORM_NAMES.")
-    public static final String RESERVED_FORM_CONTROL_NAMES = "tapestry.reserved-form-control-names";
 }
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/BufferedGZipOutputStream.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/BufferedGZipOutputStream.java
similarity index 89%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/BufferedGZipOutputStream.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/BufferedGZipOutputStream.java
index 3c4c362..76aa341 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/BufferedGZipOutputStream.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/BufferedGZipOutputStream.java
@@ -12,22 +12,23 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.gzip;
+package org.apache.tapestry5.http.internal.gzip;
 
-import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.services.assets.CompressionAnalyzer;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.zip.GZIPOutputStream;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
+import org.apache.tapestry5.http.services.CompressionAnalyzer;
+
 /**
  * A buffered output stream that, when a certain number of bytes is buffered (the cutover point) will open a compressed
- * stream (via {@link org.apache.tapestry5.services.Response#getOutputStream(String)}
+ * stream (via {@link org.apache.tapestry5.http.services.Response#getOutputStream(String)}
  */
 public class BufferedGZipOutputStream extends ServletOutputStream
 {
@@ -82,7 +83,9 @@ public class BufferedGZipOutputStream extends ServletOutputStream
 
         if (useCompression)
         {
-            response.setHeader(InternalConstants.CONTENT_ENCODING_HEADER, InternalConstants.GZIP_CONTENT_ENCODING);
+            response.setHeader(
+                    TapestryHttpInternalConstants.CONTENT_ENCODING_HEADER, 
+                    TapestryHttpInternalConstants.GZIP_CONTENT_ENCODING);
         }
 
         currentOutputStream =
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/GZIPEnabledResponse.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/GZIPEnabledResponse.java
similarity index 88%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/GZIPEnabledResponse.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/GZIPEnabledResponse.java
index 736adb5..330f2bd 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/GZIPEnabledResponse.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/GZIPEnabledResponse.java
@@ -12,16 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.gzip;
+package org.apache.tapestry5.http.internal.gzip;
 
-import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.services.assets.CompressionAnalyzer;
+import java.io.IOException;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponseWrapper;
-import java.io.IOException;
+
+import org.apache.tapestry5.http.TapestryHttpConstants;
+import org.apache.tapestry5.http.services.CompressionAnalyzer;
 
 public class GZIPEnabledResponse extends HttpServletResponseWrapper
 {
@@ -66,6 +67,6 @@ public class GZIPEnabledResponse extends HttpServletResponseWrapper
 
     private boolean isCompressionDisabled()
     {
-        return request.getAttribute(InternalConstants.SUPPRESS_COMPRESSION) != null;
+        return request.getAttribute(TapestryHttpConstants.SUPPRESS_COMPRESSION) != null;
     }
 }
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/GZipFilter.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/GZipFilter.java
similarity index 80%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/GZipFilter.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/GZipFilter.java
index a1b06fc..dab0551 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/gzip/GZipFilter.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/gzip/GZipFilter.java
@@ -12,18 +12,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.gzip;
+package org.apache.tapestry5.http.internal.gzip;
 
-import org.apache.tapestry5.SymbolConstants;
-import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.services.HttpServletRequestFilter;
-import org.apache.tapestry5.services.HttpServletRequestHandler;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
-import org.apache.tapestry5.services.assets.CompressionAnalyzer;
+import java.io.IOException;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.CompressionAnalyzer;
+import org.apache.tapestry5.http.services.HttpServletRequestFilter;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
+import org.apache.tapestry5.ioc.annotations.Symbol;
 
 /**
  * Filter that adds GZIP compression to the response, if the client supports it.
@@ -37,7 +38,7 @@ public class GZipFilter implements HttpServletRequestFilter
     private final CompressionAnalyzer compressionAnalyzer;
 
     public GZipFilter(
-            @Symbol(SymbolConstants.MIN_GZIP_SIZE)
+            @Symbol(TapestryHttpSymbolConstants.MIN_GZIP_SIZE)
             int cutover,
 
             ResponseCompressionAnalyzer responseAnalyzer,
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationGlobalsImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ApplicationGlobalsImpl.java
similarity index 82%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationGlobalsImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ApplicationGlobalsImpl.java
index bde755e..ac06bce 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationGlobalsImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ApplicationGlobalsImpl.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2020 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.http.internal.services;
 
-import org.apache.tapestry5.services.ApplicationGlobals;
-import org.apache.tapestry5.services.Context;
+import org.apache.tapestry5.http.services.ApplicationGlobals;
+import org.apache.tapestry5.http.services.Context;
 
 import javax.servlet.ServletContext;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BaseURLSourceImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/BaseURLSourceImpl.java
similarity index 82%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BaseURLSourceImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/BaseURLSourceImpl.java
index 11b6bd8..5e82b49 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BaseURLSourceImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/BaseURLSourceImpl.java
@@ -10,14 +10,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.http.internal.services;
 
-import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.BaseURLSource;
-import org.apache.tapestry5.services.Request;
 
 public class BaseURLSourceImpl implements BaseURLSource
 {
@@ -27,8 +27,8 @@ public class BaseURLSourceImpl implements BaseURLSource
     private int hostPort;
     private int secureHostPort;
 
-    public BaseURLSourceImpl(Request request, @Inject @Symbol(SymbolConstants.HOSTNAME) String hostname,
-                             @Symbol(SymbolConstants.HOSTPORT) int hostPort, @Symbol(SymbolConstants.HOSTPORT_SECURE) int secureHostPort)
+    public BaseURLSourceImpl(Request request, @Inject @Symbol(TapestryHttpSymbolConstants.HOSTNAME) String hostname,
+                             @Symbol(TapestryHttpSymbolConstants.HOSTPORT) int hostPort, @Symbol(TapestryHttpSymbolConstants.HOSTPORT_SECURE) int secureHostPort)
     {
         this.request = request;
         this.hostname = hostname;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClusteredSessionImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ClusteredSessionImpl.java
similarity index 93%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClusteredSessionImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ClusteredSessionImpl.java
index 8fd2ad7..29099bf 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ClusteredSessionImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ClusteredSessionImpl.java
@@ -1,4 +1,4 @@
-//  Copyright 2011, 2013 The Apache Software Foundation
+//  Copyright 2011, 2013, 2020 The Apache Software Foundation
 //
 //  Licensed under the Apache License, Version 2.0 (the "License");
 //  you may not use this file except in compliance with the License.
@@ -12,11 +12,11 @@
 //  See the License for the specific language governing permissions and
 //  limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.http.internal.services;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
-import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ContextImpl.java
similarity index 96%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ContextImpl.java
index 2b10d22..be1ced0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ContextImpl.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.http.internal.services;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.Stack;
+import org.apache.tapestry5.http.services.Context;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.Context;
 
 import javax.servlet.ServletContext;
 import java.io.File;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultSessionPersistedObjectAnalyzer.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/DefaultSessionPersistedObjectAnalyzer.java
similarity index 81%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultSessionPersistedObjectAnalyzer.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/DefaultSessionPersistedObjectAnalyzer.java
index 280aa12..a525b34 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultSessionPersistedObjectAnalyzer.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/DefaultSessionPersistedObjectAnalyzer.java
@@ -12,20 +12,20 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.http.internal.services;
 
-import org.apache.tapestry5.annotations.ImmutableSessionPersistedObject;
-import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
+import org.apache.tapestry5.http.annotations.ImmutableSessionPersistedObject;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
 
 /**
- * Default catch-all implementation of {@link org.apache.tapestry5.services.SessionPersistedObjectAnalyzer}.
+ * Default catch-all implementation of {@link org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer}.
  *
  * @since 5.1.0.0
  */
 public class DefaultSessionPersistedObjectAnalyzer implements SessionPersistedObjectAnalyzer<Object>
 {
     /**
-     * An object is dirty <em>unless</em> it has the {@link org.apache.tapestry5.annotations.ImmutableSessionPersistedObject}
+     * An object is dirty <em>unless</em> it has the {@link org.apache.tapestry5.http.annotations.ImmutableSessionPersistedObject}
      * annotation.
      *
      * @param sessionPersistedObject to analyze
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/OptimizedSessionPersistedObjectAnalyzer.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/OptimizedSessionPersistedObjectAnalyzer.java
similarity index 77%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/OptimizedSessionPersistedObjectAnalyzer.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/OptimizedSessionPersistedObjectAnalyzer.java
index abb24a3..3e93f86 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/OptimizedSessionPersistedObjectAnalyzer.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/OptimizedSessionPersistedObjectAnalyzer.java
@@ -1,4 +1,4 @@
-// Copyright 2008, 2011 The Apache Software Foundation
+// Copyright 2008, 2011, 2020 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.http.internal.services;
 
-import org.apache.tapestry5.OptimizedSessionPersistedObject;
-import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
+import org.apache.tapestry5.http.OptimizedSessionPersistedObject;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
 
 public class OptimizedSessionPersistedObjectAnalyzer implements SessionPersistedObjectAnalyzer<OptimizedSessionPersistedObject>
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestGlobalsImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/RequestGlobalsImpl.java
similarity index 90%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestGlobalsImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/RequestGlobalsImpl.java
index bdea69e..66d6703 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestGlobalsImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/RequestGlobalsImpl.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.http.internal.services;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.ioc.ScopeConstants;
 import org.apache.tapestry5.ioc.annotations.Scope;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.RequestGlobals;
-import org.apache.tapestry5.services.Response;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/RequestImpl.java
similarity index 77%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/RequestImpl.java
index 6226e86..6694a14 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/RequestImpl.java
@@ -10,29 +10,38 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.http.internal.services;
 
-import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Session;
-
-import javax.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
+import java.util.Collections;
+import java.util.Enumeration;
 import java.util.List;
 import java.util.Locale;
 
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Session;
+
 /**
- * Basic implementation of {@link org.apache.tapestry5.services.Request} that wraps around an
+ * Basic implementation of {@link org.apache.tapestry5.http.services.Request} that wraps around an
  * {@link javax.servlet.http.HttpServletRequest}. This is not threadsafe, nor should it need to be (each Request is
  * handled by its own Thread).
  */
 public class RequestImpl implements Request
 {
-    static final String REQUESTED_WITH_HEADER = "X-Requested-With";
+    /**
+     * @deprecated Use {@link Request#REQUESTED_WITH_HEADER} instead
+     */
+    static final String REQUESTED_WITH_HEADER = Request.REQUESTED_WITH_HEADER;
 
     static final String XML_HTTP_REQUEST = "XMLHttpRequest";
 
-    static final String X_FORWARDED_PROTO_HEADER = "X-Forwarded-Proto";
+    /**
+     * @deprecated Use {@link Request#X_FORWARDED_PROTO_HEADER} instead
+     */
+    static final String X_FORWARDED_PROTO_HEADER = Request.X_FORWARDED_PROTO_HEADER;
     static final String X_FORWARDED_PROTO_HTTPS = "https";
 
     private final HttpServletRequest request;
@@ -59,12 +68,12 @@ public class RequestImpl implements Request
     {
         setupEncoding();
 
-        return InternalUtils.toList(request.getParameterNames());
+        return toList(request.getParameterNames());
     }
 
     public List<String> getHeaderNames()
     {
-        return InternalUtils.toList(request.getHeaderNames());
+        return toList(request.getHeaderNames());
     }
 
     public String getParameter(String name)
@@ -167,13 +176,13 @@ public class RequestImpl implements Request
 
     public boolean isXHR()
     {
-        return XML_HTTP_REQUEST.equals(request.getHeader(REQUESTED_WITH_HEADER));
+        return XML_HTTP_REQUEST.equals(request.getHeader(Request.REQUESTED_WITH_HEADER));
     }
 
     public boolean isSecure()
     {
         return request.isSecure() ||
-                X_FORWARDED_PROTO_HTTPS.equals(request.getHeader(X_FORWARDED_PROTO_HEADER));
+                X_FORWARDED_PROTO_HTTPS.equals(request.getHeader(Request.X_FORWARDED_PROTO_HEADER));
     }
 
     public boolean isRequestedSessionIdValid()
@@ -190,7 +199,7 @@ public class RequestImpl implements Request
     {
         setupEncoding();
 
-        return InternalUtils.toList(request.getAttributeNames());
+        return toList(request.getAttributeNames());
     }
 
     public void setAttribute(String name, Object value)
@@ -225,5 +234,26 @@ public class RequestImpl implements Request
     {
         return request.getRemoteHost();
     }
+    
+    /**
+     * Converts an enumeration (of Strings) into a sorted list of Strings.
+     */
+    @SuppressWarnings("rawtypes")
+    private static List<String> toList(Enumeration e)
+    {
+        List<String> result = CollectionFactory.newList();
+
+        while (e.hasMoreElements())
+        {
+            String name = (String) e.nextElement();
+
+            result.add(name);
+        }
+
+        Collections.sort(result);
+
+        return result;
+    }
+
 
 }
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ResponseCompressionAnalyzerImpl.java
similarity index 80%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ResponseCompressionAnalyzerImpl.java
index 0b393d0..3b11aab 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseCompressionAnalyzerImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ResponseCompressionAnalyzerImpl.java
@@ -10,15 +10,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.http.internal.services;
 
-import org.apache.tapestry5.ContentType;
-import org.apache.tapestry5.SymbolConstants;
-import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.http.ContentType;
+import org.apache.tapestry5.http.TapestryHttpConstants;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.CompressionAnalyzer;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
 import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
-import org.apache.tapestry5.services.assets.CompressionAnalyzer;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -31,7 +31,7 @@ public class ResponseCompressionAnalyzerImpl implements ResponseCompressionAnaly
     private final CompressionAnalyzer compressionAnalyzer;
 
     public ResponseCompressionAnalyzerImpl(HttpServletRequest request,
-                                           @Symbol(SymbolConstants.GZIP_COMPRESSION_ENABLED)
+                                           @Symbol(TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED)
                                            boolean gzipCompressionEnabled, CompressionAnalyzer compressionAnalyzer)
     {
         this.request = request;
@@ -53,7 +53,7 @@ public class ResponseCompressionAnalyzerImpl implements ResponseCompressionAnaly
         }
 
         // TAP5-2264:
-        if (request.getAttribute(InternalConstants.SUPPRESS_COMPRESSION) != null)
+        if (request.getAttribute(TapestryHttpConstants.SUPPRESS_COMPRESSION) != null)
         {
             return false;
         }
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ResponseImpl.java
similarity index 92%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ResponseImpl.java
index fff8db9..bf2c27e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResponseImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/ResponseImpl.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.http.internal.services;
 
 import java.io.BufferedWriter;
 import java.io.IOException;
@@ -24,10 +24,10 @@ import java.io.Writer;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.tapestry5.Link;
-import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.TapestryHttpConstants;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.Response;
 
 /**
  * Implementation of {@link Response} that wraps around an underlying {@link HttpServletResponse}.
@@ -130,6 +130,6 @@ public class ResponseImpl implements Response
 
     public void disableCompression()
     {
-        request.setAttribute(InternalConstants.SUPPRESS_COMPRESSION, true);
+        request.setAttribute(TapestryHttpConstants.SUPPRESS_COMPRESSION, true);
     }
 }
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/SessionImpl.java
similarity index 96%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/SessionImpl.java
index 3b7fc5e..01047d5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/SessionImpl.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.http.internal.services;
 
 import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
-import org.apache.tapestry5.services.Session;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionLock.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/SessionLock.java
similarity index 96%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionLock.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/SessionLock.java
index d234bd4..17e9764 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionLock.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/SessionLock.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.http.internal.services;
 
 /**
  * A wrapper around {@link java.util.concurrent.locks.ReentrantReadWriteLock} used to manage the lock for a session.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestrySessionFactory.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/TapestrySessionFactory.java
similarity index 84%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestrySessionFactory.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/TapestrySessionFactory.java
index 33814a2..05885c0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestrySessionFactory.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/TapestrySessionFactory.java
@@ -1,4 +1,4 @@
-//  Copyright 2011 The Apache Software Foundation
+//  Copyright 2011, 2020 The Apache Software Foundation
 //
 //  Licensed under the Apache License, Version 2.0 (the "License");
 //  you may not use this file except in compliance with the License.
@@ -12,9 +12,9 @@
 //  See the License for the specific language governing permissions and
 //  limitations under the License.
 
-package org.apache.tapestry5.internal.services;
+package org.apache.tapestry5.http.internal.services;
 
-import org.apache.tapestry5.services.Session;
+import org.apache.tapestry5.http.services.Session;
 
 /**
  * Encapsulates logic for accessing the Tapestry {@link Session} (a wrapper around the {@link javax.servlet.http.HttpSession}).
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestrySessionFactoryImpl.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/TapestrySessionFactoryImpl.java
similarity index 92%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestrySessionFactoryImpl.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/TapestrySessionFactoryImpl.java
index bc221a6..9cd5c96 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestrySessionFactoryImpl.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/services/TapestrySessionFactoryImpl.java
@@ -12,22 +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.http.internal.services;
 
-import org.apache.tapestry5.SymbolConstants;
-import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.ioc.services.PerthreadManager;
-import org.apache.tapestry5.services.Session;
-import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
 import java.util.Map;
 import java.util.WeakHashMap;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Session;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
+import org.apache.tapestry5.ioc.annotations.Symbol;
+import org.apache.tapestry5.ioc.services.PerthreadManager;
+
 public class TapestrySessionFactoryImpl implements TapestrySessionFactory
 {
     private boolean clustered;
@@ -120,12 +121,12 @@ public class TapestrySessionFactoryImpl implements TapestrySessionFactory
     }
 
     public TapestrySessionFactoryImpl(
-            @Symbol(SymbolConstants.CLUSTERED_SESSIONS)
+            @Symbol(TapestryHttpSymbolConstants.CLUSTERED_SESSIONS)
             boolean clustered,
             SessionPersistedObjectAnalyzer analyzer,
             HttpServletRequest request,
             PerthreadManager perthreadManager,
-            @Symbol(SymbolConstants.SESSION_LOCKING_ENABLED)
+            @Symbol(TapestryHttpSymbolConstants.SESSION_LOCKING_ENABLED)
             boolean sessionLockingEnabled)
     {
         this.clustered = clustered;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/DelegatingSymbolProvider.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/util/DelegatingSymbolProvider.java
similarity index 96%
rename from tapestry-core/src/main/java/org/apache/tapestry5/internal/util/DelegatingSymbolProvider.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/internal/util/DelegatingSymbolProvider.java
index dd1d89c..c701554 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/DelegatingSymbolProvider.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/internal/util/DelegatingSymbolProvider.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.internal.util;
+package org.apache.tapestry5.http.internal.util;
 
 import org.apache.tapestry5.ioc.services.SymbolProvider;
 
diff --git a/tapestry-http/src/main/java/org/apache/tapestry5/http/modules/TapestryHttpModule.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/modules/TapestryHttpModule.java
new file mode 100644
index 0000000..0bc9ed9
--- /dev/null
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/modules/TapestryHttpModule.java
@@ -0,0 +1,411 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES 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.http.modules;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.http.OptimizedSessionPersistedObject;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.internal.gzip.GZipFilter;
+import org.apache.tapestry5.http.internal.services.ApplicationGlobalsImpl;
+import org.apache.tapestry5.http.internal.services.BaseURLSourceImpl;
+import org.apache.tapestry5.http.internal.services.ContextImpl;
+import org.apache.tapestry5.http.internal.services.DefaultSessionPersistedObjectAnalyzer;
+import org.apache.tapestry5.http.internal.services.OptimizedSessionPersistedObjectAnalyzer;
+import org.apache.tapestry5.http.internal.services.RequestGlobalsImpl;
+import org.apache.tapestry5.http.internal.services.RequestImpl;
+import org.apache.tapestry5.http.internal.services.ResponseImpl;
+import org.apache.tapestry5.http.internal.services.TapestrySessionFactory;
+import org.apache.tapestry5.http.internal.services.TapestrySessionFactoryImpl;
+import org.apache.tapestry5.http.services.ApplicationGlobals;
+import org.apache.tapestry5.http.services.ApplicationInitializer;
+import org.apache.tapestry5.http.services.ApplicationInitializerFilter;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Context;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.HttpServletRequestFilter;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
+import org.apache.tapestry5.http.services.ResponseCompressionAnalyzer;
+import org.apache.tapestry5.http.services.ServletApplicationInitializer;
+import org.apache.tapestry5.http.services.ServletApplicationInitializerFilter;
+import org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer;
+import org.apache.tapestry5.internal.services.ResponseCompressionAnalyzerImpl;
+import org.apache.tapestry5.ioc.ServiceBinder;
+import org.apache.tapestry5.ioc.annotations.Autobuild;
+import org.apache.tapestry5.ioc.annotations.Marker;
+import org.apache.tapestry5.ioc.annotations.Primary;
+import org.apache.tapestry5.ioc.annotations.Symbol;
+import org.apache.tapestry5.ioc.services.ChainBuilder;
+import org.apache.tapestry5.ioc.services.PipelineBuilder;
+import org.apache.tapestry5.ioc.services.PropertyShadowBuilder;
+import org.apache.tapestry5.ioc.services.StrategyBuilder;
+import org.slf4j.Logger;
+
+/**
+ * The Tapestry module for HTTP handling classes.
+ */
+public final class TapestryHttpModule {
+    
+    final private PropertyShadowBuilder shadowBuilder;
+    final private RequestGlobals requestGlobals;
+    final private PipelineBuilder pipelineBuilder;
+    final private ApplicationGlobals applicationGlobals;
+    
+    public TapestryHttpModule(PropertyShadowBuilder shadowBuilder, 
+            RequestGlobals requestGlobals, PipelineBuilder pipelineBuilder,
+            ApplicationGlobals applicationGlobals) 
+    {
+        this.shadowBuilder = shadowBuilder;
+        this.requestGlobals = requestGlobals;
+        this.pipelineBuilder = pipelineBuilder;
+        this.applicationGlobals = applicationGlobals;
+    }
+
+    public static void bind(ServiceBinder binder)
+    {
+        binder.bind(RequestGlobals.class, RequestGlobalsImpl.class);
+        binder.bind(ApplicationGlobals.class, ApplicationGlobalsImpl.class);
+        binder.bind(TapestrySessionFactory.class, TapestrySessionFactoryImpl.class);
+        binder.bind(BaseURLSource.class, BaseURLSourceImpl.class);
+        binder.bind(ResponseCompressionAnalyzer.class, ResponseCompressionAnalyzerImpl.class);
+    }
+    
+    /**
+     * Contributes factory defaults that may be overridden.
+     */
+    public static void contributeFactoryDefaults(MappedConfiguration<String, Object> configuration)
+    {
+        configuration.add(TapestryHttpSymbolConstants.SESSION_LOCKING_ENABLED, true);
+        configuration.add(TapestryHttpSymbolConstants.CLUSTERED_SESSIONS, true);
+        configuration.add(TapestryHttpSymbolConstants.CHARSET, "UTF-8");
+        configuration.add(TapestryHttpSymbolConstants.APPLICATION_VERSION, "0.0.1");
+        configuration.add(TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED, true);
+        configuration.add(TapestryHttpSymbolConstants.MIN_GZIP_SIZE, 100);
+        
+        // The default values denote "use values from request"
+        configuration.add(TapestryHttpSymbolConstants.HOSTNAME, "");
+        configuration.add(TapestryHttpSymbolConstants.HOSTPORT, 0);
+        configuration.add(TapestryHttpSymbolConstants.HOSTPORT_SECURE, 0);
+    }
+    
+    /**
+     * Builds a shadow of the RequestGlobals.request property. Note again that
+     * the shadow can be an ordinary singleton,
+     * even though RequestGlobals is perthread.
+     */
+    public Request buildRequest(PropertyShadowBuilder shadowBuilder)
+    {
+        return shadowBuilder.build(requestGlobals, "request", Request.class);
+    }
+
+    /**
+     * Builds a shadow of the RequestGlobals.HTTPServletRequest property.
+     * Generally, you should inject the {@link Request} service instead, as
+     * future version of Tapestry may operate beyond just the servlet API.
+     */
+    public HttpServletRequest buildHttpServletRequest()
+    {
+        return shadowBuilder.build(requestGlobals, "HTTPServletRequest", HttpServletRequest.class);
+    }
+
+    /**
+     * @since 5.1.0.0
+     */
+    public HttpServletResponse buildHttpServletResponse()
+    {
+        return shadowBuilder.build(requestGlobals, "HTTPServletResponse", HttpServletResponse.class);
+    }
+
+    /**
+     * Builds a shadow of the RequestGlobals.response property. Note again that
+     * the shadow can be an ordinary singleton,
+     * even though RequestGlobals is perthread.
+     */
+    public Response buildResponse()
+    {
+        return shadowBuilder.build(requestGlobals, "response", Response.class);
+    }
+
+    /**
+     * Ordered contributions to the MasterDispatcher service allow different URL
+     * matching strategies to occur.
+     */
+    @Marker(Primary.class)
+    public Dispatcher buildMasterDispatcher(List<Dispatcher> configuration,
+            ChainBuilder chainBuilder)
+    {
+        return chainBuilder.build(Dispatcher.class, configuration);
+    }
+    
+    /**
+     * The master SessionPersistedObjectAnalyzer.
+     *
+     * @since 5.1.0.0
+     */
+    @SuppressWarnings("rawtypes")
+    @Marker(Primary.class)
+    public SessionPersistedObjectAnalyzer buildSessionPersistedObjectAnalyzer(
+            Map<Class, SessionPersistedObjectAnalyzer> configuration,
+            StrategyBuilder strategyBuilder)
+    {
+        return strategyBuilder.build(SessionPersistedObjectAnalyzer.class, configuration);
+    }
+
+    /**
+     * Identifies String, Number and Boolean as immutable objects, a catch-all
+     * handler for Object (that understands
+     * the {@link org.apache.tapestry5.http.annotations.ImmutableSessionPersistedObject} annotation),
+     * and a handler for {@link org.apache.tapestry5.http.OptimizedSessionPersistedObject}.
+     *
+     * @since 5.1.0.0
+     */
+    @SuppressWarnings("rawtypes")
+    public static void contributeSessionPersistedObjectAnalyzer(
+            MappedConfiguration<Class, SessionPersistedObjectAnalyzer> configuration)
+    {
+        configuration.add(Object.class, new DefaultSessionPersistedObjectAnalyzer());
+
+        SessionPersistedObjectAnalyzer<Object> immutable = new SessionPersistedObjectAnalyzer<Object>()
+        {
+            public boolean checkAndResetDirtyState(Object sessionPersistedObject)
+            {
+                return false;
+            }
+        };
+
+        configuration.add(String.class, immutable);
+        configuration.add(Number.class, immutable);
+        configuration.add(Boolean.class, immutable);
+
+        configuration.add(OptimizedSessionPersistedObject.class, new OptimizedSessionPersistedObjectAnalyzer());
+    }
+
+    /**
+     * Initializes the application, using a pipeline of {@link org.apache.tapestry5.services.ApplicationInitializer}s.
+     */
+    @Marker(Primary.class)
+    public ApplicationInitializer buildApplicationInitializer(Logger logger,
+                                                              List<ApplicationInitializerFilter> configuration)
+    {
+        ApplicationInitializer terminator = new ApplicationInitializerTerminator();
+
+        return pipelineBuilder.build(logger, ApplicationInitializer.class, ApplicationInitializerFilter.class,
+                configuration, terminator);
+    }
+
+    public HttpServletRequestHandler buildHttpServletRequestHandler(Logger logger,
+
+                                                                    List<HttpServletRequestFilter> configuration,
+
+                                                                    @Primary
+                                                                    RequestHandler handler,
+
+                                                                    @Symbol(TapestryHttpSymbolConstants.CHARSET)
+                                                                    String applicationCharset,
+
+                                                                    TapestrySessionFactory sessionFactory)
+    {
+        HttpServletRequestHandler terminator = new HttpServletRequestHandlerTerminator(handler, applicationCharset,
+                sessionFactory);
+
+        return pipelineBuilder.build(logger, HttpServletRequestHandler.class, HttpServletRequestFilter.class,
+                configuration, terminator);
+    }
+
+    @Marker(Primary.class)
+    public RequestHandler buildRequestHandler(Logger logger, List<RequestFilter> configuration,
+
+                                              @Primary
+                                              Dispatcher masterDispatcher)
+    {
+        RequestHandler terminator = new RequestHandlerTerminator(masterDispatcher);
+
+        return pipelineBuilder.build(logger, RequestHandler.class, RequestFilter.class, configuration, terminator);
+    }
+
+    public ServletApplicationInitializer buildServletApplicationInitializer(Logger logger,
+                                                                            List<ServletApplicationInitializerFilter> configuration,
+
+                                                                            @Primary
+                                                                            ApplicationInitializer initializer)
+    {
+        ServletApplicationInitializer terminator = new ServletApplicationInitializerTerminator(initializer);
+
+        return pipelineBuilder.build(logger, ServletApplicationInitializer.class,
+                ServletApplicationInitializerFilter.class, configuration, terminator);
+    }
+    
+    /**
+     * <dl>
+     * <dt>StoreIntoGlobals</dt>
+     * <dd>Stores the request and response into {@link org.apache.tapestry5.http.services.RequestGlobals} at the start of the
+     * pipeline</dd>
+     * <dt>IgnoredPaths</dt>
+     * <dd>Identifies requests that are known (via the IgnoredPathsFilter service's configuration) to be mapped to other
+     * applications</dd>
+     * <dt>GZip</dt>
+     * <dd>Handles GZIP compression of response streams (if supported by client)</dd>
+     * </dl>
+     */
+    public void contributeHttpServletRequestHandler(OrderedConfiguration<HttpServletRequestFilter> configuration,                         
+            @Symbol(TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED) boolean gzipCompressionEnabled, 
+            @Autobuild GZipFilter gzipFilter)
+    {
+        
+        HttpServletRequestFilter storeIntoGlobals = new HttpServletRequestFilter()
+        {
+            public boolean service(HttpServletRequest request, HttpServletResponse response,
+                                   HttpServletRequestHandler handler) throws IOException
+            {
+                requestGlobals.storeServletRequestResponse(request, response);
+
+                return handler.service(request, response);
+            }
+        };
+
+        configuration.add("StoreIntoGlobals", storeIntoGlobals, "before:*");
+        
+        configuration.add("GZIP", gzipCompressionEnabled ? gzipFilter : null);
+        
+    }
+    
+    
+    // A bunch of classes "promoted" from inline inner class to nested classes,
+    // just so that the stack trace would be more readable. Most of these
+    // are terminators for pipeline services.
+
+    /**
+     * @since 5.1.0.0
+     */
+    private class ApplicationInitializerTerminator implements ApplicationInitializer
+    {
+        public void initializeApplication(Context context)
+        {
+            applicationGlobals.storeContext(context);
+        }
+    }
+
+    /**
+     * @since 5.1.0.0
+     */
+    private class HttpServletRequestHandlerTerminator implements HttpServletRequestHandler
+    {
+        private final RequestHandler handler;
+        private final String applicationCharset;
+        private final TapestrySessionFactory sessionFactory;
+
+        public HttpServletRequestHandlerTerminator(RequestHandler handler, String applicationCharset,
+                                                   TapestrySessionFactory sessionFactory)
+        {
+            this.handler = handler;
+            this.applicationCharset = applicationCharset;
+            this.sessionFactory = sessionFactory;
+        }
+
+        public boolean service(HttpServletRequest servletRequest, HttpServletResponse servletResponse)
+                throws IOException
+        {
+            requestGlobals.storeServletRequestResponse(servletRequest, servletResponse);
+
+            // Should have started doing this a long time ago: recoding attributes into
+            // the request for things that may be needed downstream, without having to extend
+            // Request.
+
+            servletRequest.setAttribute("servletAPI.protocol", servletRequest.getProtocol());
+            servletRequest.setAttribute("servletAPI.characterEncoding", servletRequest.getCharacterEncoding());
+            servletRequest.setAttribute("servletAPI.contentLength", servletRequest.getContentLength());
+            servletRequest.setAttribute("servletAPI.authType", servletRequest.getAuthType());
+            servletRequest.setAttribute("servletAPI.contentType", servletRequest.getContentType());
+            servletRequest.setAttribute("servletAPI.scheme", servletRequest.getScheme());
+
+            Request request = new RequestImpl(servletRequest, applicationCharset, sessionFactory);
+            Response response = new ResponseImpl(servletRequest, servletResponse);
+
+            // TAP5-257: Make sure that the "initial guess" for request/response
+            // is available, even ifsome filter in the RequestHandler pipeline replaces them.
+            // Which just goes to show that there should have been only one way to access the Request/Response:
+            // either functionally (via parameters) or global (via ReqeuestGlobals) but not both.
+            // That ship has sailed.
+
+            requestGlobals.storeRequestResponse(request, response);
+
+            // Transition from the Servlet API-based pipeline, to the
+            // Tapestry-based pipeline.
+
+            return handler.service(request, response);
+        }
+    }
+
+    /**
+     * @since 5.1.0.0
+     */
+    private class RequestHandlerTerminator implements RequestHandler
+    {
+        private final Dispatcher masterDispatcher;
+
+        public RequestHandlerTerminator(Dispatcher masterDispatcher)
+        {
+            this.masterDispatcher = masterDispatcher;
+        }
+
+        public boolean service(Request request, Response response) throws IOException
+        {
+            // Update RequestGlobals with the current request/response (in case
+            // some filter replaced the
+            // normal set).
+            requestGlobals.storeRequestResponse(request, response);
+
+            return masterDispatcher.dispatch(request, response);
+        }
+    }
+
+    /**
+     * @since 5.1.0.0
+     */
+    private class ServletApplicationInitializerTerminator implements ServletApplicationInitializer
+    {
+        private final ApplicationInitializer initializer;
+
+        public ServletApplicationInitializerTerminator(ApplicationInitializer initializer)
+        {
+            this.initializer = initializer;
+        }
+
+        public void initializeApplication(ServletContext servletContext)
+        {
+            applicationGlobals.storeServletContext(servletContext);
+
+            // And now, down the (Web) ApplicationInitializer pipeline ...
+
+            ContextImpl context = new ContextImpl(servletContext);
+
+            applicationGlobals.storeContext(context);
+
+            initializer.initializeApplication(context);
+        }
+    }
+
+}
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationGlobals.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationGlobals.java
similarity index 86%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationGlobals.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationGlobals.java
index 747222e..ab4f6ee 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationGlobals.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationGlobals.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2008 The Apache Software Foundation
+// Copyright 2006, 2008, 2020 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
-
-import org.apache.tapestry5.services.Context;
+package org.apache.tapestry5.http.services;
 
 import javax.servlet.ServletContext;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationInitializer.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationInitializer.java
similarity index 79%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationInitializer.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationInitializer.java
index 4674192..b2cf749 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationInitializer.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationInitializer.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2008 The Apache Software Foundation
+// Copyright 2006, 2008, 2020 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,14 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
 import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+import org.apache.tapestry5.http.services.Context;
 
 /**
  * Service interface for initializing Tapestry for the application.  The service is a {@linkplain
  * org.apache.tapestry5.ioc.services.PipelineBuilder pipeline}, into which {@linkplain
- * org.apache.tapestry5.services.ApplicationInitializerFilter filters} may be contributed.
+ * org.apache.tapestry5.http.services.ApplicationInitializerFilter filters} may be contributed.
  */
 @UsesOrderedConfiguration(ApplicationInitializerFilter.class)
 public interface ApplicationInitializer
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationInitializerFilter.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationInitializerFilter.java
similarity index 84%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationInitializerFilter.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationInitializerFilter.java
index e9e2980..3d5e517 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationInitializerFilter.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ApplicationInitializerFilter.java
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2020 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
-
-import org.apache.tapestry5.services.Context;
+package org.apache.tapestry5.http.services;
 
 /**
  * Filter interface for {@link ApplicationInitializer}.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/BaseURLSource.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/BaseURLSource.java
similarity index 76%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/BaseURLSource.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/BaseURLSource.java
index b4738b7..bf2337f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/BaseURLSource.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/BaseURLSource.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
 import org.apache.tapestry5.ioc.services.ServiceOverride;
 
@@ -20,21 +20,21 @@ import org.apache.tapestry5.ioc.services.ServiceOverride;
  * Used when switching between normal/insecure (HTTP) and secure (HTTPS) mode. When a switch occurs, it is no longer
  * possible to use just paths, instead absolute URLs (including the scheme, hostname and possibly port) must be
  * generated. The default implementation of this is simple-minded: it just tacks the correct scheme in front of
- * {@link org.apache.tapestry5.services.Request#getServerName()}. In production, behind a firewall, it is often
+ * {@link org.apache.tapestry5.http.services.Request#getServerName()}. In production, behind a firewall, it is often
  * necessary to do a bit more, since <code>getServerName()</code> will often be the name of the internal server (not
  * visible to the client web browser), and a hard-coded name of a server that <em>is</em> visible to the web browser
  * is needed. Further, in testing, non-default ports are often used. In those cases, an overriding contribution to the
  * {@link ServiceOverride} service will allow a custom implementation to supercede the default version. You may also
  * contribute application specific values for the following {@link org.apache.tapestry5.SymbolConstants}:
- * {@link org.apache.tapestry5.SymbolConstants#HOSTNAME}, {@link org.apache.tapestry5.SymbolConstants#HOSTPORT} and 
- * {@link org.apache.tapestry5.SymbolConstants#HOSTPORT_SECURE} to alter the behavior of the default BaseURLSource 
- * implementation. The default values for the SymbolConstants require {@link org.apache.tapestry5.services.Request} 
+ * {@link org.apache.tapestry5.http.TapestryHttpSymbolConstants#HOSTNAME}, {@link org.apache.tapestry5.http.TapestryHttpSymbolConstants#HOSTPORT} and 
+ * {@link org.apache.tapestry5.http.TapestryHttpSymbolConstants#HOSTPORT_SECURE} to alter the behavior of the default BaseURLSource 
+ * implementation. The default values for the SymbolConstants require {@link org.apache.tapestry5.http.services.Request} 
  * context to be available. If you contribute specific values for the specified SymbolConstants, it's safe to use 
  * the default implementation of this service outside of request context, for example in a batch job. For 
- * {@link org.apache.tapestry5.SymbolConstants#HOSTNAME}, a value starting with a dollar sign ($) will be resolved 
- * using {@link java.lang.System#getenv()} - contributing "$HOSTNAME" for {@link org.apache.tapestry5.SymbolConstants#HOSTNAME}
+ * {@link org.apache.tapestry5.http.TapestryHttpSymbolConstants#HOSTNAME}, a value starting with a dollar sign ($) will be resolved 
+ * using {@link java.lang.System#getenv()} - contributing "$HOSTNAME" for {@link org.apache.tapestry5.http.TapestryHttpSymbolConstants#HOSTNAME}
  * is the most sensible choice for a dynamic value that doesn't use 
- * {@link org.apache.tapestry5.services.Request#getServerName()}.
+ * {@link org.apache.tapestry5.http.services.Request#getServerName()}.
  */
 public interface BaseURLSource
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/CompressionAnalyzer.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/CompressionAnalyzer.java
similarity index 97%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/assets/CompressionAnalyzer.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/CompressionAnalyzer.java
index a61e56c..000a662 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/CompressionAnalyzer.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/CompressionAnalyzer.java
@@ -10,7 +10,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services.assets;
+package org.apache.tapestry5.http.services;
 
 import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
 
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Context.java
similarity index 98%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/Context.java
index 98be32f..e9a4f7e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Context.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
 import java.io.File;
 import java.net.URL;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/Dispatcher.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Dispatcher.java
similarity index 91%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/Dispatcher.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/Dispatcher.java
index 133cdf6..64731fa 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/Dispatcher.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Dispatcher.java
@@ -12,8 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
 import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
 
 import java.io.IOException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/HttpServletRequestFilter.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/HttpServletRequestFilter.java
similarity index 90%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/HttpServletRequestFilter.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/HttpServletRequestFilter.java
index 537e82c..f2611b9 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/HttpServletRequestFilter.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/HttpServletRequestFilter.java
@@ -12,14 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
 import java.io.IOException;
 
 /**
- * Filter interface for {@link org.apache.tapestry5.services.HttpServletRequestHandler}.
+ * Filter interface for {@link org.apache.tapestry5.http.services.HttpServletRequestHandler}.
  */
 public interface HttpServletRequestFilter
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/HttpServletRequestHandler.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/HttpServletRequestHandler.java
similarity index 88%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/HttpServletRequestHandler.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/HttpServletRequestHandler.java
index bb9d761..dfa8363 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/HttpServletRequestHandler.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/HttpServletRequestHandler.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2008 The Apache Software Foundation
+// Copyright 2006, 2008, 2020 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,16 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
-import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+import java.io.IOException;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
 
 /**
- * The first step in handing an incoming request to the {@linkplain org.apache.tapestry5.TapestryFilter servlet filter},
+ * The first step in handing an incoming request to the {@linkplain org.apache.tapestry5.http.TapestryFilter servlet filter},
  * this constructed as a {@linkplain org.apache.tapestry5.ioc.services.PipelineBuilder pipeline}.  The main
  * implementation hands off to the {@link org.apache.tapestry5.services.RequestHandler} service.
  */
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Request.java
similarity index 97%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/Request.java
index 7166264..aaea711 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/Request.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Request.java
@@ -10,7 +10,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
 import java.util.List;
 import java.util.Locale;
@@ -24,6 +24,9 @@ import java.util.Locale;
  */
 public interface Request
 {
+    public String REQUESTED_WITH_HEADER = "X-Requested-With";
+    public String X_FORWARDED_PROTO_HEADER = "X-Forwarded-Proto";
+
     /**
      * Gets the {@link Session}. If create is false and the session has not be created previously, returns null. Also,
      * if the session is invalidated and create is false, returns null. Invoking this method with true, when the session exists but has
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/RequestFilter.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestFilter.java
similarity index 84%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/RequestFilter.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestFilter.java
index bbf9bfa..1b5b89e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/RequestFilter.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestFilter.java
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
 import java.io.IOException;
 
 /**
- * Filter interface for {@link org.apache.tapestry5.services.RequestHandler}. Implementations of this interface may be
+ * Filter interface for {@link org.apache.tapestry5.http.services.RequestHandler}. Implementations of this interface may be
  * contributed into the RequestHandler service configuration.
  */
 public interface RequestFilter
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/RequestGlobals.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestGlobals.java
similarity index 89%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/RequestGlobals.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestGlobals.java
index 65f53b1..6dcd4f5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/RequestGlobals.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestGlobals.java
@@ -12,10 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
-
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
+package org.apache.tapestry5.http.services;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -52,7 +49,7 @@ public interface RequestGlobals
     Response getResponse();
 
     /**
-     * Stores the {@linkplain ComponentClassResolver#canonicalizePageName(String) canonicalized}
+     * Stores the <a href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ComponentClassResolver.html#canonicalizePageName-java.lang.String-">canonicalized</a>
      * name of the active page for this request.
      * 
      * @param pageName
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/RequestHandler.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestHandler.java
similarity index 91%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/RequestHandler.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestHandler.java
index 9a012c0..54f6f99 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/RequestHandler.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/RequestHandler.java
@@ -12,15 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
-
-import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+package org.apache.tapestry5.http.services;
 
 import java.io.IOException;
 
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+
 /**
  * Service interface for the RequestHandler {@linkplain org.apache.tapestry5.ioc.services.PipelineBuilder pipeline}
- * service. At the end of the pipeline, the service hands off to the {@linkplain org.apache.tapestry5.services.Dispatcher
+ * service. At the end of the pipeline, the service hands off to the {@linkplain org.apache.tapestry5.http.services.Dispatcher
  * master dispatcher service}.
  */
 @UsesOrderedConfiguration(RequestFilter.class)
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Response.java
similarity index 98%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/Response.java
index 7b2795c..074346b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/Response.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Response.java
@@ -10,9 +10,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
-import org.apache.tapestry5.Link;
+import org.apache.tapestry5.http.Link;
 import org.apache.tapestry5.ioc.annotations.IncompatibleChange;
 
 import java.io.IOException;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ResponseCompressionAnalyzer.java
similarity index 86%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/ResponseCompressionAnalyzer.java
index 3518f20..62adc9f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ResponseCompressionAnalyzer.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ResponseCompressionAnalyzer.java
@@ -10,16 +10,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
-import org.apache.tapestry5.ContentType;
-import org.apache.tapestry5.services.assets.CompressionAnalyzer;
+import org.apache.tapestry5.http.ContentType;
 
 /**
  * Used to determine if the client supports GZip compression of the response.
  *
  * @see CompressionAnalyzer
- * @see org.apache.tapestry5.SymbolConstants#GZIP_COMPRESSION_ENABLED
+ * @see org.apache.tapestry5.http.TapestryHttpSymbolConstants#GZIP_COMPRESSION_ENABLED
  * @since 5.1.0.0
  */
 public interface ResponseCompressionAnalyzer
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ServletApplicationInitializer.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ServletApplicationInitializer.java
similarity index 96%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/ServletApplicationInitializer.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/ServletApplicationInitializer.java
index af3b65d..f423205 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ServletApplicationInitializer.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ServletApplicationInitializer.java
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
-
-import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+package org.apache.tapestry5.http.services;
 
 import javax.servlet.ServletContext;
 
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+
 /**
  * Service interface for initializing a servlet application, as a {@linkplain org.apache.tapestry5.ioc.services.PipelineBuilder
  * pipeline}. The terminator hands off to the {@link org.apache.tapestry5.services.ApplicationInitializer} service.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ServletApplicationInitializerFilter.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ServletApplicationInitializerFilter.java
similarity index 81%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/ServletApplicationInitializerFilter.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/ServletApplicationInitializerFilter.java
index 0004826..762532a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ServletApplicationInitializerFilter.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/ServletApplicationInitializerFilter.java
@@ -12,14 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
 import javax.servlet.ServletContext;
 
 /**
- * Filter interface for {@link org.apache.tapestry5.services.ServletApplicationInitializer}.
+ * Filter interface for {@link org.apache.tapestry5.http.services.ServletApplicationInitializer}.
  *
- * @see org.apache.tapestry5.services.ServletApplicationInitializer
+ * @see org.apache.tapestry5.http.services.ServletApplicationInitializer
  */
 public interface ServletApplicationInitializerFilter
 {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/Session.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Session.java
similarity index 90%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/Session.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/Session.java
index 5d0fa3a..70019a1 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/Session.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/Session.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2008 The Apache Software Foundation
+// Copyright 2006, 2008, 2020 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -12,15 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
-import javax.servlet.http.HttpSession;
+import java.util.List;
 
-import org.apache.tapestry5.OptimizedSessionPersistedObject;
-import org.apache.tapestry5.annotations.ImmutableSessionPersistedObject;
-import org.apache.tapestry5.internal.services.OptimizedSessionPersistedObjectAnalyzer;
+import javax.servlet.http.HttpSession;
 
-import java.util.List;
+import org.apache.tapestry5.http.OptimizedSessionPersistedObject;
+import org.apache.tapestry5.http.annotations.ImmutableSessionPersistedObject;
+import org.apache.tapestry5.http.internal.services.OptimizedSessionPersistedObjectAnalyzer;
 
 /**
  * Generic version of {@link HttpSession}, used to bridge the gaps between the Servlet API and the Portlet API.
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/SessionPersistedObjectAnalyzer.java b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/SessionPersistedObjectAnalyzer.java
similarity index 94%
rename from tapestry-core/src/main/java/org/apache/tapestry5/services/SessionPersistedObjectAnalyzer.java
rename to tapestry-http/src/main/java/org/apache/tapestry5/http/services/SessionPersistedObjectAnalyzer.java
index 25c7ee0..8cc0e06 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/SessionPersistedObjectAnalyzer.java
+++ b/tapestry-http/src/main/java/org/apache/tapestry5/http/services/SessionPersistedObjectAnalyzer.java
@@ -10,7 +10,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.services;
+package org.apache.tapestry5.http.services;
 
 import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
 
@@ -26,7 +26,7 @@ import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration;
  * injected using the {@link org.apache.tapestry5.ioc.annotations.Primary} marker annotation.
  *
  * @see org.apache.tapestry5.annotations.ImmutableSessionPersistedObject
- * @see org.apache.tapestry5.OptimizedSessionPersistedObject
+ * @see org.apache.tapestry5.http.OptimizedSessionPersistedObject
  * @since 5.1.0.0
  */
 @UsesMappedConfiguration(key = Class.class, value = SessionPersistedObjectAnalyzer.class)
diff --git a/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TapestryHttpIntegrationTests.java b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TapestryHttpIntegrationTests.java
new file mode 100644
index 0000000..afee951
--- /dev/null
+++ b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TapestryHttpIntegrationTests.java
@@ -0,0 +1,32 @@
+// Copyright 2020 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES 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.http.test;
+
+import org.apache.tapestry5.test.SeleniumTestCase;
+import org.apache.tapestry5.test.TapestryTestConfiguration;
+import org.testng.annotations.Test;
+
+@Test(singleThreaded = true, groups = "integration")
+@TapestryTestConfiguration(webAppFolder = "src/test/webapp")
+public class TapestryHttpIntegrationTests extends SeleniumTestCase {
+
+    @Test
+    public void testSimpleDispatcher() throws Exception {
+        open("/hello");
+        assertEquals("Return to base URL", getText("//a"));
+        clickAndWait("//a");
+        assertEquals("Hello!", getText("//body/a"));
+    }
+
+}
diff --git a/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestDispatcher.java b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestDispatcher.java
new file mode 100644
index 0000000..e619b14
--- /dev/null
+++ b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestDispatcher.java
@@ -0,0 +1,38 @@
+package org.apache.tapestry5.http.test;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.Response;
+
+public class TestDispatcher implements Dispatcher {
+
+    final private BaseURLSource baseUrlSource;
+    
+    public TestDispatcher(BaseURLSource baseUrlSouce) {
+        super();
+        this.baseUrlSource = baseUrlSouce;
+    }
+
+    @Override
+    public boolean dispatch(Request request, Response response) throws IOException {
+        
+        boolean dispatched = request.getPath().startsWith("/hello");
+        if (dispatched) 
+        {
+            try (OutputStream outputStream = response.getOutputStream("text/html");
+                    PrintWriter writer = new PrintWriter(outputStream);)
+            {
+                writer.append(String.format(
+                        "<html><body>Hello, world! <a href='%s'>Return to base URL</a></body></html>",
+                        baseUrlSource.getBaseURL(request.isSecure())));
+            }
+        }
+        return dispatched;
+    }
+
+}
diff --git a/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestHttpServletRequestFilter.java b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestHttpServletRequestFilter.java
new file mode 100644
index 0000000..1c96b96
--- /dev/null
+++ b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestHttpServletRequestFilter.java
@@ -0,0 +1,25 @@
+package org.apache.tapestry5.http.test;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tapestry5.http.services.HttpServletRequestFilter;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestHttpServletRequestFilter implements HttpServletRequestFilter {
+
+    final private static Logger LOGGER = LoggerFactory.getLogger(TestHttpServletRequestFilter.class);
+    
+    @Override
+    public boolean service(HttpServletRequest request, HttpServletResponse response, HttpServletRequestHandler handler) throws IOException {
+        LOGGER.info("Before: " + request.getServerName() + " : " + new java.util.Date());
+        boolean serviced = handler.service(request, response);
+        LOGGER.info("After: " + request.getServerName() + " : " + new java.util.Date());
+        return serviced;
+    }
+
+}
diff --git a/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestRequestFilter.java b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestRequestFilter.java
new file mode 100644
index 0000000..6520ec4
--- /dev/null
+++ b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/TestRequestFilter.java
@@ -0,0 +1,24 @@
+package org.apache.tapestry5.http.test;
+
+import java.io.IOException;
+
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestRequestFilter implements RequestFilter {
+
+    final private static Logger LOGGER = LoggerFactory.getLogger(TestRequestFilter.class);
+    
+    @Override
+    public boolean service(Request request, Response response, RequestHandler handler) throws IOException {
+        LOGGER.info("Before: " + new java.util.Date());
+        boolean serviced = handler.service(request, response);
+        LOGGER.info("After: " + new java.util.Date());
+        return serviced;
+    }
+
+}
diff --git a/tapestry-http/src/test/java/org/apache/tapestry5/http/test/services/AppModule.java b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/services/AppModule.java
new file mode 100644
index 0000000..f7eab0d
--- /dev/null
+++ b/tapestry-http/src/test/java/org/apache/tapestry5/http/test/services/AppModule.java
@@ -0,0 +1,35 @@
+package org.apache.tapestry5.http.test.services;
+
+import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.HttpServletRequestFilter;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.test.TestDispatcher;
+import org.apache.tapestry5.http.test.TestHttpServletRequestFilter;
+import org.apache.tapestry5.http.test.TestRequestFilter;
+
+public class AppModule {
+
+    public static void contributeMasterDispatcher(OrderedConfiguration<Dispatcher> configuration)
+    {
+        configuration.addInstance("Hello", TestDispatcher.class);
+    }
+    
+    public static void contributeRequestHandler(OrderedConfiguration<RequestFilter> configuration)
+    {
+        configuration.addInstance("Test", TestRequestFilter.class);
+    }
+    
+    public static void contributeHttpServletRequestHandler(OrderedConfiguration<HttpServletRequestFilter> configuration)
+    {
+        configuration.addInstance("Test", TestHttpServletRequestFilter.class);
+    }
+    
+    public static void contributeApplicationDefaults(MappedConfiguration<String, Object> configuration)
+    {
+        configuration.add(TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED, true);
+    }
+
+}
diff --git a/tapestry-http/src/test/webapp/WEB-INF/web.xml b/tapestry-http/src/test/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..408d44b
--- /dev/null
+++ b/tapestry-http/src/test/webapp/WEB-INF/web.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+   Copyright 2006, 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.
+-->
+
+<!DOCTYPE web-app
+        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+        "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+    <display-name>Integration test for tapestry-http</display-name>
+    <context-param>
+        <param-name>tapestry.app-package</param-name>
+        <param-value>org.apache.tapestry5.http.test</param-value>
+    </context-param>
+    <filter>
+        <filter-name>app</filter-name>
+        <filter-class>org.apache.tapestry5.http.TapestryFilter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>app</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+</web-app>
diff --git a/tapestry-http/src/test/webapp/index.html b/tapestry-http/src/test/webapp/index.html
new file mode 100644
index 0000000..ee5d1a0
--- /dev/null
+++ b/tapestry-http/src/test/webapp/index.html
@@ -0,0 +1,7 @@
+<html>
+	<head>
+	</head>
+	<body>
+		<a href="/hello">Hello!</a>
+	</body>
+</html>
\ No newline at end of file
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-http/src/test/webapp/longfile.txt
similarity index 87%
copy from tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
copy to tapestry-http/src/test/webapp/longfile.txt
index 567e055..3e441c1 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++ b/tapestry-http/src/test/webapp/longfile.txt
@@ -12,29 +12,133 @@
 
 package org.apache.tapestry5.modules;
 
-import org.apache.tapestry5.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tapestry5.Asset;
+import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.Block;
+import org.apache.tapestry5.ComponentParameterConstants;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.Field;
+import org.apache.tapestry5.FieldValidationSupport;
+import org.apache.tapestry5.FieldValidator;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.MetaDataConstants;
+import org.apache.tapestry5.NullFieldStrategy;
+import org.apache.tapestry5.PersistenceConstants;
+import org.apache.tapestry5.PropertyOverrides;
+import org.apache.tapestry5.Renderable;
+import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.StreamResponse;
+import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.Translator;
+import org.apache.tapestry5.ValidationDecorator;
+import org.apache.tapestry5.Validator;
+import org.apache.tapestry5.ValueEncoder;
+import org.apache.tapestry5.VersionUtils;
 import org.apache.tapestry5.ajax.MultiZoneUpdate;
 import org.apache.tapestry5.alerts.AlertManager;
-import org.apache.tapestry5.annotations.*;
+import org.apache.tapestry5.annotations.ActivationRequestParameter;
+import org.apache.tapestry5.annotations.BindParameter;
 import org.apache.tapestry5.annotations.ContentType;
+import org.apache.tapestry5.annotations.DiscardAfter;
+import org.apache.tapestry5.annotations.HeartbeatDeferred;
+import org.apache.tapestry5.annotations.Import;
+import org.apache.tapestry5.annotations.Meta;
+import org.apache.tapestry5.annotations.MixinAfter;
+import org.apache.tapestry5.annotations.PageActivationContext;
+import org.apache.tapestry5.annotations.PageAttached;
+import org.apache.tapestry5.annotations.PageDetached;
+import org.apache.tapestry5.annotations.PageLoaded;
+import org.apache.tapestry5.annotations.PageReset;
+import org.apache.tapestry5.annotations.Path;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Secure;
+import org.apache.tapestry5.annotations.Service;
+import org.apache.tapestry5.annotations.SessionAttribute;
+import org.apache.tapestry5.annotations.UnknownActivationContextCheck;
+import org.apache.tapestry5.annotations.WhitelistAccessOnly;
 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.commons.*;
+import org.apache.tapestry5.beanmodel.internal.services.BeanModelSourceImpl;
+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.commons.AnnotationProvider;
+import org.apache.tapestry5.commons.Configuration;
+import org.apache.tapestry5.commons.Location;
+import org.apache.tapestry5.commons.MappedConfiguration;
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.commons.ObjectLocator;
+import org.apache.tapestry5.commons.ObjectProvider;
+import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.commons.Resource;
 import org.apache.tapestry5.commons.internal.BasicDataTypeAnalyzers;
 import org.apache.tapestry5.commons.internal.services.AnnotationDataTypeAnalyzer;
 import org.apache.tapestry5.commons.internal.services.DefaultDataTypeAnalyzer;
 import org.apache.tapestry5.commons.internal.services.StringInterner;
 import org.apache.tapestry5.commons.internal.services.StringInternerImpl;
-import org.apache.tapestry5.commons.services.*;
+import org.apache.tapestry5.commons.services.Coercion;
+import org.apache.tapestry5.commons.services.CoercionTuple;
+import org.apache.tapestry5.commons.services.DataTypeAnalyzer;
+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.TypeCoercer;
 import org.apache.tapestry5.commons.util.AvailableValues;
 import org.apache.tapestry5.commons.util.CollectionFactory;
 import org.apache.tapestry5.commons.util.StrategyRegistry;
 import org.apache.tapestry5.corelib.data.SecureOption;
 import org.apache.tapestry5.grid.GridConstants;
 import org.apache.tapestry5.grid.GridDataSource;
+import org.apache.tapestry5.http.Link;
+import org.apache.tapestry5.http.TapestryHttpSymbolConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants;
+import org.apache.tapestry5.http.internal.TapestryHttpInternalSymbols;
+import org.apache.tapestry5.http.internal.gzip.GZipFilter;
+import org.apache.tapestry5.http.internal.services.ApplicationGlobalsImpl;
+import org.apache.tapestry5.http.internal.services.RequestGlobalsImpl;
+import org.apache.tapestry5.http.internal.services.RequestImpl;
+import org.apache.tapestry5.http.internal.services.ResponseImpl;
+import org.apache.tapestry5.http.internal.services.TapestrySessionFactory;
+import org.apache.tapestry5.http.internal.services.TapestrySessionFactoryImpl;
+import org.apache.tapestry5.http.services.ApplicationGlobals;
+import org.apache.tapestry5.http.services.ApplicationInitializer;
+import org.apache.tapestry5.http.services.ApplicationInitializerFilter;
+import org.apache.tapestry5.http.services.BaseURLSource;
+import org.apache.tapestry5.http.services.Context;
+import org.apache.tapestry5.http.services.Dispatcher;
+import org.apache.tapestry5.http.services.HttpServletRequestFilter;
+import org.apache.tapestry5.http.services.HttpServletRequestHandler;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.http.services.RequestFilter;
+import org.apache.tapestry5.http.services.RequestGlobals;
+import org.apache.tapestry5.http.services.RequestHandler;
+import org.apache.tapestry5.http.services.Response;
+import org.apache.tapestry5.http.services.ServletApplicationInitializer;
+import org.apache.tapestry5.http.services.ServletApplicationInitializerFilter;
+import org.apache.tapestry5.http.services.Session;
 import org.apache.tapestry5.internal.ComponentOverrideImpl;
 import org.apache.tapestry5.internal.DefaultNullFieldStrategy;
 import org.apache.tapestry5.internal.DefaultValueLabelProvider;
@@ -48,12 +152,28 @@ import org.apache.tapestry5.internal.beaneditor.EnvironmentMessages;
 import org.apache.tapestry5.internal.beaneditor.MessagesConstraintGenerator;
 import org.apache.tapestry5.internal.beaneditor.PrimitiveFieldConstraintGenerator;
 import org.apache.tapestry5.internal.beaneditor.ValidateAnnotationConstraintGenerator;
-import org.apache.tapestry5.internal.bindings.*;
+import org.apache.tapestry5.internal.bindings.AssetBindingFactory;
+import org.apache.tapestry5.internal.bindings.BlockBindingFactory;
+import org.apache.tapestry5.internal.bindings.ComponentBindingFactory;
+import org.apache.tapestry5.internal.bindings.ContextBindingFactory;
+import org.apache.tapestry5.internal.bindings.LiteralBindingFactory;
+import org.apache.tapestry5.internal.bindings.MessageBindingFactory;
+import org.apache.tapestry5.internal.bindings.NullFieldStrategyBindingFactory;
+import org.apache.tapestry5.internal.bindings.PropBindingFactory;
+import org.apache.tapestry5.internal.bindings.RenderVariableBindingFactory;
+import org.apache.tapestry5.internal.bindings.SymbolBindingFactory;
+import org.apache.tapestry5.internal.bindings.TranslateBindingFactory;
+import org.apache.tapestry5.internal.bindings.ValidateBindingFactory;
 import org.apache.tapestry5.internal.dynamic.DynamicTemplateParserImpl;
 import org.apache.tapestry5.internal.grid.CollectionGridDataSource;
 import org.apache.tapestry5.internal.grid.NullDataSource;
-import org.apache.tapestry5.internal.gzip.GZipFilter;
-import org.apache.tapestry5.internal.renderers.*;
+import org.apache.tapestry5.internal.renderers.AvailableValuesRenderer;
+import org.apache.tapestry5.internal.renderers.ComponentResourcesRenderer;
+import org.apache.tapestry5.internal.renderers.EventContextRenderer;
+import org.apache.tapestry5.internal.renderers.ListRenderer;
+import org.apache.tapestry5.internal.renderers.LocationRenderer;
+import org.apache.tapestry5.internal.renderers.ObjectArrayRenderer;
+import org.apache.tapestry5.internal.renderers.RequestRenderer;
 import org.apache.tapestry5.internal.services.*;
 import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateFilter;
 import org.apache.tapestry5.internal.services.ajax.AjaxResponseRendererImpl;
@@ -71,7 +191,38 @@ import org.apache.tapestry5.internal.services.security.ClientWhitelistImpl;
 import org.apache.tapestry5.internal.services.security.LocalhostOnly;
 import org.apache.tapestry5.internal.services.templates.DefaultTemplateLocator;
 import org.apache.tapestry5.internal.services.templates.PageTemplateLocator;
-import org.apache.tapestry5.internal.transform.*;
+import org.apache.tapestry5.internal.transform.ActivationRequestParameterWorker;
+import org.apache.tapestry5.internal.transform.ApplicationStateWorker;
+import org.apache.tapestry5.internal.transform.BindParameterWorker;
+import org.apache.tapestry5.internal.transform.CachedWorker;
+import org.apache.tapestry5.internal.transform.ComponentWorker;
+import org.apache.tapestry5.internal.transform.DiscardAfterWorker;
+import org.apache.tapestry5.internal.transform.EnvironmentalWorker;
+import org.apache.tapestry5.internal.transform.HeartbeatDeferredWorker;
+import org.apache.tapestry5.internal.transform.ImportWorker;
+import org.apache.tapestry5.internal.transform.InjectComponentWorker;
... 1392 lines suppressed ...