You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2021/10/30 16:13:19 UTC

[juneau] branch master updated: Rename PojoSwap to ObjectSwap

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

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new a8be46e  Rename PojoSwap to ObjectSwap
a8be46e is described below

commit a8be46e39bfb8a8cf4c8a87a5ac78fb20ea99675
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Sat Oct 30 12:13:01 2021 -0400

    Rename PojoSwap to ObjectSwap
---
 .../java/org/apache/juneau/dto/html5/package.html  |   2 +-
 .../apache/juneau/dto/jsonschema/JsonSchema.java   |  26 +-
 .../apache/juneau/dto/swagger/ui/SwaggerUI.java    |   4 +-
 .../java/org/apache/juneau/jena/RdfParser.java     |   2 +-
 .../org/apache/juneau/jena/RdfParserSession.java   |   4 +-
 .../java/org/apache/juneau/jena/RdfSerializer.java |   2 +-
 .../apache/juneau/jena/RdfSerializerSession.java   |   4 +-
 .../main/java/org/apache/juneau/BeanContext.java   |  68 +-
 .../java/org/apache/juneau/BeanContextable.java    |  20 +-
 .../main/java/org/apache/juneau/BeanFilter.java    |   2 +-
 .../src/main/java/org/apache/juneau/BeanMap.java   |  12 +-
 .../main/java/org/apache/juneau/BeanMapEntry.java  |  10 +-
 .../java/org/apache/juneau/BeanPropertyMeta.java   |  38 +-
 .../main/java/org/apache/juneau/BeanSession.java   |  14 +-
 .../org/apache/juneau/BeanTraverseContext.java     |   2 +-
 .../src/main/java/org/apache/juneau/ClassMeta.java | 116 +--
 .../java/org/apache/juneau/annotation/Bean.java    |   2 +-
 .../apache/juneau/annotation/BeanAnnotation.java   |   2 +-
 .../org/apache/juneau/annotation/BeanConfig.java   |  12 +-
 .../java/org/apache/juneau/annotation/Swap.java    |  14 +-
 .../java/org/apache/juneau/collections/OMap.java   |   8 +-
 .../main/java/org/apache/juneau/csv/CsvParser.java |   2 +-
 .../java/org/apache/juneau/csv/CsvSerializer.java  |   2 +-
 .../org/apache/juneau/html/HtmlDocSerializer.java  |   2 +-
 .../java/org/apache/juneau/html/HtmlParser.java    |   2 +-
 .../org/apache/juneau/html/HtmlParserSession.java  |   4 +-
 .../juneau/html/HtmlSchemaDocSerializer.java       |   2 +-
 .../apache/juneau/html/HtmlSchemaSerializer.java   |   2 +-
 .../org/apache/juneau/html/HtmlSerializer.java     |   2 +-
 .../apache/juneau/html/HtmlSerializerSession.java  |  10 +-
 .../juneau/html/HtmlStrippedDocSerializer.java     |   2 +-
 .../org/apache/juneau/internal/ConverterUtils.java |  10 +-
 .../main/java/org/apache/juneau/jso/JsoParser.java |   2 +-
 .../java/org/apache/juneau/jso/JsoSerializer.java  |   2 +-
 .../java/org/apache/juneau/json/JsonParser.java    |   2 +-
 .../org/apache/juneau/json/JsonParserSession.java  |   4 +-
 .../apache/juneau/json/JsonSchemaSerializer.java   |   2 +-
 .../org/apache/juneau/json/JsonSerializer.java     |   4 +-
 .../apache/juneau/json/JsonSerializerSession.java  |   4 +-
 .../juneau/jsonschema/JsonSchemaGenerator.java     |   2 +-
 .../jsonschema/JsonSchemaGeneratorSession.java     |  10 +-
 .../org/apache/juneau/msgpack/MsgPackParser.java   |   2 +-
 .../juneau/msgpack/MsgPackParserSession.java       |   4 +-
 .../apache/juneau/msgpack/MsgPackSerializer.java   |   2 +-
 .../juneau/msgpack/MsgPackSerializerSession.java   |   4 +-
 .../java/org/apache/juneau/oapi/OpenApiParser.java |   2 +-
 .../apache/juneau/oapi/OpenApiParserSession.java   |   6 +-
 .../org/apache/juneau/oapi/OpenApiSerializer.java  |   2 +-
 .../juneau/oapi/OpenApiSerializerSession.java      |   6 +-
 .../apache/juneau/parser/InputStreamParser.java    |   2 +-
 .../main/java/org/apache/juneau/parser/Parser.java |   8 +-
 .../org/apache/juneau/parser/ParserSession.java    |   6 +-
 .../org/apache/juneau/parser/ReaderParser.java     |   2 +-
 .../apache/juneau/plaintext/PlainTextParser.java   |   6 +-
 .../juneau/plaintext/PlainTextSerializer.java      |   6 +-
 .../juneau/serializer/OutputStreamSerializer.java  |   2 +-
 .../org/apache/juneau/serializer/Serializer.java   |   2 +-
 .../juneau/serializer/SerializerSession.java       |   6 +-
 .../apache/juneau/serializer/WriterSerializer.java |   2 +-
 .../org/apache/juneau/soap/SoapXmlSerializer.java  |   2 +-
 .../juneau/{transform => swap}/AutoListSwap.java   |  14 +-
 .../juneau/{transform => swap}/AutoMapSwap.java    |  14 +-
 .../juneau/{transform => swap}/AutoNumberSwap.java |  14 +-
 .../juneau/{transform => swap}/AutoObjectSwap.java |  14 +-
 .../{transform => swap}/BeanInterceptor.java       |   2 +-
 .../apache/juneau/{transform => swap}/Builder.java |   4 +-
 .../juneau/{transform => swap}/BuilderSwap.java    |  96 +-
 .../juneau/{transform => swap}/DefaultSwaps.java   |  56 +-
 .../apache/juneau/{transform => swap}/MapSwap.java |  10 +-
 .../PojoSwap.java => swap/ObjectSwap.java}         |  46 +-
 .../juneau/{transform => swap}/StringSwap.java     |  10 +-
 .../juneau/{transform => swap}/Surrogate.java      |   6 +-
 .../juneau/{transform => swap}/SurrogateSwap.java  |  16 +-
 .../juneau/{transform => swap}/package-info.java   |   4 +-
 .../{transforms => swaps}/BeanStringSwap.java      |   6 +-
 .../{transforms => swaps}/ByteArraySwap.java       |  16 +-
 .../juneau/{transforms => swaps}/ClassSwap.java    |   8 +-
 .../DefaultingTemporalAccessor.java                |   2 +-
 .../{transforms => swaps}/EnumerationSwap.java     |   8 +-
 .../{transforms => swaps}/InputStreamSwap.java     |  16 +-
 .../juneau/{transforms => swaps}/IteratorSwap.java |   8 +-
 .../juneau/{transforms => swaps}/LocaleSwap.java   |   8 +-
 .../{transforms => swaps}/MatchResultSwap.java     |   8 +-
 .../{transforms => swaps}/ParsedReaderSwap.java    |   8 +-
 .../juneau/{transforms => swaps}/ReaderSwap.java   |   6 +-
 .../StackTraceElementSwap.java                     |  10 +-
 .../{transforms => swaps}/StringFormatSwap.java    |  10 +-
 .../TemporalCalendarSwap.java                      |   8 +-
 .../{transforms => swaps}/TemporalDateSwap.java    |   8 +-
 .../juneau/{transforms => swaps}/TemporalSwap.java |   8 +-
 .../juneau/{transforms => swaps}/TimeZoneSwap.java |   8 +-
 .../XMLGregorianCalendarSwap.java                  |   8 +-
 .../juneau/{transforms => swaps}/ZoneIdSwap.java   |   8 +-
 .../juneau/{transforms => swaps}/package-info.java |   4 +-
 .../main/java/org/apache/juneau/uon/UonParser.java |   2 +-
 .../org/apache/juneau/uon/UonParserSession.java    |   4 +-
 .../java/org/apache/juneau/uon/UonSerializer.java  |   2 +-
 .../apache/juneau/uon/UonSerializerSession.java    |   4 +-
 .../juneau/urlencoding/UrlEncodingParser.java      |   2 +-
 .../urlencoding/UrlEncodingParserSession.java      |   4 +-
 .../juneau/urlencoding/UrlEncodingSerializer.java  |   2 +-
 .../urlencoding/UrlEncodingSerializerSession.java  |   4 +-
 .../main/java/org/apache/juneau/xml/XmlParser.java |   2 +-
 .../org/apache/juneau/xml/XmlParserSession.java    |   4 +-
 .../java/org/apache/juneau/xml/XmlSerializer.java  |   2 +-
 .../apache/juneau/xml/XmlSerializerSession.java    |   4 +-
 juneau-doc/docs/ReleaseNotes/5.0.0.00.html         |   2 +-
 juneau-doc/docs/ReleaseNotes/5.0.0.14.html         |   2 +-
 juneau-doc/docs/ReleaseNotes/5.0.0.29.html         |   4 +-
 juneau-doc/docs/ReleaseNotes/5.0.0.31.html         |   2 +-
 juneau-doc/docs/ReleaseNotes/5.1.0.06.html         |   6 +-
 juneau-doc/docs/ReleaseNotes/5.1.0.13.html         |   2 +-
 juneau-doc/docs/ReleaseNotes/5.2.0.0.html          |   2 +-
 juneau-doc/docs/ReleaseNotes/6.1.0.html            |   8 +-
 juneau-doc/docs/ReleaseNotes/6.4.0.html            |   4 +-
 juneau-doc/docs/ReleaseNotes/7.1.0.html            |   4 +-
 juneau-doc/docs/ReleaseNotes/8.1.0.html            |   8 +-
 juneau-doc/docs/ReleaseNotes/8.2.0.html            |   6 +-
 .../docs/Topics/01.Overview/01.CoreOverview.html   |   4 +-
 .../04.JavaBeansSupport/01.BeanAnnotation.html     |   2 +-
 .../04.JavaBeansSupport/07.PojoBuilders.html       |   4 +-
 .../08.BypassSerialization.html                    |   2 +-
 .../11.ContextsBuildersSessionsPropertyStores.html | 151 ----
 .../01.PojoSwaps.html => 11.Swaps.html}            |  14 +-
 .../11.Swaps/01.DefaultSwaps.html                  | 119 +++
 .../02.AutoSwaps.html}                             |   4 +-
 .../03.PerMediaTypeSwaps.html}                     |  22 +-
 .../04.OneWaySwaps.html}                           |   4 +-
 .../05.SwapAnnotation.html}                        |  12 +-
 .../06.TemplatedSwaps.html}                        |   2 +-
 .../07.SurrogateClasses.html}                      |  16 +-
 ....html => 12.DynamicallyAppliedAnnotations.html} |   0
 .../Topics/02.juneau-marshall/12.Transforms.html   |  73 --
 .../12.Transforms/02.DefaultPojoSwaps.html         | 119 ---
 ...nDictionaries.html => 13.BeanDictionaries.html} |   0
 .../01.BeanSubTypes.html                           |   0
 .../{15.VirtualBeans.html => 14.VirtualBeans.html} |   0
 .../{16.Recursion.html => 15.Recursion.html}       |   0
 ...odels.html => 16.ParsingIntoGenericModels.html} |   0
 ...reams.html => 17.ReadingContinuousStreams.html} |   0
 ...arshallingUris.html => 18.MarshallingUris.html} |   0
 ...onComparison.html => 19.JacksonComparison.html} |   0
 ....PojoCategories.html => 20.PojoCategories.html} |   4 +-
 ...entAssertions.html => 21.FluentAssertions.html} |   0
 .../{23.JsonDetails.html => 22.JsonDetails.html}   |   0
 .../01.JsonMethodology.html                        |   0
 .../02.JsonSerializers.html                        |   0
 .../03.SimplifiedJson.html                         |   0
 .../04.JsonParsers.html                            |   0
 .../05.JsonAnnotation.html                         |   0
 .../06.JsonSchema.html                             |   0
 .../{24.XmlDetails.html => 23.XmlDetails.html}     |   0
 .../01.XmlMethodology.html                         |   0
 .../02.XmlSerializers.html                         |   0
 .../03.XmlParsers.html                             |   0
 .../04.XmlBeanTypeNameAnnotation.html              |   0
 .../05.XmlChildNameAnnotation.html                 |   0
 .../06.XmlFormatAnnotation.html                    |   0
 .../07.XmlNamespaces.html                          |   0
 .../{25.HtmlDetails.html => 24.HtmlDetails.html}   |   0
 .../01.HtmlMethodology.html                        |   0
 .../02.HtmlSerializers.html                        |   0
 .../03.HtmlParsers.html                            |   0
 .../04.HtmlAnnotation.html                         |   0
 .../05.HtmlRenderAnnotation.html                   |   0
 .../06.HtmlDocSerializer.html                      |   0
 .../07.BasicHtmlDocTemplate.html                   |   0
 .../08.HtmlCustomTemplates.html                    |   0
 .../09.HtmlSchema.html                             |   0
 .../{26.UonDetails.html => 25.UonDetails.html}     |   0
 .../01.UonMethodology.html                         |   0
 .../02.UonSerializers.html                         |   0
 .../03.UonParsers.html                             |   0
 ...dingDetails.html => 26.UrlEncodingDetails.html} |   0
 .../01.UrlEncMethodology.html                      |   0
 .../02.UrlEncSerializers.html                      |   0
 .../03.UrlEncParsers.html                          |   0
 .../04.UrlEncodingAnnotation.html                  |   0
 ....MsgPackDetails.html => 27.MsgPackDetails.html} |   0
 .../01.MsgPackSerializers.html                     |   0
 .../02.MsgPackParsers.html                         |   0
 ....OpenApiDetails.html => 28.OpenApiDetails.html} |   0
 .../01.OpenApiMethodology.html                     |   0
 .../02.OpenApiSerializers.html                     |  20 +-
 .../03.OpenApiParsers.html                         |   0
 ...anguage.html => 29.SimpleVariableLanguage.html} |   0
 .../01.SvlVariables.html                           |   0
 .../02.VarResolvers.html                           |   0
 .../03.DefaultVarResolver.html                     |   0
 .../04.SvlOtherNotes.html                          |   0
 ...31.BestPractices.html => 30.BestPractices.html} |   0
 .../docs/Topics/04.juneau-dto/04.DtoSwaggerUi.html |   2 +-
 .../Topics/21.Security/01.SecurityMarshall.html    |   2 +-
 juneau-doc/src/main/javadoc/overview.html          | 975 ++++++++-------------
 juneau-doc/src/main/javadoc/resources/docs.txt     |  20 +-
 .../src/main/javadoc/resources/fragments/toc.html  |  20 +-
 .../org/apache/juneau/examples/rest/TestUtils.java |   2 +-
 .../juneau/examples/rest/RequestEchoResource.java  |   2 +-
 .../juneau-microservice-ftest/pom.xml              |   9 +-
 .../rest/test/client/ThirdPartyProxyResource.java  | 232 ++---
 .../rest/test/client/ThirdPartyProxyTest.java      | 280 +++---
 .../org/apache/juneau/rest/client/RestClient.java  |   2 +-
 .../apache/juneau/rest/mock/MockRestClient.java    |   2 +-
 .../apache/juneau/rest/jaxrs/JuneauProvider.java   |   4 +-
 .../org/apache/juneau/rest/RestContextStats.java   |   2 +-
 .../java/org/apache/juneau/rest/RestOpContext.java |   3 +-
 .../org/apache/juneau/rest/annotation/RestGet.java |   3 +-
 .../org/apache/juneau/rest/annotation/RestOp.java  |   3 +-
 .../apache/juneau/rest/annotation/RestPost.java    |   3 +-
 .../org/apache/juneau/rest/annotation/RestPut.java |   3 +-
 .../juneau/rest/converters/Introspectable.java     |   4 +-
 .../apache/juneau/rest/converters/Traversable.java |   4 +-
 juneau-utest-utils/.gitignore                      |   6 +
 {juneau-utest => juneau-utest-utils}/pom.xml       |  79 +-
 .../org/apache/juneau/testutils/CalendarUtils.java |   0
 .../org/apache/juneau/testutils/Constants.java     |   0
 .../apache/juneau/testutils/MockReaderParser.java  |   0
 .../juneau/testutils/MockReaderParserFunction.java |   0
 .../testutils/MockReaderParserPartFunction.java    |   0
 .../apache/juneau/testutils/MockStreamParser.java  |   0
 .../juneau/testutils/MockStreamParserFunction.java |   0
 .../juneau/testutils/MockStreamSerializer.java     |   0
 .../testutils/MockStreamSerializerFunction.java    |   0
 .../juneau/testutils/MockWriterSerializer.java     |   0
 .../testutils/MockWriterSerializerFunction.java    |   0
 .../MockWriterSerializerPartFunction.java          |   0
 .../org/apache/juneau/testutils/StreamUtils.java   |   0
 .../org/apache/juneau/testutils/TestSupplier.java  |   0
 .../org/apache/juneau/testutils/TestUtils.java     |   0
 .../java/org/apache/juneau/testutils/XmlUtils.java |   4 +-
 .../org/apache/juneau/testutils/pojos/ABean.java   |   0
 .../apache/juneau/testutils/pojos/Constants.java   |   0
 .../testutils/pojos/ImplicitSwappedObject.java     |   6 +-
 .../apache/juneau/testutils/pojos/LargePojo.java   |   0
 .../pojos/PrimitiveAtomicObjectsBean.java          |   0
 .../testutils/pojos/PrimitiveObjectsBean.java      |   0
 .../juneau/testutils/pojos/SwappedObject.java      |   4 +-
 .../juneau/testutils/pojos/SwappedObjectSwap.java  |  10 +-
 .../apache/juneau/testutils/pojos/TestEnum.java    |   0
 .../juneau/testutils/pojos/TestEnumToString.java   |   0
 .../org/apache/juneau/testutils/pojos/TestURI.java |   0
 .../apache/juneau/testutils/pojos/TypedBean.java   |   0
 .../juneau/testutils/pojos/TypedBeanImpl.java      |   0
 .../org/apache/juneau/testutils/pojos/XBeans.java  |   0
 juneau-utest/pom.xml                               |   5 +
 .../java/org/apache/juneau/BeanConfigTest.java     |   2 +-
 .../test/java/org/apache/juneau/ClassMetaTest.java |  80 +-
 .../java/org/apache/juneau/DynaBeanComboTest.java  |   2 +-
 .../{PojoSwapTest.java => ObjectSwapTest.java}     |   6 +-
 .../apache/juneau/a/rttests/RoundTripMapsTest.java |   2 +-
 .../a/rttests/RoundTripTransformBeansTest.java     |  12 +-
 .../juneau/annotation/BeanAnnotation_Test.java     |   2 +-
 .../annotation/BeanConfigAnnotation_Test.java      |   8 +-
 .../apache/juneau/config/ConfigInterfaceTest.java  | 120 +--
 .../juneau/http/remote/RrpcInterfaceTest.java      | 222 ++---
 .../juneau/jsonschema/JsonSchemaGeneratorTest.java |  12 +-
 .../apache/juneau/pojotools/PojoSearcherTest.java  |   2 +-
 .../rest/annotation/BeanConfig_Swaps_Test.java     |  14 +-
 .../client/RestClient_Config_BeanContext_Test.java |   4 +-
 .../client/RestClient_Config_Context_Test.java     |   4 +-
 .../apache/juneau/transform/AutoListSwapTest.java  |   5 +-
 .../apache/juneau/transform/AutoMapSwapTest.java   |   5 +-
 .../juneau/transform/AutoNumberSwapTest.java       |   5 +-
 .../juneau/transform/AutoObjectSwapTest.java       |   5 +-
 .../org/apache/juneau/transforms/BeanMapTest.java  |   7 +-
 .../apache/juneau/transforms/BuilderComboTest.java |   4 +-
 .../transforms/ByteArrayBase64SwapComboTest.java   |   1 +
 .../apache/juneau/transforms/DefaultSwapsTest.java |  42 +-
 .../juneau/transforms/EnumerationSwapTest.java     |   1 +
 .../transforms/InputStreamBase64SwapTest.java      |   3 +-
 .../apache/juneau/transforms/IteratorSwapTest.java |   1 +
 .../apache/juneau/transforms/LocaleSwapTest.java   |   3 +-
 .../{PojoSwapTest.java => ObjectSwapTest.java}     |  12 +-
 .../juneau/transforms/OneWayStringSwapTest.java    |   2 +-
 .../apache/juneau/transforms/ReaderFilterTest.java |   1 +
 .../juneau/transforms/ReaderObjectSwapTest.java    |  10 +-
 .../apache/juneau/transforms/ReaderSwapTest.java   |   3 +-
 .../juneau/transforms/RoundTripStringSwapTest.java |   2 +-
 .../transforms/SwapsAnnotationComboTest.java       |  36 +-
 .../transforms/TemporalCalendarSwapTest.java       |   3 +-
 .../juneau/transforms/TemporalDateSwapTest.java    |   3 +-
 .../apache/juneau/transforms/TemporalSwapTest.java |   3 +-
 .../org/apache/juneau/utils/PojoQueryTest.java     |   2 +-
 pom.xml                                            |   1 +
 284 files changed, 1753 insertions(+), 2228 deletions(-)

diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/package.html b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/package.html
index 23b2ed6..0ed4eb2 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/package.html
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/package.html
@@ -337,7 +337,7 @@
 	}
 		</p>
 		<p>
-			Refer to {@doc AutoPojoSwaps} 
+			Refer to {@doc AutoSwaps} 
 			for information about defining swap methods on classes.
 		</p>
 	</div>
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
index 37826bb..3456078 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
@@ -24,7 +24,7 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Represents a top-level schema object bean in the JSON-Schema core specification.
@@ -295,14 +295,14 @@ public class JsonSchema {
 	 * <p>
 	 * Serialization method is a no-op.
 	 */
-	public static class JsonTypeOrJsonTypeArraySwap extends PojoSwap<Object,Object> {
+	public static class JsonTypeOrJsonTypeArraySwap extends ObjectSwap<Object,Object> {
 
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Object swap(BeanSession session, Object o) throws SerializeException {
 			return o;
 		}
 
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Object unswap(BeanSession session, Object o, ClassMeta<?> hint) throws ParseException {
 			ClassMeta<?> cm = (
 				o instanceof Collection
@@ -578,14 +578,14 @@ public class JsonSchema {
 	 * <p>
 	 * Serialization method is a no-op.
 	 */
-	public static class JsonSchemaOrSchemaArraySwap extends PojoSwap<Object,Object> {
+	public static class JsonSchemaOrSchemaArraySwap extends ObjectSwap<Object,Object> {
 
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Object swap(BeanSession session, Object o) throws SerializeException {
 			return o;
 		}
 
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Object unswap(BeanSession session, Object o, ClassMeta<?> hint) throws ParseException {
 			ClassMeta<?> cm = (
 				o instanceof Collection
@@ -894,14 +894,14 @@ public class JsonSchema {
 	 * <p>
 	 * Serialization method is a no-op.
 	 */
-	public static class BooleanOrSchemaArraySwap extends PojoSwap<Object,Object> {
+	public static class BooleanOrSchemaArraySwap extends ObjectSwap<Object,Object> {
 
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Object swap(BeanSession session, Object o) throws SerializeException {
 			return o;
 		}
 
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Object unswap(BeanSession session, Object o, ClassMeta<?> hint) throws ParseException {
 			ClassMeta<?> cm = (
 				o instanceof Collection
@@ -1158,14 +1158,14 @@ public class JsonSchema {
 	 * <p>
 	 * Serialization method is a no-op.
 	 */
-	public static class BooleanOrSchemaSwap extends PojoSwap<Object,Object> {
+	public static class BooleanOrSchemaSwap extends ObjectSwap<Object,Object> {
 
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Object swap(BeanSession session, Object o) throws SerializeException {
 			return o;
 		}
 
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Object unswap(BeanSession session, Object o, ClassMeta<?> hint) throws ParseException {
 			ClassMeta<?> cm = (
 				o instanceof Boolean
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
index 4929d5f..193b546 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
@@ -25,12 +25,12 @@ import org.apache.juneau.dto.html5.*;
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Generates a Swagger-UI interface from a Swagger document.
  */
-public class SwaggerUI extends PojoSwap<Swagger,Div> {
+public class SwaggerUI extends ObjectSwap<Swagger,Div> {
 
 	static final FileFinder RESOURCES = FileFinder
 		.create()
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
index 85225da..53b9e86 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -1059,7 +1059,7 @@ public class RdfParser extends ReaderParser implements RdfMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
index 4bf61d0..a69b03a 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
@@ -29,7 +29,7 @@ import org.apache.juneau.http.header.MediaType;
 import org.apache.juneau.httppart.HttpPartSchema;
 import org.apache.juneau.internal.FluentSetters;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.*;
 
 /**
@@ -378,7 +378,7 @@ public class RdfParserSession extends ReaderParserSession {
 
 		if (eType == null)
 			eType = object();
-		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getSwap(this);
+		ObjectSwap<T,Object> swap = (ObjectSwap<T,Object>)eType.getSwap(this);
 		BuilderSwap<T,Object> builder = (BuilderSwap<T,Object>)eType.getBuilderSwap(this);
 		ClassMeta<?> sType = null;
 		if (builder != null)
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
index 573bf18..a8fae3e 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
@@ -1287,7 +1287,7 @@ public class RdfSerializer extends WriterSerializer implements RdfMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
index c779b83..88aca20 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
@@ -31,7 +31,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.jena.annotation.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.VarResolverSession;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -341,7 +341,7 @@ public final class RdfSerializerSession extends WriterSerializerSession {
 			sType = aType;
 
 			// Swap if necessary
-			PojoSwap swap = aType.getSwap(this);
+			ObjectSwap swap = aType.getSwap(this);
 			if (swap != null) {
 				o = swap(swap, o);
 				sType = swap.getSwapClassMeta(this);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index 2b7d41d..71869c7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -37,7 +37,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -2472,8 +2472,8 @@ public class BeanContext extends Context {
 		 * <p>
 		 * Specifies the default locale for serializer and parser sessions when not specified via {@link BeanSession.Builder#locale(Locale)}.
 		 * Typically used for POJO swaps that need to deal with locales such as swaps that convert <l>Date</l> and <l>Calendar</l>
-		 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
-		 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
+		 * objects to strings by accessing it via the session passed into the {@link ObjectSwap#swap(BeanSession, Object)} and
+		 * {@link ObjectSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
 		 *
 		 * <h5 class='section'>Example:</h5>
 		 * <p class='bcode w800'>
@@ -2491,7 +2491,7 @@ public class BeanContext extends Context {
 		 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
 		 * 		.<jsm>create</jsm>()
 		 * 		.locale(Locale.<jsf>UK</jsf>)
-		 * 		.pojoSwaps(MyBeanSwap.<jk>class</jk>)
+		 * 		.swaps(MyBeanSwap.<jk>class</jk>)
 		 * 		.build();
 		 *
 		 * 	<jc>// Define on session-args instead.</jc>
@@ -2963,13 +2963,13 @@ public class BeanContext extends Context {
 		 * <p>
 		 * Multiple swaps can be associated with a single class.
 		 * When multiple swaps are applicable to the same class, the media type pattern defined by
-		 * {@link PojoSwap#forMediaTypes()} or {@link Swap#mediaTypes() @Swap(mediaTypes)} are used to come up with the best match.
+		 * {@link ObjectSwap#forMediaTypes()} or {@link Swap#mediaTypes() @Swap(mediaTypes)} are used to come up with the best match.
 		 *
 		 * <p>
 		 * Values can consist of any of the following types:
 		 * <ul>
-		 * 	<li>Any subclass of {@link PojoSwap}.
-		 * 	<li>Any instance of {@link PojoSwap}.
+		 * 	<li>Any subclass of {@link ObjectSwap}.
+		 * 	<li>Any instance of {@link ObjectSwap}.
 		 * 	<li>Any surrogate class.  A shortcut for defining a {@link SurrogateSwap}.
 		 * 	<li>Any array or collection of the objects above.
 		 * </ul>
@@ -3025,7 +3025,7 @@ public class BeanContext extends Context {
 		 * 	The values to add to this setting.
 		 * 	<br>Values can consist of any of the following types:
 		 * 	<ul>
-		 * 		<li>Any subclass of {@link PojoSwap}.
+		 * 		<li>Any subclass of {@link ObjectSwap}.
 		 * 		<li>Any surrogate class.  A shortcut for defining a {@link SurrogateSwap}.
 		 * 		<li>Any array or collection of the objects above.
 		 * 	</ul>
@@ -3071,8 +3071,8 @@ public class BeanContext extends Context {
 		 * <p>
 		 * Specifies the default time zone for serializer and parser sessions when not specified via {@link BeanSession.Builder#timeZone(TimeZone)}.
 		 * Typically used for POJO swaps that need to deal with timezones such as swaps that convert <l>Date</l> and <l>Calendar</l>
-		 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
-		 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
+		 * objects to strings by accessing it via the session passed into the {@link ObjectSwap#swap(BeanSession, Object)} and
+		 * {@link ObjectSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
 		 *
 		 * <h5 class='section'>Example:</h5>
 		 * <p class='bcode w800'>
@@ -3489,7 +3489,7 @@ public class BeanContext extends Context {
 	private final String[] notBeanPackageNames, notBeanPackagePrefixes;
 	private final BeanRegistry beanRegistry;
 	private final PropertyNamer propertyNamerBean;
-	private final PojoSwap[] swapArray;
+	private final ObjectSwap[] swapArray;
 	private final Class<?>[] notBeanClassesArray;
 	private final ClassMeta<Object> cmObject;  // Reusable ClassMeta that represents general Objects.
 	private final ClassMeta<String> cmString;  // Reusable ClassMeta that represents general Strings.
@@ -3550,21 +3550,21 @@ public class BeanContext extends Context {
 			throw runtimeException(e);
 		}
 
-		LinkedList<PojoSwap<?,?>> _swaps = new LinkedList<>();
+		LinkedList<ObjectSwap<?,?>> _swaps = new LinkedList<>();
 		for (Object o : ofNullable(swaps).orElse(emptyList())) {
 			ClassInfo ci = ClassInfo.of((Class<?>)o);
-			if (ci.isChildOf(PojoSwap.class))
-				_swaps.add(castOrCreate(PojoSwap.class, ci.inner()));
+			if (ci.isChildOf(ObjectSwap.class))
+				_swaps.add(castOrCreate(ObjectSwap.class, ci.inner()));
 			else if (ci.isChildOf(Surrogate.class))
-				_swaps.addAll(SurrogateSwap.findPojoSwaps(ci.inner(), this));
+				_swaps.addAll(SurrogateSwap.findObjectSwaps(ci.inner(), this));
 			else
-				throw runtimeException("Invalid class {0} specified in BeanContext.swaps property.  Must be a subclass of PojoSwap or Surrogate.", ci.inner());
+				throw runtimeException("Invalid class {0} specified in BeanContext.swaps property.  Must be a subclass of ObjectSwap or Surrogate.", ci.inner());
 		}
-		swapArray = _swaps.toArray(new PojoSwap[_swaps.size()]);
+		swapArray = _swaps.toArray(new ObjectSwap[_swaps.size()]);
 
 		cmCache = new ConcurrentHashMap<>();
-		cmCache.put(String.class, new ClassMeta(String.class, this, findPojoSwaps(String.class), findChildPojoSwaps(String.class)));
-		cmCache.put(Object.class, new ClassMeta(Object.class, this, findPojoSwaps(Object.class), findChildPojoSwaps(Object.class)));
+		cmCache.put(String.class, new ClassMeta(String.class, this, findObjectSwaps(String.class), findChildObjectSwaps(String.class)));
+		cmCache.put(Object.class, new ClassMeta(Object.class, this, findObjectSwaps(Object.class), findChildObjectSwaps(Object.class)));
 		cmString = cmCache.get(String.class);
 		cmObject = cmCache.get(Object.class);
 		cmClass = cmCache.get(Class.class);
@@ -3790,7 +3790,7 @@ public class BeanContext extends Context {
 				// Make sure someone didn't already set it while this thread was blocked.
 				cm = cmCache.get(type);
 				if (cm == null)
-					cm = new ClassMeta<>(type, this, findPojoSwaps(type), findChildPojoSwaps(type));
+					cm = new ClassMeta<>(type, this, findObjectSwaps(type), findChildObjectSwaps(type));
 			}
 		}
 		if (waitForInit)
@@ -3875,7 +3875,7 @@ public class BeanContext extends Context {
 			ClassMeta<?> cm = (ClassMeta)o;
 
 			// This classmeta could have been created by a different context.
-			// Need to re-resolve it to pick up PojoSwaps and stuff on this context.
+			// Need to re-resolve it to pick up ObjectSwaps and stuff on this context.
 			if (cm.getBeanContext() == this)
 				return cm;
 			if (cm.isMap())
@@ -4095,43 +4095,43 @@ public class BeanContext extends Context {
 	}
 
 	/**
-	 * Returns the {@link PojoSwap} associated with the specified class, or <jk>null</jk> if there is no POJO swap
+	 * Returns the {@link ObjectSwap} associated with the specified class, or <jk>null</jk> if there is no POJO swap
 	 * associated with the class.
 	 *
 	 * @param <T> The class associated with the swap.
 	 * @param c The class associated with the swap.
 	 * @return The swap associated with the class, or null if there is no association.
 	 */
-	private final <T> PojoSwap[] findPojoSwaps(Class<T> c) {
+	private final <T> ObjectSwap[] findObjectSwaps(Class<T> c) {
 		// Note:  On first
 		if (c != null) {
-			List<PojoSwap> l = new ArrayList<>();
-			for (PojoSwap f : swapArray)
+			List<ObjectSwap> l = new ArrayList<>();
+			for (ObjectSwap f : swapArray)
 				if (f.getNormalClass().isParentOf(c))
 					l.add(f);
-			return l.size() == 0 ? null : l.toArray(new PojoSwap[l.size()]);
+			return l.size() == 0 ? null : l.toArray(new ObjectSwap[l.size()]);
 		}
 		return null;
 	}
 
 	/**
-	 * Checks whether a class has a {@link PojoSwap} associated with it in this bean context.
+	 * Checks whether a class has a {@link ObjectSwap} associated with it in this bean context.
 	 *
 	 * @param c The class to check.
-	 * @return <jk>true</jk> if the specified class or one of its subclasses has a {@link PojoSwap} associated with it.
+	 * @return <jk>true</jk> if the specified class or one of its subclasses has a {@link ObjectSwap} associated with it.
 	 */
-	private final PojoSwap[] findChildPojoSwaps(Class<?> c) {
+	private final ObjectSwap[] findChildObjectSwaps(Class<?> c) {
 		if (c == null || swapArray.length == 0)
 			return null;
-		List<PojoSwap> l = null;
-		for (PojoSwap f : swapArray) {
+		List<ObjectSwap> l = null;
+		for (ObjectSwap f : swapArray) {
 			if (f.getNormalClass().isChildOf(c)) {
 				if (l == null)
 					l = new ArrayList<>();
 				l.add(f);
 			}
 		}
-		return l == null ? null : l.toArray(new PojoSwap[l.size()]);
+		return l == null ? null : l.toArray(new ObjectSwap[l.size()]);
 	}
 
 	/**
@@ -4443,7 +4443,7 @@ public class BeanContext extends Context {
 	 * @return
 	 * 	The list POJO swaps defined.
 	 */
-	public final PojoSwap<?,?>[] getSwaps() {
+	public final ObjectSwap<?,?>[] getSwaps() {
 		return swapArray;
 	}
 
@@ -4576,7 +4576,7 @@ public class BeanContext extends Context {
 			.a("notBeanClasses", notBeanClasses)
 			.a("notBeanPackageNames", notBeanPackageNames)
 			.a("notBeanPackagePrefixes", notBeanPackagePrefixes)
-			.a("pojoSwaps", swaps)
+			.a("swaps", swaps)
 			.a("sortProperties", sortProperties)
 			.a("useEnumNames", useEnumNames)
 			.a("useInterfaceProxies", useInterfaceProxies)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextable.java
index 50eb654..21d6df0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextable.java
@@ -26,7 +26,7 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -2085,8 +2085,8 @@ public abstract class BeanContextable extends Context {
 		 * <p>
 		 * Specifies the default locale for serializer and parser sessions when not specified via {@link BeanSession.Builder#locale(Locale)}.
 		 * Typically used for POJO swaps that need to deal with locales such as swaps that convert <l>Date</l> and <l>Calendar</l>
-		 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
-		 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
+		 * objects to strings by accessing it via the session passed into the {@link ObjectSwap#swap(BeanSession, Object)} and
+		 * {@link ObjectSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
 		 *
 		 * <h5 class='section'>Example:</h5>
 		 * <p class='bcode w800'>
@@ -2104,7 +2104,7 @@ public abstract class BeanContextable extends Context {
 		 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
 		 * 		.<jsm>create</jsm>()
 		 * 		.locale(Locale.<jsf>UK</jsf>)
-		 * 		.pojoSwaps(MyBeanSwap.<jk>class</jk>)
+		 * 		.swaps(MyBeanSwap.<jk>class</jk>)
 		 * 		.build();
 		 *
 		 * 	<jc>// Define on session-args instead.</jc>
@@ -2524,13 +2524,13 @@ public abstract class BeanContextable extends Context {
 		 * <p>
 		 * Multiple swaps can be associated with a single class.
 		 * When multiple swaps are applicable to the same class, the media type pattern defined by
-		 * {@link PojoSwap#forMediaTypes()} or {@link Swap#mediaTypes() @Swap(mediaTypes)} are used to come up with the best match.
+		 * {@link ObjectSwap#forMediaTypes()} or {@link Swap#mediaTypes() @Swap(mediaTypes)} are used to come up with the best match.
 		 *
 		 * <p>
 		 * Values can consist of any of the following types:
 		 * <ul>
-		 * 	<li>Any subclass of {@link PojoSwap}.
-		 * 	<li>Any instance of {@link PojoSwap}.
+		 * 	<li>Any subclass of {@link ObjectSwap}.
+		 * 	<li>Any instance of {@link ObjectSwap}.
 		 * 	<li>Any surrogate class.  A shortcut for defining a {@link SurrogateSwap}.
 		 * 	<li>Any array or collection of the objects above.
 		 * </ul>
@@ -2590,7 +2590,7 @@ public abstract class BeanContextable extends Context {
 		 * 	The values to add to this setting.
 		 * 	<br>Values can consist of any of the following types:
 		 * 	<ul>
-		 * 		<li>Any subclass of {@link PojoSwap}.
+		 * 		<li>Any subclass of {@link ObjectSwap}.
 		 * 		<li>Any surrogate class.  A shortcut for defining a {@link SurrogateSwap}.
 		 * 		<li>Any array or collection of the objects above.
 		 * 	</ul>
@@ -2608,8 +2608,8 @@ public abstract class BeanContextable extends Context {
 		 * <p>
 		 * Specifies the default time zone for serializer and parser sessions when not specified via {@link BeanSession.Builder#timeZone(TimeZone)}.
 		 * Typically used for POJO swaps that need to deal with timezones such as swaps that convert <l>Date</l> and <l>Calendar</l>
-		 * objects to strings by accessing it via the session passed into the {@link PojoSwap#swap(BeanSession, Object)} and
-		 * {@link PojoSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
+		 * objects to strings by accessing it via the session passed into the {@link ObjectSwap#swap(BeanSession, Object)} and
+		 * {@link ObjectSwap#unswap(BeanSession, Object, ClassMeta, String)} methods.
 		 *
 		 * <h5 class='section'>Example:</h5>
 		 * <p class='bcode w800'>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
index 11e5ad4..8a2172e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
@@ -20,7 +20,7 @@ import static org.apache.juneau.internal.StringUtils.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Parent class for all bean filters.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
index 4657f25..f9fac0f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
@@ -24,7 +24,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -53,7 +53,7 @@ import org.apache.juneau.xml.annotation.*;
  *
  * <h5 class='topic'>POJO swaps</h5>
  *
- * If {@link PojoSwap PojoSwaps} are defined on the class types of the properties of this bean or the bean properties
+ * If {@link ObjectSwap ObjectSwaps} are defined on the class types of the properties of this bean or the bean properties
  * themselves, the {@link #get(Object)} and {@link #put(String, Object)} methods will automatically transform the
  * property value to and from the serialized form.
  *
@@ -204,10 +204,10 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	 * Sets a property on the bean.
 	 *
 	 * <p>
-	 * If there is a {@link PojoSwap} associated with this bean property or bean property type class, then you must pass
+	 * If there is a {@link ObjectSwap} associated with this bean property or bean property type class, then you must pass
 	 * in a transformed value.
 	 * For example, if the bean property type class is a {@link Date} and the bean property has the
-	 * {@link org.apache.juneau.transforms.TemporalDateSwap.IsoInstant} swap associated with it through the
+	 * {@link org.apache.juneau.swaps.TemporalDateSwap.IsoInstant} swap associated with it through the
 	 * {@link Swap#value() @Swap(value)} annotation, the value being passed in must be
 	 * a String containing an ISO8601 date-time string value.
 	 *
@@ -288,10 +288,10 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	 * Gets a property on the bean.
 	 *
 	 * <p>
-	 * If there is a {@link PojoSwap} associated with this bean property or bean property type class, then this method
+	 * If there is a {@link ObjectSwap} associated with this bean property or bean property type class, then this method
 	 * will return the transformed value.
 	 * For example, if the bean property type class is a {@link Date} and the bean property has the
-	 * {@link org.apache.juneau.transforms.TemporalDateSwap.IsoInstant} swap associated with it through the
+	 * {@link org.apache.juneau.swaps.TemporalDateSwap.IsoInstant} swap associated with it through the
 	 * {@link Swap#value() @Swap(value)} annotation, this method will return a String containing an
 	 * ISO8601 date-time string value.
 	 *
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapEntry.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapEntry.java
index 3f3375c..06fa08d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapEntry.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMapEntry.java
@@ -15,7 +15,7 @@ package org.apache.juneau;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Represents a single entry in a bean map.
@@ -68,10 +68,10 @@ public class BeanMapEntry implements Map.Entry<String,Object> {
 	 * Returns the value of this property.
 	 *
 	 * <p>
-	 * If there is a {@link PojoSwap} associated with this bean property or bean property type class, then this method
+	 * If there is a {@link ObjectSwap} associated with this bean property or bean property type class, then this method
 	 * will return the transformed value.
 	 * For example, if the bean property type class is a {@link Date} and the bean property has the
-	 * {@link org.apache.juneau.transforms.TemporalDateSwap.IsoInstant} swap associated with it through the
+	 * {@link org.apache.juneau.swaps.TemporalDateSwap.IsoInstant} swap associated with it through the
 	 * {@link Swap#value() @Swap(value)} annotation, this method will return a String containing an
 	 * ISO8601 date-time string value.
 	 */
@@ -91,10 +91,10 @@ public class BeanMapEntry implements Map.Entry<String,Object> {
 	 * If the property is a bean type {@code X}, then the value can either be an {@code X} or a {@code Map}.
 	 *
 	 * <p>
-	 * If there is a {@link PojoSwap} associated with this bean property or bean property type class, then you must pass
+	 * If there is a {@link ObjectSwap} associated with this bean property or bean property type class, then you must pass
 	 * in a transformed value.
 	 * For example, if the bean property type class is a {@link Date} and the bean property has the
-	 * {@link org.apache.juneau.transforms.TemporalDateSwap.IsoInstant} swap associated with it through the
+	 * {@link org.apache.juneau.swaps.TemporalDateSwap.IsoInstant} swap associated with it through the
 	 * {@link Swap#value() @Swap(value)} annotation, the value being passed in must be a String
 	 * containing an ISO8601 date-time string value.
 	 *
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 2138d3b..94be3ee 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -31,8 +31,8 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swap.*;
+import org.apache.juneau.swaps.*;
 
 /**
  * Contains metadata about a bean property.
@@ -63,7 +63,7 @@ public final class BeanPropertyMeta {
 		typeMeta;                                              // The transformed class type of the bean property.
 
 	private final String[] properties;                        // The value of the @Beanp(properties) annotation.
-	private final PojoSwap swap;                              // PojoSwap defined only via @Beanp annotation.
+	private final ObjectSwap swap;                              // ObjectSwap defined only via @Beanp annotation.
 
 	private final BeanRegistry beanRegistry;
 
@@ -95,7 +95,7 @@ public final class BeanPropertyMeta {
 		boolean isConstructorArg, isUri, isDyna, isDynaGetterMap;
 		ClassMeta<?> rawTypeMeta, typeMeta;
 		String[] properties;
-		PojoSwap swap;
+		ObjectSwap swap;
 		BeanRegistry beanRegistry;
 		Object overrideValue;
 		BeanPropertyMeta delegateFor;
@@ -193,7 +193,7 @@ public final class BeanPropertyMeta {
 						writeOnly = Boolean.valueOf(p.wo());
 				}
 				for (Swap s : bc.getAnnotations(Swap.class, innerField))
-					swap = getPropertyPojoSwap(s);
+					swap = getPropertySwap(s);
 				isUri |= last(bc.getAnnotations(Uri.class, innerField)) != null;
 			}
 
@@ -212,7 +212,7 @@ public final class BeanPropertyMeta {
 						writeOnly = Boolean.valueOf(p.wo());
 				}
 				for (Swap s : bc.getAnnotations(Swap.class, getter))
-					swap = getPropertyPojoSwap(s);
+					swap = getPropertySwap(s);
 			}
 
 			if (setter != null) {
@@ -222,7 +222,7 @@ public final class BeanPropertyMeta {
 				isUri |= (rawTypeMeta.isUri() || bc.hasAnnotation(Uri.class, setter));
 				for (Beanp p : lp) {
 					if (swap == null)
-						swap = getPropertyPojoSwap(p);
+						swap = getPropertySwap(p);
 					if (properties != null && ! p.properties().isEmpty())
 						properties = split(p.properties());
 					bdClasses.a(p.dictionary());
@@ -232,7 +232,7 @@ public final class BeanPropertyMeta {
 						writeOnly = Boolean.valueOf(p.wo());
 				}
 				for (Swap s : bc.getAnnotations(Swap.class, setter))
-					swap = getPropertyPojoSwap(s);
+					swap = getPropertySwap(s);
 			}
 
 			if (rawTypeMeta == null)
@@ -312,21 +312,21 @@ public final class BeanPropertyMeta {
 			return new BeanPropertyMeta(this);
 		}
 
-		private PojoSwap getPropertyPojoSwap(Beanp p) throws Exception {
+		private ObjectSwap getPropertySwap(Beanp p) throws Exception {
 			if (! p.format().isEmpty())
-				return castOrCreate(PojoSwap.class, StringFormatSwap.class, false, p.format());
+				return castOrCreate(ObjectSwap.class, StringFormatSwap.class, false, p.format());
 			return null;
 		}
 
-		private PojoSwap getPropertyPojoSwap(Swap s) throws Exception {
+		private ObjectSwap getPropertySwap(Swap s) throws Exception {
 			Class<?> c = s.value();
 			if (c == Null.class)
 				c = s.impl();
 			if (c == Null.class)
 				return null;
 			ClassInfo ci = ClassInfo.of(c);
-			if (ci.isChildOf(PojoSwap.class)) {
-				PojoSwap ps = castOrCreate(PojoSwap.class, c);
+			if (ci.isChildOf(ObjectSwap.class)) {
+				ObjectSwap ps = castOrCreate(ObjectSwap.class, c);
 				if (ps.forMediaTypes() != null)
 					throw runtimeException("TODO - Media types on swaps not yet supported on bean properties.");
 				if (ps.withTemplate() != null)
@@ -335,7 +335,7 @@ public final class BeanPropertyMeta {
 			}
 			if (ci.isChildOf(Surrogate.class))
 				throw runtimeException("TODO - Surrogate swaps not yet supported on bean properties.");
-			throw runtimeException("Invalid class used in @Swap annotation.  Must be a subclass of PojoSwap or Surrogate. {0}", c);
+			throw runtimeException("Invalid class used in @Swap annotation.  Must be a subclass of ObjectSwap or Surrogate. {0}", c);
 		}
 
 		BeanPropertyMeta.Builder setGetter(Method getter) {
@@ -464,7 +464,7 @@ public final class BeanPropertyMeta {
 	 * Returns the {@link ClassMeta} of the class of this property.
 	 *
 	 * <p>
-	 * If this property or the property type class has a {@link PojoSwap} associated with it, this method returns the
+	 * If this property or the property type class has a {@link ObjectSwap} associated with it, this method returns the
 	 * transformed class meta.
 	 * This matches the class type that is used by the {@link #get(BeanMap,String)} and
 	 * {@link #set(BeanMap,String,Object)} methods.
@@ -1155,8 +1155,8 @@ public final class BeanPropertyMeta {
 			if (o == null)
 				return null;
 			// Otherwise, look it up via bean context.
-			if (rawTypeMeta.hasChildPojoSwaps()) {
-				PojoSwap f = rawTypeMeta.getChildPojoSwapForSwap(o.getClass());
+			if (rawTypeMeta.hasChildSwaps()) {
+				ObjectSwap f = rawTypeMeta.getChildObjectSwapForSwap(o.getClass());
 				if (f != null)
 					return f.swap(session, o);
 			}
@@ -1174,8 +1174,8 @@ public final class BeanPropertyMeta {
 				return swap.unswap(session, o, rawTypeMeta);
 			if (o == null)
 				return null;
-			if (rawTypeMeta.hasChildPojoSwaps()) {
-				PojoSwap f = rawTypeMeta.getChildPojoSwapForUnswap(o.getClass());
+			if (rawTypeMeta.hasChildSwaps()) {
+				ObjectSwap f = rawTypeMeta.getChildObjectSwapForUnswap(o.getClass());
 				if (f != null)
 					return f.unswap(session, o, rawTypeMeta);
 			}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 1591c96..c085f6f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -36,7 +36,7 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link BeanContext}.
@@ -330,19 +330,19 @@ public class BeanSession extends ContextSession {
 	 * 	<tr><th>Convert to type</th><th>Valid input value types</th><th>Notes</th></tr>
 	 * 	<tr>
 	 * 		<td>
-	 * 			A class that is the normal type of a registered {@link PojoSwap}.
+	 * 			A class that is the normal type of a registered {@link ObjectSwap}.
 	 * 		</td>
 	 * 		<td>
-	 * 			A value whose class matches the transformed type of that registered {@link PojoSwap}.
+	 * 			A value whose class matches the transformed type of that registered {@link ObjectSwap}.
 	 * 		</td>
 	 * 		<td>&nbsp;</td>
 	 * 	</tr>
 	 * 	<tr>
 	 * 		<td>
-	 * 			A class that is the transformed type of a registered {@link PojoSwap}.
+	 * 			A class that is the transformed type of a registered {@link ObjectSwap}.
 	 * 		</td>
 	 * 		<td>
-	 * 			A value whose class matches the normal type of that registered {@link PojoSwap}.
+	 * 			A value whose class matches the normal type of that registered {@link ObjectSwap}.
 	 * 		</td>
 	 * 		<td>&nbsp;</td>
 	 * 	</tr>
@@ -511,7 +511,7 @@ public class BeanSession extends ContextSession {
 				if (! ((to.isMap() && to.getValueType().isNotObject()) || ((to.isCollection() || to.isOptional()) && to.getElementType().isNotObject())))
 					return (T)value;
 
-			PojoSwap swap = to.getSwap(this);
+			ObjectSwap swap = to.getSwap(this);
 			if (swap != null) {
 				ClassInfo nc = swap.getNormalClass(), fc = swap.getSwapClass();
 				if (nc.isParentOf(tc) && fc.isParentOf(value.getClass()))
@@ -1682,7 +1682,7 @@ public class BeanSession extends ContextSession {
 	 * @return
 	 * 	The list POJO swaps defined.
 	 */
-	public final PojoSwap<?,?>[] getSwaps() {
+	public final ObjectSwap<?,?>[] getSwaps() {
 		return ctx.getSwaps();
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseContext.java
index b649822..9be4f25 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseContext.java
@@ -373,7 +373,7 @@ public abstract class BeanTraverseContext extends BeanContextable {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index 390fe09..1199bad 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -36,7 +36,7 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.reflect.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * A wrapper class around the {@link Class} object that provides cached information about that class.
@@ -89,11 +89,11 @@ public final class ClassMeta<T> implements Type {
 	private final Object primitiveDefault;                  // Default value for primitive type classes.
 	private final Map<String,Method>
 		publicMethods;                                       // All public methods, including static methods.
-	private final PojoSwap<?,?>[] childPojoSwaps;           // Any PojoSwaps where the normal type is a subclass of this class.
-	private final ConcurrentHashMap<Class<?>,PojoSwap<?,?>>
-		childSwapMap,                                        // Maps normal subclasses to PojoSwaps.
-		childUnswapMap;                                      // Maps swap subclasses to PojoSwaps.
-	private final PojoSwap<T,?>[] swaps;                     // The object POJO swaps associated with this bean (if it has any).
+	private final ObjectSwap<?,?>[] childSwaps;              // Any ObjectSwaps where the normal type is a subclass of this class.
+	private final ConcurrentHashMap<Class<?>,ObjectSwap<?,?>>
+		childSwapMap,                                        // Maps normal subclasses to ObjectSwaps.
+		childUnswapMap;                                      // Maps swap subclasses to ObjectSwaps.
+	private final ObjectSwap<T,?>[] swaps;                     // The object POJO swaps associated with this bean (if it has any).
 	private final BuilderSwap<T,?> builderSwap;             // The builder swap associated with this bean (if it has one).
 	private final BeanContext beanContext;                  // The bean context that created this object.
 	private final ClassMeta<?>
@@ -125,19 +125,19 @@ public final class ClassMeta<T> implements Type {
 	 * @param implClass
 	 * 	For interfaces and abstract classes, this represents the "real" class to instantiate.
 	 * 	Can be <jk>null</jk>.
-	 * @param pojoSwap
-	 * 	The {@link PojoSwap} programmatically associated with this class.
+	 * @param swaps
+	 * 	The {@link ObjectSwap} programmatically associated with this class.
 	 * 	Can be <jk>null</jk>.
-	 * @param childPojoSwap
-	 * 	The child {@link PojoSwap PojoSwaps} programmatically associated with this class.
-	 * 	These are the <c>PojoSwaps</c> that have normal classes that are subclasses of this class.
+	 * @param childSwaps
+	 * 	The child {@link ObjectSwap ObjectSwaps} programmatically associated with this class.
+	 * 	These are the <c>ObjectSwaps</c> that have normal classes that are subclasses of this class.
 	 * 	Can be <jk>null</jk>.
 	 * @param delayedInit
 	 * 	Don't call init() in constructor.
 	 * 	Used for delayed initialization when the possibility of class reference loops exist.
 	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
-	ClassMeta(Class<T> innerClass, BeanContext beanContext, PojoSwap<T,?>[] swaps, PojoSwap<?,?>[] childPojoSwaps) {
+	ClassMeta(Class<T> innerClass, BeanContext beanContext, ObjectSwap<T,?>[] swaps, ObjectSwap<?,?>[] childSwaps) {
 		this.innerClass = innerClass;
 		this.info = ClassInfo.of(innerClass);
 		this.beanContext = beanContext;
@@ -149,7 +149,7 @@ public final class ClassMeta<T> implements Type {
 			if (beanContext != null && beanContext.cmCache != null && isCacheable(innerClass))
 				beanContext.cmCache.put(innerClass, this);
 
-			ClassMetaBuilder<T> builder = new ClassMetaBuilder(innerClass, beanContext, swaps, childPojoSwaps);
+			ClassMetaBuilder<T> builder = new ClassMetaBuilder(innerClass, beanContext, swaps, childSwaps);
 
 			this.cc = builder.cc;
 			this.isDelegate = builder.isDelegate;
@@ -160,7 +160,7 @@ public final class ClassMeta<T> implements Type {
 			this.stringConstructor = builder.stringConstructor;
 			this.primitiveDefault = builder.primitiveDefault;
 			this.publicMethods = builder.publicMethods;
-			this.swaps = builder.swaps.isEmpty() ? null : builder.swaps.toArray(new PojoSwap[builder.swaps.size()]);
+			this.swaps = builder.swaps.isEmpty() ? null : builder.swaps.toArray(new ObjectSwap[builder.swaps.size()]);
 			this.builderSwap = builder.builderSwap;
 			this.keyType = builder.keyType;
 			this.valueType = builder.valueType;
@@ -177,7 +177,7 @@ public final class ClassMeta<T> implements Type {
 			this.implClass = builder.implClass;
 			this.childUnswapMap = builder.childUnswapMap;
 			this.childSwapMap = builder.childSwapMap;
-			this.childPojoSwaps = builder.childPojoSwaps;
+			this.childSwaps = builder.childSwaps;
 			this.exampleMethod = builder.exampleMethod;
 			this.exampleField = builder.exampleField;
 			this.example = builder.example;
@@ -223,7 +223,7 @@ public final class ClassMeta<T> implements Type {
 		this.innerClass = mainType.innerClass;
 		this.info = mainType.info;
 		this.implClass = mainType.implClass;
-		this.childPojoSwaps = mainType.childPojoSwaps;
+		this.childSwaps = mainType.childSwaps;
 		this.childSwapMap = mainType.childSwapMap;
 		this.childUnswapMap = mainType.childUnswapMap;
 		this.cc = mainType.cc;
@@ -266,7 +266,7 @@ public final class ClassMeta<T> implements Type {
 		this.info = ClassInfo.of(innerClass);
 		this.args = args;
 		this.implClass = null;
-		this.childPojoSwaps = null;
+		this.childSwaps = null;
 		this.childSwapMap = null;
 		this.childUnswapMap = null;
 		this.cc = ARGS;
@@ -331,12 +331,12 @@ public final class ClassMeta<T> implements Type {
 			dictionaryName = null;
 		Throwable initException = null;
 		BeanMeta beanMeta = null;
-		AList<PojoSwap> swaps = AList.create();
+		AList<ObjectSwap> swaps = AList.create();
 		BuilderSwap builderSwap;
 		InvocationHandler invocationHandler = null;
 		BeanRegistry beanRegistry = null;
-		PojoSwap<?,?>[] childPojoSwaps;
-		ConcurrentHashMap<Class<?>,PojoSwap<?,?>>
+		ObjectSwap<?,?>[] childSwaps;
+		ConcurrentHashMap<Class<?>,ObjectSwap<?,?>>
 			childSwapMap,
 			childUnswapMap;
 		Method exampleMethod;
@@ -344,13 +344,13 @@ public final class ClassMeta<T> implements Type {
 		String example;
 		Mutater<String,T> stringMutater;
 
-		ClassMetaBuilder(Class<T> innerClass, BeanContext beanContext, PojoSwap<T,?>[] swaps, PojoSwap<?,?>[] childPojoSwaps) {
+		ClassMetaBuilder(Class<T> innerClass, BeanContext beanContext, ObjectSwap<T,?>[] swaps, ObjectSwap<?,?>[] childSwaps) {
 			this.innerClass = innerClass;
 			this.beanContext = beanContext;
 			BeanContext bc = beanContext;
 
-			this.childPojoSwaps = childPojoSwaps;
-			if (childPojoSwaps == null) {
+			this.childSwaps = childSwaps;
+			if (childSwaps == null) {
 				this.childSwapMap = null;
 				this.childUnswapMap = null;
 			} else {
@@ -530,7 +530,7 @@ public final class ClassMeta<T> implements Type {
 				this.swaps.a(swaps);
 
 			if (bc != null)
-				this.builderSwap = BuilderSwap.findSwapFromPojoClass(bc, c, bc.getBeanConstructorVisibility(), bc.getBeanMethodVisibility());
+				this.builderSwap = BuilderSwap.findSwapFromObjectClass(bc, c, bc.getBeanConstructorVisibility(), bc.getBeanMethodVisibility());
 
 			findSwaps(this.swaps, bc);
 
@@ -704,13 +704,13 @@ public final class ClassMeta<T> implements Type {
 			return null;
 		}
 
-		private void findSwaps(List<PojoSwap> l, BeanContext bc) {
+		private void findSwaps(List<ObjectSwap> l, BeanContext bc) {
 
 			if (bc != null)
 				for (Swap swap : bc.getAnnotations(Swap.class, innerClass))
-					l.add(createPojoSwap(swap));
+					l.add(createSwap(swap));
 
-			PojoSwap defaultSwap = DefaultSwaps.find(ci);
+			ObjectSwap defaultSwap = DefaultSwaps.find(ci);
 			if (defaultSwap == null)
 				defaultSwap = AutoObjectSwap.find(bc, ci);
 			if (defaultSwap == null)
@@ -723,14 +723,14 @@ public final class ClassMeta<T> implements Type {
 				l.add(defaultSwap);
 		}
 
-		private PojoSwap<T,?> createPojoSwap(Swap s) {
+		private ObjectSwap<T,?> createSwap(Swap s) {
 			Class<?> c = s.value();
 			if (c == Null.class)
 				c = s.impl();
 			ClassInfo ci = ClassInfo.of(c);
 
-			if (ci.isChildOf(PojoSwap.class)) {
-				PojoSwap ps = castOrCreate(PojoSwap.class, c);
+			if (ci.isChildOf(ObjectSwap.class)) {
+				ObjectSwap ps = castOrCreate(ObjectSwap.class, c);
 				if (s.mediaTypes().length > 0)
 					ps.forMediaTypes(MediaType.ofAll(s.mediaTypes()));
 				if (! s.template().isEmpty())
@@ -739,12 +739,12 @@ public final class ClassMeta<T> implements Type {
 			}
 
 			if (ci.isChildOf(Surrogate.class)) {
-				List<SurrogateSwap<?,?>> l = SurrogateSwap.findPojoSwaps(c, beanContext);
+				List<SurrogateSwap<?,?>> l = SurrogateSwap.findObjectSwaps(c, beanContext);
 				if (! l.isEmpty())
-					return (PojoSwap<T,?>)l.iterator().next();
+					return (ObjectSwap<T,?>)l.iterator().next();
 			}
 
-			throw new ClassMetaRuntimeException(c, "Invalid swap class ''{0}'' specified.  Must extend from PojoSwap or Surrogate.", c);
+			throw new ClassMetaRuntimeException(c, "Invalid swap class ''{0}'' specified.  Must extend from ObjectSwap or Surrogate.", c);
 		}
 
 		private ClassMeta<?> findClassMeta(Class<?> c) {
@@ -837,39 +837,39 @@ public final class ClassMeta<T> implements Type {
 	}
 
 	/**
-	 * Returns <jk>true</jk> if this class or any child classes has a {@link PojoSwap} associated with it.
+	 * Returns <jk>true</jk> if this class or any child classes has a {@link ObjectSwap} associated with it.
 	 *
 	 * <p>
 	 * Used when transforming bean properties to prevent having to look up transforms if we know for certain that no
 	 * transforms are associated with a bean property.
 	 *
-	 * @return <jk>true</jk> if this class or any child classes has a {@link PojoSwap} associated with it.
+	 * @return <jk>true</jk> if this class or any child classes has a {@link ObjectSwap} associated with it.
 	 */
-	protected boolean hasChildPojoSwaps() {
-		return childPojoSwaps != null;
+	protected boolean hasChildSwaps() {
+		return childSwaps != null;
 	}
 
 	/**
-	 * Returns the {@link PojoSwap} where the specified class is the same/subclass of the normal class of one of the
+	 * Returns the {@link ObjectSwap} where the specified class is the same/subclass of the normal class of one of the
 	 * child POJO swaps associated with this class.
 	 *
 	 * @param normalClass The normal class being resolved.
-	 * @return The resolved {@link PojoSwap} or <jk>null</jk> if none were found.
+	 * @return The resolved {@link ObjectSwap} or <jk>null</jk> if none were found.
 	 */
-	protected PojoSwap<?,?> getChildPojoSwapForSwap(Class<?> normalClass) {
+	protected ObjectSwap<?,?> getChildObjectSwapForSwap(Class<?> normalClass) {
 		if (childSwapMap != null) {
-			PojoSwap<?,?> s = childSwapMap.get(normalClass);
+			ObjectSwap<?,?> s = childSwapMap.get(normalClass);
 			if (s == null) {
-				for (PojoSwap<?,?> f : childPojoSwaps)
+				for (ObjectSwap<?,?> f : childSwaps)
 					if (s == null && f.getNormalClass().isParentOf(normalClass))
 						s = f;
 				if (s == null)
-					s = PojoSwap.NULL;
-				PojoSwap<?,?> s2 = childSwapMap.putIfAbsent(normalClass, s);
+					s = ObjectSwap.NULL;
+				ObjectSwap<?,?> s2 = childSwapMap.putIfAbsent(normalClass, s);
 				if (s2 != null)
 					s = s2;
 			}
-			if (s == PojoSwap.NULL)
+			if (s == ObjectSwap.NULL)
 				return null;
 			return s;
 		}
@@ -877,26 +877,26 @@ public final class ClassMeta<T> implements Type {
 	}
 
 	/**
-	 * Returns the {@link PojoSwap} where the specified class is the same/subclass of the swap class of one of the child
+	 * Returns the {@link ObjectSwap} where the specified class is the same/subclass of the swap class of one of the child
 	 * POJO swaps associated with this class.
 	 *
 	 * @param swapClass The swap class being resolved.
-	 * @return The resolved {@link PojoSwap} or <jk>null</jk> if none were found.
+	 * @return The resolved {@link ObjectSwap} or <jk>null</jk> if none were found.
 	 */
-	protected PojoSwap<?,?> getChildPojoSwapForUnswap(Class<?> swapClass) {
+	protected ObjectSwap<?,?> getChildObjectSwapForUnswap(Class<?> swapClass) {
 		if (childUnswapMap != null) {
-			PojoSwap<?,?> s = childUnswapMap.get(swapClass);
+			ObjectSwap<?,?> s = childUnswapMap.get(swapClass);
 			if (s == null) {
-				for (PojoSwap<?,?> f : childPojoSwaps)
+				for (ObjectSwap<?,?> f : childSwaps)
 					if (s == null && f.getSwapClass().isParentOf(swapClass))
 						s = f;
 				if (s == null)
-					s = PojoSwap.NULL;
-				PojoSwap<?,?> s2 = childUnswapMap.putIfAbsent(swapClass, s);
+					s = ObjectSwap.NULL;
+				ObjectSwap<?,?> s2 = childUnswapMap.putIfAbsent(swapClass, s);
 				if (s2 != null)
 					s = s2;
 			}
-			if (s == PojoSwap.NULL)
+			if (s == ObjectSwap.NULL)
 				return null;
 			return s;
 		}
@@ -938,7 +938,7 @@ public final class ClassMeta<T> implements Type {
 	}
 
 	/**
-	 * Returns the serialized (swapped) form of this class if there is an {@link PojoSwap} associated with it.
+	 * Returns the serialized (swapped) form of this class if there is an {@link ObjectSwap} associated with it.
 	 *
 	 * @param session
 	 * 	The bean session.
@@ -946,7 +946,7 @@ public final class ClassMeta<T> implements Type {
 	 * @return The serialized class type, or this object if no swap is associated with the class.
 	 */
 	public ClassMeta<?> getSerializedClassMeta(BeanSession session) {
-		PojoSwap<T,?> ps = getSwap(session);
+		ObjectSwap<T,?> ps = getSwap(session);
 		return (ps == null ? this : ps.getSwapClassMeta(session));
 	}
 
@@ -1482,17 +1482,17 @@ public final class ClassMeta<T> implements Type {
 	}
 
 	/**
-	 * Returns the {@link PojoSwap} associated with this class that's the best match for the specified session.
+	 * Returns the {@link ObjectSwap} associated with this class that's the best match for the specified session.
 	 *
 	 * @param session
 	 * 	The current bean session.
 	 * 	<br>If multiple swaps are associated with a class, only the first one with a matching media type will
 	 * 	be returned.
 	 * @return
-	 * 	The {@link PojoSwap} associated with this class, or <jk>null</jk> if there are no POJO swaps associated with
+	 * 	The {@link ObjectSwap} associated with this class, or <jk>null</jk> if there are no POJO swaps associated with
 	 * 	this class.
 	 */
-	public PojoSwap<T,?> getSwap(BeanSession session) {
+	public ObjectSwap<T,?> getSwap(BeanSession session) {
 		if (swaps != null) {
 			int matchQuant = 0, matchIndex = -1;
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
index 61e2d09..0132494 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
@@ -20,7 +20,7 @@ import java.lang.annotation.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Used to tailor how beans get interpreted by the framework.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
index 92e5cec..c590799 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
@@ -21,7 +21,7 @@ import java.lang.annotation.*;
 import org.apache.juneau.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Utility classes and methods for the {@link Bean @Bean} annotation.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
index d009e2f..41b233f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
@@ -22,7 +22,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.header.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Annotation for specifying config properties defined in {@link BeanContext} and {@link BeanTraverseContext}.
@@ -785,15 +785,15 @@ public @interface BeanConfig {
 	 * <p>
 	 * Multiple swaps can be associated with a single class.
 	 * <br>When multiple swaps are applicable to the same class, the media type pattern defined by
-	 * {@link PojoSwap#forMediaTypes()} or {@link Swap#mediaTypes() @Swap(mediaTypes)} are used to come up with the best match.
+	 * {@link ObjectSwap#forMediaTypes()} or {@link Swap#mediaTypes() @Swap(mediaTypes)} are used to come up with the best match.
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jm'>{@link org.apache.juneau.BeanContext.Builder#swaps(Class...)}
-	 * 	<li class='link'>{@doc PojoSwaps}
-	 * 	<li class='link'>{@doc PerMediaTypePojoSwaps}
-	 * 	<li class='link'>{@doc OneWayPojoSwaps}
+	 * 	<li class='link'>{@doc Swaps}
+	 * 	<li class='link'>{@doc PerMediaTypeSwaps}
+	 * 	<li class='link'>{@doc OneWaySwaps}
 	 * 	<li class='link'>{@doc SwapAnnotation}
-	 * 	<li class='link'>{@doc AutoPojoSwaps}
+	 * 	<li class='link'>{@doc AutoSwaps}
 	 * 	<li class='link'>{@doc SurrogateClasses}
 	 * </ul>
 	 */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Swap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Swap.java
index 12f5590..c73efb9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Swap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Swap.java
@@ -17,10 +17,10 @@ import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
- * Associates {@link PojoSwap} and {@link Surrogate} classes with POJOs and bean properties.
+ * Associates {@link ObjectSwap} and {@link Surrogate} classes with POJOs and bean properties.
  *
  * <p>
  * Can be used in the following locations:
@@ -43,7 +43,7 @@ import org.apache.juneau.transform.*;
 public @interface Swap {
 
 	/**
-	 * The {@link PojoSwap} and {@link Surrogate} class.
+	 * The {@link ObjectSwap} and {@link Surrogate} class.
 	 *
 	 * <p>
 	 * A synonym for {@link #value()}.
@@ -60,7 +60,7 @@ public @interface Swap {
 	 * 	<ja>@Swap</ja>(impl=ToStringSwap.<jk>class</jk>, mediaTypes=<js>"&#42;/json"</js>)
 	 * 	<jk>public class</jk> MyBean { ... }
 	 *
-	 * 	<jk>public class</jk> ToStringSwap <jk>extends</jk> PojoSwap&lt;Object,String&gt; {
+	 * 	<jk>public class</jk> ToStringSwap <jk>extends</jk> ObjectSwap&lt;Object,String&gt; {
 	 * 			<jk>public</jk> String swap(BeanSession session, Object o) <jk>throws</jk> Exception {
 	 * 				<jk>return</jk> o.toString();
 	 * 			}
@@ -68,7 +68,7 @@ public @interface Swap {
 	 * </p>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='link'>{@doc PerMediaTypePojoSwaps}
+	 * 	<li class='link'>{@doc PerMediaTypeSwaps}
 	 * </ul>
 	 */
 	String[] mediaTypes() default {};
@@ -184,7 +184,7 @@ public @interface Swap {
 	 *
 	 * <p class='bcode w800'>
 	 * 	<jc>// Our templated swap class.</jc>
-	 * 	<jk>public class</jk> FreeMarkerSwap <jk>extends</jk> PojoSwap&lt;Object,Reader&gt; {
+	 * 	<jk>public class</jk> FreeMarkerSwap <jk>extends</jk> ObjectSwap&lt;Object,Reader&gt; {
 	 *
 	 * 		<jk>public</jk> MediaType[] forMediaTypes() {
 	 * 			<jk>return</jk> MediaType.<jsm>forStrings</jsm>(<js>"&#42;/html"</js>);
@@ -207,7 +207,7 @@ public @interface Swap {
 	String template() default "";
 
 	/**
-	 * The {@link PojoSwap} and {@link Surrogate} class.
+	 * The {@link ObjectSwap} and {@link Surrogate} class.
 	 *
 	 * <p>
 	 * A synonym for {@link #impl()}.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
index ba258f8..0fdee50 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
@@ -25,7 +25,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -805,18 +805,18 @@ public class OMap extends LinkedHashMap<String,Object> {
 	 * POJO swap.
 	 *
 	 * @param key The key.
-	 * @param pojoSwap The swap class used to convert the raw type to a transformed type.
+	 * @param objectSwap The swap class used to convert the raw type to a transformed type.
 	 * @param <T> The transformed class type.
 	 * @return The value, or <jk>null</jk> if the entry doesn't exist.
 	 * @throws ParseException Malformed input encountered.
 	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
-	public <T> T getSwapped(String key, PojoSwap<T,?> pojoSwap) throws ParseException {
+	public <T> T getSwapped(String key, ObjectSwap<T,?> objectSwap) throws ParseException {
 		try {
 			Object o = super.get(key);
 			if (o == null)
 				return null;
-			PojoSwap swap = pojoSwap;
+			ObjectSwap swap = objectSwap;
 			return (T) swap.unswap(bs(), o, null);
 		} catch (ParseException e) {
 			throw e;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
index df59005..395368e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
@@ -190,7 +190,7 @@ public class CsvParser extends ReaderParser implements CsvMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
index 1bbe285..752a5a1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
@@ -190,7 +190,7 @@ public final class CsvSerializer extends WriterSerializer implements CsvMetaProv
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index 71af642..1985eb0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -885,7 +885,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParser.java
index 8847075..d89fa8a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParser.java
@@ -200,7 +200,7 @@ public class HtmlParser extends XmlParser implements HtmlMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index d0d14ef..0cdc5da 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -31,7 +31,7 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.*;
 
 /**
@@ -242,7 +242,7 @@ public final class HtmlParserSession extends XmlParserSession {
 
 		if (eType == null)
 			eType = (ClassMeta<T>)object();
-		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getSwap(this);
+		ObjectSwap<T,Object> swap = (ObjectSwap<T,Object>)eType.getSwap(this);
 		BuilderSwap<T,Object> builder = (BuilderSwap<T,Object>)eType.getBuilderSwap(this);
 		ClassMeta<?> sType = null;
 		if (builder != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
index 5420a88..8b405ef 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
@@ -361,7 +361,7 @@ public final class HtmlSchemaDocSerializer extends HtmlDocSerializer {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializer.java
index 57a8153..c7bc490 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializer.java
@@ -429,7 +429,7 @@ public class HtmlSchemaSerializer extends HtmlSerializer {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
index b36df40..4b31ff3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
@@ -797,7 +797,7 @@ public class HtmlSerializer extends XmlSerializer implements HtmlMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index c58e9e4..acff9f8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -31,7 +31,7 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -354,7 +354,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 			type = object();
 		else if (type.isDelegate())
 			type = ((Delegate)o).getClassMeta();
-		PojoSwap swap = type.getSwap(this);
+		ObjectSwap swap = type.getSwap(this);
 		if (swap != null) {
 			o = swap(swap, o);
 			type = swap.getSwapClassMeta(this);
@@ -435,7 +435,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 				typeName = aType.getDictionaryName();
 
 			// Swap if necessary
-			PojoSwap swap = aType.getSwap(this);
+			ObjectSwap swap = aType.getSwap(this);
 			if (swap != null) {
 				o = swap(swap, o);
 				sType = swap.getSwapClassMeta(this);
@@ -746,7 +746,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 				ClassMeta<?> cm = getClassMetaForObject(o);
 
 				if (cm != null && cm.getSwap(this) != null) {
-					PojoSwap swap = cm.getSwap(this);
+					ObjectSwap swap = cm.getSwap(this);
 					o = swap(swap, o);
 					cm = swap.getSwapClassMeta(this);
 				}
@@ -900,7 +900,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 
 		ClassMeta<?> cm1 = getClassMetaForObject(o1);
 
-		PojoSwap swap = cm1.getSwap(this);
+		ObjectSwap swap = cm1.getSwap(this);
 		o1 = swap(swap, o1);
 		if (swap != null)
 			cm1 = swap.getSwapClassMeta(this);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
index 6faca5a..53ea0fd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
@@ -202,7 +202,7 @@ public class HtmlStrippedDocSerializer extends HtmlSerializer {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ConverterUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ConverterUtils.java
index 90a84db..a1b5a91 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ConverterUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ConverterUtils.java
@@ -18,7 +18,7 @@ import java.lang.reflect.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Utility class for efficiently converting objects between types.
@@ -32,19 +32,19 @@ import org.apache.juneau.transform.*;
  * 	<tr><th>Convert to type</th><th>Valid input value types</th><th>Notes</th></tr>
  * 	<tr>
  * 		<td>
- * 			A class that is the normal type of a registered {@link PojoSwap}.
+ * 			A class that is the normal type of a registered {@link ObjectSwap}.
  * 		</td>
  * 		<td>
- * 			A value whose class matches the transformed type of that registered {@link PojoSwap}.
+ * 			A value whose class matches the transformed type of that registered {@link ObjectSwap}.
  * 		</td>
  * 		<td>&nbsp;</td>
  * 	</tr>
  * 	<tr>
  * 		<td>
- * 			A class that is the transformed type of a registered {@link PojoSwap}.
+ * 			A class that is the transformed type of a registered {@link ObjectSwap}.
  * 		</td>
  * 		<td>
- * 			A value whose class matches the normal type of that registered {@link PojoSwap}.
+ * 			A value whose class matches the normal type of that registered {@link ObjectSwap}.
  * 		</td>
  * 		<td>&nbsp;</td>
  * 	</tr>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParser.java
index b5c5561..5fa172f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParser.java
@@ -194,7 +194,7 @@ public final class JsoParser extends InputStreamParser implements JsoMetaProvide
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializer.java
index ac08c93..da8aec9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializer.java
@@ -196,7 +196,7 @@ public class JsoSerializer extends OutputStreamSerializer implements JsoMetaProv
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
index faf406e..6405170 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
@@ -341,7 +341,7 @@ public class JsonParser extends ReaderParser implements JsonMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
index d034032..6d1aaba 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
@@ -26,7 +26,7 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link JsonParser}.
@@ -268,7 +268,7 @@ public final class JsonParserSession extends ReaderParserSession {
 
 		if (eType == null)
 			eType = object();
-		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getSwap(this);
+		ObjectSwap<T,Object> swap = (ObjectSwap<T,Object>)eType.getSwap(this);
 		BuilderSwap<T,Object> builder = (BuilderSwap<T,Object>)eType.getBuilderSwap(this);
 		ClassMeta<?> sType = null;
 		if (builder != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
index 07964a4..c4624e3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
@@ -421,7 +421,7 @@ public class JsonSchemaSerializer extends JsonSerializer implements JsonSchemaMe
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
index 076aacd..0ece723 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -64,7 +64,7 @@ import org.apache.juneau.utils.*;
  * <p>
  * The types above are considered "JSON-primitive" object types.
  * Any non-JSON-primitive object types are transformed into JSON-primitive object types through
- * {@link org.apache.juneau.transform.PojoSwap PojoSwaps} associated through the
+ * {@link org.apache.juneau.swap.ObjectSwap ObjectSwaps} associated through the
  * {@link org.apache.juneau.BeanContext.Builder#swaps(Class...)} method.
  * Several default transforms are provided for transforming Dates, Enums, Iterators, etc...
  *
@@ -490,7 +490,7 @@ public class JsonSerializer extends WriterSerializer implements JsonMetaProvider
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
index 89917f3..3e1bad0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerSession.java
@@ -26,7 +26,7 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link JsonSerializer}.
@@ -281,7 +281,7 @@ public class JsonSerializerSession extends WriterSerializerSession {
 		String typeName = getBeanTypeName(this, eType, aType, pMeta);
 
 		// Swap if necessary
-		PojoSwap swap = aType.getSwap(this);
+		ObjectSwap swap = aType.getSwap(this);
 		if (swap != null) {
 			o = swap(swap, o);
 			sType = swap.getSwapClassMeta(this);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
index 1e7b985..7ebde96 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
@@ -502,7 +502,7 @@ public class JsonSchemaGenerator extends BeanTraverseContext implements JsonSche
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
index dda1f23..efbed0d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
@@ -27,7 +27,7 @@ import org.apache.juneau.json.*;
 import org.apache.juneau.jsonschema.annotation.*;
 import org.apache.juneau.parser.ParseException;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link JsonSchemaSerializer}.
@@ -221,7 +221,7 @@ public class JsonSchemaGeneratorSession extends BeanTraverseSession {
 
 		ClassMeta<?> aType;			// The actual type (will be null if recursion occurs)
 		ClassMeta<?> sType;			// The serialized type
-		PojoSwap pojoSwap = eType.getSwap(this);
+		ObjectSwap objectSwap = eType.getSwap(this);
 
 		aType = push(attrName, eType, null);
 
@@ -243,9 +243,9 @@ public class JsonSchemaGeneratorSession extends BeanTraverseSession {
 		}
 
 		JsonSchemaClassMeta jscm = null;
-		ClassMeta pojoSwapCM = pojoSwap == null ? null : getClassMeta(pojoSwap.getClass());
-		if (pojoSwapCM != null && pojoSwapCM.hasAnnotation(Schema.class))
-			jscm = getJsonSchemaClassMeta(pojoSwapCM);
+		ClassMeta objectSwapCM = objectSwap == null ? null : getClassMeta(objectSwap.getClass());
+		if (objectSwapCM != null && objectSwapCM.hasAnnotation(Schema.class))
+			jscm = getJsonSchemaClassMeta(objectSwapCM);
 		if (jscm == null)
 			jscm = getJsonSchemaClassMeta(sType);
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
index 9aa8d14..2dcd2dc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
@@ -232,7 +232,7 @@ public class MsgPackParser extends InputStreamParser implements MsgPackMetaProvi
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
index 01f8576..f9e9c2f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
@@ -25,7 +25,7 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link MsgPackParser}.
@@ -200,7 +200,7 @@ public final class MsgPackParserSession extends InputStreamParserSession {
 
 		if (eType == null)
 			eType = object();
-		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getSwap(this);
+		ObjectSwap<T,Object> swap = (ObjectSwap<T,Object>)eType.getSwap(this);
 		BuilderSwap<T,Object> builder = (BuilderSwap<T,Object>)eType.getBuilderSwap(this);
 		ClassMeta<?> sType = null;
 		if (builder != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
index abd553d..a766df6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
@@ -272,7 +272,7 @@ public class MsgPackSerializer extends OutputStreamSerializer implements MsgPack
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
index b566233..63cdfb4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
@@ -25,7 +25,7 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link MsgPackSerializer}.
@@ -245,7 +245,7 @@ public final class MsgPackSerializerSession extends OutputStreamSerializerSessio
 		String typeName = getBeanTypeName(this, eType, aType, pMeta);
 
 		// Swap if necessary
-		PojoSwap swap = aType.getSwap(this);
+		ObjectSwap swap = aType.getSwap(this);
 		if (swap != null) {
 			o = swap(swap, o);
 			sType = swap.getSwapClassMeta(this);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
index f626392..74674e1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
@@ -314,7 +314,7 @@ public class OpenApiParser extends UonParser implements OpenApiMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
index 69ed72c..84b470a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
@@ -29,8 +29,8 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swap.*;
+import org.apache.juneau.swaps.*;
 import org.apache.juneau.uon.*;
 
 /**
@@ -266,7 +266,7 @@ public class OpenApiParserSession extends UonParserSession {
 			in = schema.getDefault();
 		} else {
 
-			PojoSwap<T,Object> swap = (PojoSwap<T,Object>)type.getSwap(this);
+			ObjectSwap<T,Object> swap = (ObjectSwap<T,Object>)type.getSwap(this);
 			BuilderSwap<T,Object> builder = (BuilderSwap<T,Object>)type.getBuilderSwap(this);
 			ClassMeta<?> sType = null;
 			if (builder != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
index 3d0624d..13cc23c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
@@ -325,7 +325,7 @@ public class OpenApiSerializer extends UonSerializer implements OpenApiMetaProvi
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
index 9ecbab5..01dbeb9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
@@ -32,8 +32,8 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swap.*;
+import org.apache.juneau.swaps.*;
 import org.apache.juneau.uon.*;
 
 /**
@@ -258,7 +258,7 @@ public class OpenApiSerializerSession extends UonSerializerSession {
 			type = object();
 
 		// Swap if necessary
-		PojoSwap swap = type.getSwap(this);
+		ObjectSwap swap = type.getSwap(this);
 		if (swap != null && ! type.isDateOrCalendarOrTemporal()) {
 			value = swap(swap, value);
 			type = swap.getSwapClassMeta(this);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
index 74aff06..20c6b62 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParser.java
@@ -215,7 +215,7 @@ public abstract class InputStreamParser extends Parser {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
index d9b3965..eec6d33 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
@@ -29,8 +29,8 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.msgpack.*;
-import org.apache.juneau.transform.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swap.*;
+import org.apache.juneau.swaps.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.utils.*;
 import org.apache.juneau.xml.*;
@@ -99,7 +99,7 @@ import org.apache.juneau.xml.*;
  * </table>
  *
  * <p>
- * In addition, any class types with {@link PojoSwap PojoSwaps} associated with them on the registered
+ * In addition, any class types with {@link ObjectSwap ObjectSwaps} associated with them on the registered
  * bean context can also be passed in.
  *
  * <p>
@@ -648,7 +648,7 @@ public abstract class Parser extends BeanContextable {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
index 6cd8111..0fa7f96 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
@@ -29,7 +29,7 @@ import org.apache.juneau.collections.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -944,7 +944,7 @@ public abstract class ParserSession extends BeanSession {
 
 		if (type == null)
 			type = (ClassMeta<T>)object();
-		PojoSwap swap = type.getSwap(this);
+		ObjectSwap swap = type.getSwap(this);
 		ClassMeta<?> sType = swap == null ? type : swap.getSwapClassMeta(this);
 
 		Object o = s;
@@ -1080,7 +1080,7 @@ public abstract class ParserSession extends BeanSession {
 	 * @throws ParseException If swap method threw an exception.
 	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
-	protected Object unswap(PojoSwap swap, Object o, ClassMeta<?> eType) throws ParseException {
+	protected Object unswap(ObjectSwap swap, Object o, ClassMeta<?> eType) throws ParseException {
 		try {
 			return swap.unswap(this, o, eType);
 		} catch (Exception e) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
index e8733e1..2dd9545 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
@@ -253,7 +253,7 @@ public abstract class ReaderParser extends Parser {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
index 420321f..ab94bc0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
@@ -22,7 +22,7 @@ import org.apache.juneau.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -43,7 +43,7 @@ import org.apache.juneau.utils.*;
  * through constructors that take a single string argument.
  *
  * <p>
- * Also parses objects using a transform if the object class has an {@link PojoSwap PojoSwap&lt;?,String&gt;} transform
+ * Also parses objects using a transform if the object class has an {@link ObjectSwap ObjectSwap&lt;?,String&gt;} transform
  * defined on it.
  */
 public class PlainTextParser extends ReaderParser implements PlainTextMetaProvider {
@@ -209,7 +209,7 @@ public class PlainTextParser extends ReaderParser implements PlainTextMetaProvid
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
index 2783198..e3b67fd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
@@ -22,7 +22,7 @@ import org.apache.juneau.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -39,7 +39,7 @@ import org.apache.juneau.utils.*;
  * Essentially converts POJOs to plain text using the <c>toString()</c> method.
  *
  * <p>
- * Also serializes objects using a transform if the object class has an {@link PojoSwap PojoSwap&lt;?,String&gt;}
+ * Also serializes objects using a transform if the object class has an {@link ObjectSwap ObjectSwap&lt;?,String&gt;}
  * transform defined on it.
  */
 public class PlainTextSerializer extends WriterSerializer implements PlainTextMetaProvider {
@@ -205,7 +205,7 @@ public class PlainTextSerializer extends WriterSerializer implements PlainTextMe
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
index 09d1a27..d669425 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
@@ -209,7 +209,7 @@ public abstract class OutputStreamSerializer extends Serializer {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
index 5ceddaa..672ce6b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
@@ -901,7 +901,7 @@ public abstract class Serializer extends BeanTraverseContext {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index edb01f4..3a43712 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -32,7 +32,7 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.soap.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Serializer session that lives for the duration of a single use of {@link Serializer}.
@@ -497,7 +497,7 @@ public abstract class SerializerSession extends BeanTraverseSession {
 		try {
 			if (o == null)
 				return null;
-			PojoSwap f = (type == null || type.isObject() || type.isString() ? getClassMeta(o.getClass()).getSwap(this) : type.getSwap(this));
+			ObjectSwap f = (type == null || type.isObject() || type.isString() ? getClassMeta(o.getClass()).getSwap(this) : type.getSwap(this));
 			if (f == null)
 				return o;
 			return f.swap(this, o);
@@ -876,7 +876,7 @@ public abstract class SerializerSession extends BeanTraverseSession {
 	 * @throws SerializeException If swap method threw an exception.
 	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
-	protected Object swap(PojoSwap swap, Object o) throws SerializeException {
+	protected Object swap(ObjectSwap swap, Object o) throws SerializeException {
 		try {
 			if (swap == null)
 				return o;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
index 2d389c9..649a147 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
@@ -463,7 +463,7 @@ public abstract class WriterSerializer extends Serializer {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
index 7441368..88b10c0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
@@ -223,7 +223,7 @@ public class SoapXmlSerializer extends XmlSerializer implements SoapXmlMetaProvi
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoListSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoListSwap.java
similarity index 94%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoListSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoListSwap.java
index 83425c1..6f39415 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoListSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoListSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
 
@@ -25,7 +25,7 @@ import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
 
 /**
- * A dynamic POJO swap based on reflection of a Java class that converts POJOs to Lists.
+ * A dynamic object swap based on reflection of a Java class that converts objects to Lists.
  *
  * <p>
  * Looks for methods on the class that can be called to swap-in surrogate List objects before serialization and swap-out
@@ -73,7 +73,7 @@ import org.apache.juneau.serializer.*;
  *
  * @param <T> The normal class type.
  */
-public class AutoListSwap<T> extends PojoSwap<T,List<?>> {
+public class AutoListSwap<T> extends ObjectSwap<T,List<?>> {
 
 	private static final Set<String>
 		SWAP_METHOD_NAMES = ASet.unmodifiable("toList", "toObjectList", "toOList"),
@@ -84,10 +84,10 @@ public class AutoListSwap<T> extends PojoSwap<T,List<?>> {
 	 *
 	 * @param bc The bean context to use for looking up annotations.
 	 * @param ci The class to try to constructor a dynamic swap on.
-	 * @return A POJO swap instance, or <jk>null</jk> if one could not be created.
+	 * @return An object swap instance, or <jk>null</jk> if one could not be created.
 	 */
 	@SuppressWarnings({ "rawtypes" })
-	public static PojoSwap<?,?> find(BeanContext bc, ClassInfo ci) {
+	public static ObjectSwap<?,?> find(BeanContext bc, ClassInfo ci) {
 
 		if (shouldIgnore(bc, ci))
 			return null;
@@ -161,7 +161,7 @@ public class AutoListSwap<T> extends PojoSwap<T,List<?>> {
 		this.unswapConstructor = unswapConstructor == null ? null : bc.getBeanConstructorVisibility().transform(unswapConstructor.inner());
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public List<?> swap(BeanSession session, Object o) throws SerializeException {
 		try {
 			return (List<?>)swapMethod.invoke(o, getMatchingArgs(swapMethod.getParameterTypes(), session));
@@ -171,7 +171,7 @@ public class AutoListSwap<T> extends PojoSwap<T,List<?>> {
 	}
 
 	@SuppressWarnings("unchecked")
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public T unswap(BeanSession session, List<?> o, ClassMeta<?> hint) throws ParseException {
 		try {
 			if (unswapMethod != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoMapSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoMapSwap.java
similarity index 94%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoMapSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoMapSwap.java
index d5e16ef..fb19f87 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoMapSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoMapSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
 import java.lang.reflect.*;
@@ -24,7 +24,7 @@ import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
 
 /**
- * A dynamic POJO swap based on reflection of a Java class that converts POJOs to serializable Maps.
+ * A dynamic object swap based on reflection of a Java class that converts Objects to serializable Maps.
  *
  * <p>
  * Looks for methods on the class that can be called to swap-in surrogate Map objects before serialization and swap-out
@@ -72,7 +72,7 @@ import org.apache.juneau.serializer.*;
  *
  * @param <T> The normal class type.
  */
-public class AutoMapSwap<T> extends PojoSwap<T,Map<?,?>> {
+public class AutoMapSwap<T> extends ObjectSwap<T,Map<?,?>> {
 
 	private static final Set<String>
 		SWAP_METHOD_NAMES = ASet.unmodifiable("toMap", "toObjectMap", "toOMap"),
@@ -83,10 +83,10 @@ public class AutoMapSwap<T> extends PojoSwap<T,Map<?,?>> {
 	 *
 	 * @param bc The bean context to use for looking up annotations.
 	 * @param ci The class to try to constructor a dynamic swap on.
-	 * @return A POJO swap instance, or <jk>null</jk> if one could not be created.
+	 * @return An object swap instance, or <jk>null</jk> if one could not be created.
 	 */
 	@SuppressWarnings({ "rawtypes" })
-	public static PojoSwap<?,?> find(BeanContext bc, ClassInfo ci) {
+	public static ObjectSwap<?,?> find(BeanContext bc, ClassInfo ci) {
 
 		if (shouldIgnore(bc, ci))
 			return null;
@@ -160,7 +160,7 @@ public class AutoMapSwap<T> extends PojoSwap<T,Map<?,?>> {
 		this.unswapConstructor = unswapConstructor == null ? null : bc.getBeanConstructorVisibility().transform(unswapConstructor.inner());
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Map<?,?> swap(BeanSession session, Object o) throws SerializeException {
 		try {
 			return (Map<?,?>)swapMethod.invoke(o, getMatchingArgs(swapMethod.getParameterTypes(), session));
@@ -170,7 +170,7 @@ public class AutoMapSwap<T> extends PojoSwap<T,Map<?,?>> {
 	}
 
 	@SuppressWarnings("unchecked")
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public T unswap(BeanSession session, Map<?,?> o, ClassMeta<?> hint) throws ParseException {
 		try {
 			if (unswapMethod != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoNumberSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
similarity index 95%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoNumberSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
index 98093bf..ad343ab 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoNumberSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
 
@@ -26,7 +26,7 @@ import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
 
 /**
- * A dynamic POJO swap based on reflection of a Java class that converts POJOs to Number serializable objects.
+ * A dynamic object swap based on reflection of a Java class that converts Objects to Number serializable objects.
  *
  * <p>
  * Looks for methods on the class that can be called to swap-in surrogate Number objects before serialization and swap-out
@@ -96,7 +96,7 @@ import org.apache.juneau.serializer.*;
  *
  * @param <T> The normal class type.
  */
-public class AutoNumberSwap<T> extends PojoSwap<T,Number> {
+public class AutoNumberSwap<T> extends ObjectSwap<T,Number> {
 
 	private static final Set<String>
 		SWAP_METHOD_NAMES = ASet.unmodifiable("toNumber", "toInteger", "toInt", "toLong", "toFloat", "toDouble", "toShort", "toByte"),
@@ -107,10 +107,10 @@ public class AutoNumberSwap<T> extends PojoSwap<T,Number> {
 	 *
 	 * @param bc The bean context to use for looking up annotations.
 	 * @param ci The class to try to constructor a dynamic swap on.
-	 * @return A POJO swap instance, or <jk>null</jk> if one could not be created.
+	 * @return An object swap instance, or <jk>null</jk> if one could not be created.
 	 */
 	@SuppressWarnings({ "rawtypes" })
-	public static PojoSwap<?,?> find(BeanContext bc, ClassInfo ci) {
+	public static ObjectSwap<?,?> find(BeanContext bc, ClassInfo ci) {
 
 		if (shouldIgnore(bc, ci))
 			return null;
@@ -201,7 +201,7 @@ public class AutoNumberSwap<T> extends PojoSwap<T,Number> {
 		this.unswapType = unswapType;
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Number swap(BeanSession session, Object o) throws SerializeException {
 		try {
 			return (Number)swapMethod.invoke(o, getMatchingArgs(swapMethod.getParameterTypes(), session));
@@ -211,7 +211,7 @@ public class AutoNumberSwap<T> extends PojoSwap<T,Number> {
 	}
 
 	@SuppressWarnings("unchecked")
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public T unswap(BeanSession session, Number o, ClassMeta<?> hint) throws ParseException {
 		if (unswapType == null)
 			throw new ParseException("No unparse methodology found for object.");
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoObjectSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoObjectSwap.java
similarity index 94%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoObjectSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoObjectSwap.java
index feb64f0..dfe3b4c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AutoObjectSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoObjectSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
 
@@ -25,7 +25,7 @@ import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
 
 /**
- * A dynamic POJO swap based on reflection of a Java class that converts POJOs to serializable objects.
+ * A dynamic object swap based on reflection of a Java class that converts Objects to serializable objects.
  *
  * <p>
  * Looks for methods on the class that can be called to swap-in surrogate objects before serialization and swap-out
@@ -75,7 +75,7 @@ import org.apache.juneau.serializer.*;
  *
  * @param <T> The normal class type.
  */
-public class AutoObjectSwap<T> extends PojoSwap<T,Object> {
+public class AutoObjectSwap<T> extends ObjectSwap<T,Object> {
 
 	private static final Set<String>
 		SWAP_METHOD_NAMES = ASet.unmodifiable("swap", "toObject"),
@@ -86,10 +86,10 @@ public class AutoObjectSwap<T> extends PojoSwap<T,Object> {
 	 *
 	 * @param bc The bean context to use for looking up annotations.
 	 * @param ci The class to return a swap on.
-	 * @return A POJO swap instance, or <jk>null</jk> if one could not be created.
+	 * @return An object swap instance, or <jk>null</jk> if one could not be created.
 	 */
 	@SuppressWarnings({ "rawtypes" })
-	public static PojoSwap<?,?> find(BeanContext bc, ClassInfo ci) {
+	public static ObjectSwap<?,?> find(BeanContext bc, ClassInfo ci) {
 
 		if (shouldIgnore(bc, ci))
 			return null;
@@ -162,7 +162,7 @@ public class AutoObjectSwap<T> extends PojoSwap<T,Object> {
 		this.unswapConstructor = unswapConstructor == null ? null : bc.getBeanConstructorVisibility().transform(unswapConstructor.inner());
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Object swap(BeanSession session, Object o) throws SerializeException {
 		try {
 			return swapMethod.invoke(o, getMatchingArgs(swapMethod.getParameterTypes(), session));
@@ -172,7 +172,7 @@ public class AutoObjectSwap<T> extends PojoSwap<T,Object> {
 	}
 
 	@SuppressWarnings("unchecked")
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public T unswap(BeanSession session, Object f, ClassMeta<?> hint) throws ParseException {
 		try {
 			if (unswapMethod != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanInterceptor.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BeanInterceptor.java
similarity index 99%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanInterceptor.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BeanInterceptor.java
index 69a0910..59b3e30 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanInterceptor.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BeanInterceptor.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 /**
  * Bean interceptor.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Builder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/Builder.java
similarity index 96%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Builder.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/Builder.java
index 86a8ba5..0659d5c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Builder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/Builder.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 /**
  * Identifies a class as being a builder for a bean class.
@@ -20,7 +20,7 @@ package org.apache.juneau.transform;
  * <br>It's purpose is to identify a class as a builder when it's used on a constructor of the built class.
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc PojoBuilders}
+ * 	<li class='link'>{@doc ObjectBuilders}
  * </ul>
  *
  * @param <T> The type of objects that this builder creates.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BuilderSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
similarity index 66%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BuilderSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
index c630a36..27a5583 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BuilderSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import java.lang.reflect.*;
 
@@ -22,7 +22,7 @@ import org.apache.juneau.reflect.*;
  * Specialized transform for builder classes.
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc PojoBuilders}
+ * 	<li class='link'>{@doc ObjectBuilders}
  * </ul>
  *
  * @param <T> The bean class.
@@ -31,40 +31,40 @@ import org.apache.juneau.reflect.*;
 @SuppressWarnings("unchecked")
 public class BuilderSwap<T,B> {
 
-	private final Class<T> pojoClass;
+	private final Class<T> objectClass;
 	private final Class<B> builderClass;
-	private final Constructor<T> pojoConstructor;          // public Pojo(Builder);
+	private final Constructor<T> objectConstructor;          // public Pojo(Builder);
 	private final Constructor<B> builderConstructor;       // protected Builder();
 	private final MethodInfo createBuilderMethod;          // Builder create();
-	private final MethodInfo createPojoMethod;             // Pojo build();
+	private final MethodInfo createObjectMethod;             // Pojo build();
 	private ClassMeta<?> builderClassMeta;
 
 	/**
 	 * Constructor.
 	 *
-	 * @param pojoClass The POJO class created by the builder class.
+	 * @param objectClass The object class created by the builder class.
 	 * @param builderClass The builder class.
-	 * @param pojoConstructor The POJO constructor that takes in a builder as a parameter.
+	 * @param objectConstructor The object constructor that takes in a builder as a parameter.
 	 * @param builderConstructor The builder no-arg constructor.
-	 * @param createBuilderMethod The static create() method on the POJO class.
-	 * @param createPojoMethod The build() method on the builder class.
+	 * @param createBuilderMethod The static create() method on the object class.
+	 * @param createObjectMethod The build() method on the builder class.
 	 */
-	protected BuilderSwap(Class<T> pojoClass, Class<B> builderClass, Constructor<T> pojoConstructor, Constructor<B> builderConstructor, MethodInfo createBuilderMethod, MethodInfo createPojoMethod) {
-		this.pojoClass = pojoClass;
+	protected BuilderSwap(Class<T> objectClass, Class<B> builderClass, Constructor<T> objectConstructor, Constructor<B> builderConstructor, MethodInfo createBuilderMethod, MethodInfo createObjectMethod) {
+		this.objectClass = objectClass;
 		this.builderClass = builderClass;
-		this.pojoConstructor = pojoConstructor;
+		this.objectConstructor = objectConstructor;
 		this.builderConstructor = builderConstructor;
 		this.createBuilderMethod = createBuilderMethod;
-		this.createPojoMethod = createPojoMethod;
+		this.createObjectMethod = createObjectMethod;
 	}
 
 	/**
-	 * The POJO class.
+	 * The object class.
 	 *
-	 * @return The POJO class.
+	 * @return The object class.
 	 */
-	public Class<T> getPojoClass() {
-		return pojoClass;
+	public Class<T> getObjectClass() {
+		return objectClass;
 	}
 
 	/**
@@ -98,7 +98,7 @@ public class BuilderSwap<T,B> {
 	 *
 	 * @param session The current bean session.
 	 * @param hint A hint about the class type.
-	 * @return A new POJO.
+	 * @return A new object.
 	 * @throws ExecutableException Exception occurred on invoked constructor/method/field.
 	 */
 	public B create(BeanSession session, ClassMeta<?> hint) throws ExecutableException {
@@ -112,19 +112,19 @@ public class BuilderSwap<T,B> {
 	}
 
 	/**
-	 * Creates a new POJO from the specified builder.
+	 * Creates a new object from the specified builder.
 	 *
 	 * @param session The current bean session.
-	 * @param builder The POJO builder.
+	 * @param builder The object builder.
 	 * @param hint A hint about the class type.
-	 * @return A new POJO.
+	 * @return A new object.
 	 * @throws ExecutableException Exception occurred on invoked constructor/method/field.
 	 */
 	public T build(BeanSession session, B builder, ClassMeta<?> hint) throws ExecutableException {
-		if (createPojoMethod != null)
-			return (T)createPojoMethod.invoke(builder);
+		if (createObjectMethod != null)
+			return (T)createObjectMethod.invoke(builder);
 		try {
-			return pojoConstructor.newInstance(builder);
+			return objectConstructor.newInstance(builder);
 		} catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
 			throw new ExecutableException(e);
 		}
@@ -144,23 +144,23 @@ public class BuilderSwap<T,B> {
 		if (bci.isNotPublic())
 			return null;
 
-		Class<?> pojoClass = ClassInfo.of(builderClass).getParameterType(0, Builder.class);
+		Class<?> objectClass = ClassInfo.of(builderClass).getParameterType(0, Builder.class);
 
-		MethodInfo createPojoMethod, createBuilderMethod;
-		ConstructorInfo pojoConstructor;
+		MethodInfo createObjectMethod, createBuilderMethod;
+		ConstructorInfo objectConstructor;
 		ConstructorInfo builderConstructor;
 
-		createPojoMethod = bci.getBuilderBuildMethod();
-		if (createPojoMethod != null)
-			pojoClass = createPojoMethod.getReturnType().inner();
+		createObjectMethod = bci.getBuilderBuildMethod();
+		if (createObjectMethod != null)
+			objectClass = createObjectMethod.getReturnType().inner();
 
-		if (pojoClass == null)
+		if (objectClass == null)
 			return null;
 
-		ClassInfo pci = ClassInfo.of(pojoClass);
+		ClassInfo pci = ClassInfo.of(objectClass);
 
-		pojoConstructor = pci.getConstructor(cVis, builderClass);
-		if (pojoConstructor == null)
+		objectConstructor = pci.getConstructor(cVis, builderClass);
+		if (objectConstructor == null)
 			return null;
 
 		builderConstructor = bci.getNoArgConstructor(cVis);
@@ -168,31 +168,31 @@ public class BuilderSwap<T,B> {
 		if (builderConstructor == null && createBuilderMethod == null)
 			return null;
 
-		return new BuilderSwap(pojoClass, builderClass, pojoConstructor.inner(), builderConstructor == null ? null : builderConstructor.inner(), createBuilderMethod, createPojoMethod);
+		return new BuilderSwap(objectClass, builderClass, objectConstructor.inner(), builderConstructor == null ? null : builderConstructor.inner(), createBuilderMethod, createObjectMethod);
 	}
 
 
 	/**
-	 * Creates a BuilderSwap from the specified POJO class if it has one.
+	 * Creates a BuilderSwap from the specified object class if it has one.
 	 *
 	 * @param bc The bean context to use to look up annotations.
-	 * @param pojoClass The POJO class to check.
+	 * @param objectClass The object class to check.
 	 * @param cVis Minimum constructor visibility.
 	 * @param mVis Minimum method visibility.
 	 * @return A new swap instance, or <jk>null</jk> if class didn't have a builder class.
 	 */
 	@SuppressWarnings("rawtypes")
-	public static BuilderSwap<?,?> findSwapFromPojoClass(BeanContext bc, Class<?> pojoClass, Visibility cVis, Visibility mVis) {
+	public static BuilderSwap<?,?> findSwapFromObjectClass(BeanContext bc, Class<?> objectClass, Visibility cVis, Visibility mVis) {
 		Class<?> builderClass = null;
-		MethodInfo pojoCreateMethod, builderCreateMethod;
-		ConstructorInfo pojoConstructor = null;
+		MethodInfo objectCreateMethod, builderCreateMethod;
+		ConstructorInfo objectConstructor = null;
 		ConstructorInfo builderConstructor;
 
-		for (org.apache.juneau.annotation.Builder b : bc.getAnnotations(org.apache.juneau.annotation.Builder.class, pojoClass))
+		for (org.apache.juneau.annotation.Builder b : bc.getAnnotations(org.apache.juneau.annotation.Builder.class, objectClass))
 			if (b.value() != Null.class)
 				builderClass = b.value();
 
-		ClassInfo pci = ClassInfo.of(pojoClass);
+		ClassInfo pci = ClassInfo.of(objectClass);
 
 		builderCreateMethod = pci.getBuilderCreateMethod();
 
@@ -204,7 +204,7 @@ public class BuilderSwap<T,B> {
 				if (cc.isVisible(cVis) && cc.hasNumParams(1)) {
 					ClassInfo pt = cc.getParamType(0);
 					if (pt.isChildOf(Builder.class)) {
-						pojoConstructor = cc;
+						objectConstructor = cc;
 						builderClass = pt.inner();
 					}
 				}
@@ -219,13 +219,13 @@ public class BuilderSwap<T,B> {
 		if (builderConstructor == null && builderCreateMethod == null)
 			return null;
 
-		pojoCreateMethod = bci.getBuilderBuildMethod();
-		if (pojoConstructor == null)
-			pojoConstructor = pci.getConstructor(cVis, builderClass);
+		objectCreateMethod = bci.getBuilderBuildMethod();
+		if (objectConstructor == null)
+			objectConstructor = pci.getConstructor(cVis, builderClass);
 
-		if (pojoConstructor == null && pojoCreateMethod == null)
+		if (objectConstructor == null && objectCreateMethod == null)
 			return null;
 
-		return new BuilderSwap(pojoClass, builderClass, pojoConstructor == null ? null : pojoConstructor.inner(), builderConstructor == null ? null : builderConstructor.inner(), builderCreateMethod, pojoCreateMethod);
+		return new BuilderSwap(objectClass, builderClass, objectConstructor == null ? null : objectConstructor.inner(), builderConstructor == null ? null : builderConstructor.inner(), builderCreateMethod, objectCreateMethod);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/DefaultSwaps.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/DefaultSwaps.java
similarity index 53%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/DefaultSwaps.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/DefaultSwaps.java
index 143e806..c17a338 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/DefaultSwaps.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/DefaultSwaps.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import java.time.*;
 import java.time.temporal.*;
@@ -21,47 +21,47 @@ import java.util.regex.*;
 import javax.xml.datatype.*;
 
 import org.apache.juneau.reflect.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swaps.*;
 
 /**
- * Maintain the list of default PojoSwaps used by all serializers and parsers.
+ * Maintain the list of default swaps used by all serializers and parsers.
  */
 public class DefaultSwaps {
 
-	private static final Map<Class<?>,PojoSwap<?,?>> POJO_SWAPS = new ConcurrentHashMap<>();
+	private static final Map<Class<?>,ObjectSwap<?,?>> SWAPS = new ConcurrentHashMap<>();
 	static {
-		POJO_SWAPS.put(Enumeration.class, new EnumerationSwap());
-		POJO_SWAPS.put(Iterator.class, new IteratorSwap());
-		POJO_SWAPS.put(Locale.class, new LocaleSwap());
-		POJO_SWAPS.put(Class.class, new ClassSwap());
-		POJO_SWAPS.put(Calendar.class, new TemporalCalendarSwap.IsoOffsetDateTime());
-		POJO_SWAPS.put(Date.class, new TemporalDateSwap.IsoLocalDateTime());
-		POJO_SWAPS.put(Instant.class, new TemporalSwap.IsoInstant());
-		POJO_SWAPS.put(ZonedDateTime.class, new TemporalSwap.IsoOffsetDateTime());
-		POJO_SWAPS.put(LocalDate.class, new TemporalSwap.IsoLocalDate());
-		POJO_SWAPS.put(LocalDateTime.class, new TemporalSwap.IsoLocalDateTime());
-		POJO_SWAPS.put(LocalTime.class, new TemporalSwap.IsoLocalTime());
-		POJO_SWAPS.put(OffsetDateTime.class, new TemporalSwap.IsoOffsetDateTime());
-		POJO_SWAPS.put(OffsetTime.class, new TemporalSwap.IsoOffsetTime());
-		POJO_SWAPS.put(StackTraceElement.class, new StackTraceElementSwap());
-		POJO_SWAPS.put(Year.class, new TemporalSwap.IsoYear());
-		POJO_SWAPS.put(YearMonth.class, new TemporalSwap.IsoYearMonth());
-		POJO_SWAPS.put(Temporal.class, new TemporalSwap.IsoInstant());
-		POJO_SWAPS.put(TimeZone.class, new TimeZoneSwap());
-		POJO_SWAPS.put(XMLGregorianCalendar.class, new XMLGregorianCalendarSwap());
-		POJO_SWAPS.put(ZoneId.class, new ZoneIdSwap());
-		POJO_SWAPS.put(MatchResult.class, new MatchResultSwap());
+		SWAPS.put(Enumeration.class, new EnumerationSwap());
+		SWAPS.put(Iterator.class, new IteratorSwap());
+		SWAPS.put(Locale.class, new LocaleSwap());
+		SWAPS.put(Class.class, new ClassSwap());
+		SWAPS.put(Calendar.class, new TemporalCalendarSwap.IsoOffsetDateTime());
+		SWAPS.put(Date.class, new TemporalDateSwap.IsoLocalDateTime());
+		SWAPS.put(Instant.class, new TemporalSwap.IsoInstant());
+		SWAPS.put(ZonedDateTime.class, new TemporalSwap.IsoOffsetDateTime());
+		SWAPS.put(LocalDate.class, new TemporalSwap.IsoLocalDate());
+		SWAPS.put(LocalDateTime.class, new TemporalSwap.IsoLocalDateTime());
+		SWAPS.put(LocalTime.class, new TemporalSwap.IsoLocalTime());
+		SWAPS.put(OffsetDateTime.class, new TemporalSwap.IsoOffsetDateTime());
+		SWAPS.put(OffsetTime.class, new TemporalSwap.IsoOffsetTime());
+		SWAPS.put(StackTraceElement.class, new StackTraceElementSwap());
+		SWAPS.put(Year.class, new TemporalSwap.IsoYear());
+		SWAPS.put(YearMonth.class, new TemporalSwap.IsoYearMonth());
+		SWAPS.put(Temporal.class, new TemporalSwap.IsoInstant());
+		SWAPS.put(TimeZone.class, new TimeZoneSwap());
+		SWAPS.put(XMLGregorianCalendar.class, new XMLGregorianCalendarSwap());
+		SWAPS.put(ZoneId.class, new ZoneIdSwap());
+		SWAPS.put(MatchResult.class, new MatchResultSwap());
 	}
 
 	/**
-	 * Find the default PojoSwap for the specified class.
+	 * Find the default ObjectSwap for the specified class.
 	 *
 	 * @param ci The class to find the swap for.
 	 * @return The matched swap, or <jk>null</jk> if it couldn't be found.
 	 */
-	public static PojoSwap<?,?> find(ClassInfo ci) {
+	public static ObjectSwap<?,?> find(ClassInfo ci) {
 		for (ClassInfo ci2 : ci.getAllParentsChildFirst()) {
-			PojoSwap<?,?> ps = POJO_SWAPS.get(ci2.inner());
+			ObjectSwap<?,?> ps = SWAPS.get(ci2.inner());
 			if (ps != null)
 				return ps;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/MapSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/MapSwap.java
similarity index 92%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/MapSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/MapSwap.java
index 855abdd..a037c81 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/MapSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/MapSwap.java
@@ -10,13 +10,13 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 
 /**
- * Abstract subclass for POJO swaps that swap objects for object maps.
+ * Abstract subclass for object swaps that swap objects for object maps.
  *
  * <h5 class='section'>Example:</h5>
  * <p class='bcode w800'>
@@ -41,14 +41,14 @@ import org.apache.juneau.collections.*;
  *
  * @param <T> The normal form of the class.
  */
-public abstract class MapSwap<T> extends PojoSwap<T,OMap> {
+public abstract class MapSwap<T> extends ObjectSwap<T,OMap> {
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public OMap swap(BeanSession session, T o) throws Exception {
 		return super.swap(session, o);
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public T unswap(BeanSession session, OMap f, ClassMeta<?> hint) throws Exception {
 		return super.unswap(session, f, hint);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/ObjectSwap.java
similarity index 87%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/ObjectSwap.java
index f054fec..f95cffa 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/ObjectSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
 
@@ -30,8 +30,8 @@ import org.apache.juneau.serializer.*;
  * <h5 class='topic'>Description</h5>
  *
  * <p>
- * <c>PojoSwaps</c> are used to extend the functionality of the serializers and parsers to be able to handle
- * POJOs that aren't automatically handled by the serializers or parsers.
+ * <c>ObjectSwaps</c> are used to extend the functionality of the serializers and parsers to be able to handle
+ * objects that aren't automatically handled by the serializers or parsers.
  * <br>For example, JSON does not have a standard representation for rendering dates.
  * By defining a special {@code Date} swap and associating it with a serializer and parser, you can convert a
  * {@code Date} object to a {@code String} during serialization, and convert that {@code String} object back into a
@@ -41,14 +41,14 @@ import org.apache.juneau.serializer.*;
  * Swaps MUST declare a public no-arg constructor so that the bean context can instantiate them.
  *
  * <p>
- * <c>PojoSwaps</c> are associated with serializers and parsers through the following:
+ * <c>ObjectSwaps</c> are associated with serializers and parsers through the following:
  * <ul class='javatree'>
  * 	<li class='ja'>{@link Swap @Swap}
  * 	<li class='jm'>{@link org.apache.juneau.BeanContext.Builder#swaps(Class...)}
  * </ul>
  *
  * <p>
- * <c>PojoSwaps</c> have two parameters:
+ * <c>ObjectSwaps</c> have two parameters:
  * <ol>
  * 	<li>{@code <T>} - The normal representation of an object.
  * 	<li>{@code <S>} - The swapped representation of an object.
@@ -90,7 +90,7 @@ import org.apache.juneau.serializer.*;
  * The normal object representation of an object.
  *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc PojoSwaps}
+ * 	<li class='link'>{@doc Swaps}
  * 	<li class='link'>{@doc SwapAnnotation}
  * </ul>
  *
@@ -98,19 +98,19 @@ import org.apache.juneau.serializer.*;
  * @param <S> The swapped form of the class.
  */
 @SuppressWarnings({"unchecked","rawtypes"})
-public abstract class PojoSwap<T,S> {
+public abstract class ObjectSwap<T,S> {
 
 	/**
-	 * Represents a non-existent pojo swap.
+	 * Represents a non-existent object swap.
 	 */
-	public static final PojoSwap NULL = new PojoSwap((Class)null, (Class)null) {};
+	public static final ObjectSwap NULL = new ObjectSwap((Class)null, (Class)null) {};
 
 	private final Class<T> normalClass;
 	private final Class<?> swapClass;
 	private final ClassInfo normalClassInfo, swapClassInfo;
 	private ClassMeta<?> swapClassMeta;
 
-	// Unfortunately these cannot be made final because we want to allow for PojoSwaps with no-arg constructors
+	// Unfortunately these cannot be made final because we want to allow for ObjectSwaps with no-arg constructors
 	// which simplifies declarations.
 	private MediaType[] forMediaTypes;
 	private String template;
@@ -118,10 +118,10 @@ public abstract class PojoSwap<T,S> {
 	/**
 	 * Constructor.
 	 */
-	protected PojoSwap() {
+	protected ObjectSwap() {
 		ClassInfo ci = ClassInfo.of(this.getClass());
-		normalClass = (Class<T>)ci.getParameterType(0, PojoSwap.class);
-		swapClass = ci.getParameterType(1, PojoSwap.class);
+		normalClass = (Class<T>)ci.getParameterType(0, ObjectSwap.class);
+		swapClass = ci.getParameterType(1, ObjectSwap.class);
 		normalClassInfo = ClassInfo.of(normalClass);
 		swapClassInfo = ClassInfo.of(swapClass);
 		forMediaTypes = forMediaTypes();
@@ -134,7 +134,7 @@ public abstract class PojoSwap<T,S> {
 	 * @param normalClass The normal class (cannot be serialized).
 	 * @param swapClass The transformed class (serializable).
 	 */
-	protected PojoSwap(Class<T> normalClass, Class<?> swapClass) {
+	protected ObjectSwap(Class<T> normalClass, Class<?> swapClass) {
 		this.normalClass = normalClass;
 		this.swapClass = swapClass;
 		normalClassInfo = ClassInfo.of(normalClass);
@@ -153,7 +153,7 @@ public abstract class PojoSwap<T,S> {
 	 * This method is the programmatic equivalent to the {@link Swap#mediaTypes() @Swap(mediaTypes)} annotation.
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='link'>{@doc PerMediaTypePojoSwaps}
+	 * 	<li class='link'>{@doc PerMediaTypeSwaps}
 	 * </ul>
 	 * @return The media types that this swap is applicable to, or <jk>null</jk> if it's applicable for all media types.
 	 */
@@ -187,13 +187,13 @@ public abstract class PojoSwap<T,S> {
 	 * Sets the media types that this swap is associated with.
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='link'>{@doc PerMediaTypePojoSwaps}
+	 * 	<li class='link'>{@doc PerMediaTypeSwaps}
 	 * </ul>
 	 *
 	 * @param mediaTypes The media types that this swap is associated with.
 	 * @return This object.
 	 */
-	public PojoSwap<T,?> forMediaTypes(MediaType[] mediaTypes) {
+	public ObjectSwap<T,?> forMediaTypes(MediaType[] mediaTypes) {
 		this.forMediaTypes = mediaTypes;
 		return this;
 	}
@@ -208,7 +208,7 @@ public abstract class PojoSwap<T,S> {
 	 * @param template The template string on this swap.
 	 * @return This object.
 	 */
-	public PojoSwap<T,?> withTemplate(String template) {
+	public ObjectSwap<T,?> withTemplate(String template) {
 		this.template = template;
 		return this;
 	}
@@ -219,7 +219,7 @@ public abstract class PojoSwap<T,S> {
 	 * <p>
 	 * Uses the {@link MediaType#match(MediaType, boolean)} method algorithm to produce a number whereby a
 	 * larger value indicates a "better match".
-	 * The idea being that if multiple swaps are associated with a given POJO, we want to pick the best one.
+	 * The idea being that if multiple swaps are associated with a given object, we want to pick the best one.
 	 *
 	 * <p>
 	 * For example, if the session media type is <js>"text/json"</js>, then the match values are shown below:
@@ -249,7 +249,7 @@ public abstract class PojoSwap<T,S> {
 	}
 
 	/**
-	 * If this transform is to be used to serialize non-serializable POJOs, it must implement this method.
+	 * If this transform is to be used to serialize non-serializable objects, it must implement this method.
 	 *
 	 * <p>
 	 * The object must be converted into one of the following serializable types:
@@ -294,11 +294,11 @@ public abstract class PojoSwap<T,S> {
 	 * @throws Exception If a problem occurred trying to convert the output.
 	 */
 	public S swap(BeanSession session, T o, String template) throws Exception {
-		throw new SerializeException("Swap method not implemented on PojoSwap ''{0}''", className(this));
+		throw new SerializeException("Swap method not implemented on ObjectSwap ''{0}''", className(this));
 	}
 
 	/**
-	 * If this transform is to be used to reconstitute POJOs that aren't true Java beans, it must implement this method.
+	 * If this transform is to be used to reconstitute objects that aren't true Java beans, it must implement this method.
 	 *
 	 * @param session
 	 * 	The bean session to use to get the class meta.
@@ -334,7 +334,7 @@ public abstract class PojoSwap<T,S> {
 	 * @throws Exception If a problem occurred trying to convert the output.
 	 */
 	public T unswap(BeanSession session, S f, ClassMeta<?> hint, String template) throws Exception {
-		throw new ParseException("Unswap method not implemented on PojoSwap ''{0}''", className(this));
+		throw new ParseException("Unswap method not implemented on ObjectSwap ''{0}''", className(this));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/StringSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/StringSwap.java
similarity index 93%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/StringSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/StringSwap.java
index 2cb2a9a..d069f5e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/StringSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/StringSwap.java
@@ -10,12 +10,12 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import org.apache.juneau.*;
 
 /**
- * Abstract subclass for POJO swaps that swap objects for strings.
+ * Abstract subclass for object swaps that swap objects for strings.
  *
  * <h5 class='section'>Example:</h5>
  * <p class='bcode w800'>
@@ -40,7 +40,7 @@ import org.apache.juneau.*;
  *
  * @param <T> The normal form of the class.
  */
-public abstract class StringSwap<T> extends PojoSwap<T,String> {
+public abstract class StringSwap<T> extends ObjectSwap<T,String> {
 
 	/**
 	 * Constructor.
@@ -58,12 +58,12 @@ public abstract class StringSwap<T> extends PojoSwap<T,String> {
 		super(normalClass, String.class);
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, T o) throws Exception {
 		return super.swap(session, o);
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public T unswap(BeanSession session, String f, ClassMeta<?> hint) throws Exception {
 		return super.unswap(session, f, hint);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Surrogate.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/Surrogate.java
similarity index 95%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Surrogate.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/Surrogate.java
index 03e58b7..6beb053 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Surrogate.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/Surrogate.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import org.apache.juneau.annotation.*;
 
@@ -67,10 +67,10 @@ import org.apache.juneau.annotation.*;
  * </p>
  *
  * <p>
- * On a side note, a surrogate class is functionally equivalent to the following {@link PojoSwap}
+ * On a side note, a surrogate class is functionally equivalent to the following {@link ObjectSwap}
  * implementation:
  * <p class='bcode w800'>
- * 	<jk>public class</jk> MySurrogate <jk>extends</jk> PojoSwap&lt;NormalClass,MySurrogate&gt; {
+ * 	<jk>public class</jk> MySurrogate <jk>extends</jk> ObjectSwap&lt;NormalClass,MySurrogate&gt; {
  * 		<jk>public</jk> MySurrogate swap(NormalClass o) <jk>throws</jk> SerializeException {
  * 			<jk>return new</jk> MySurrogate(o);
  * 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
similarity index 88%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
index f63d408..85d0a18 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transform;
+package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
 
@@ -24,12 +24,12 @@ import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
 
 /**
- * Specialized {@link PojoSwap} for {@link Surrogate} classes.
+ * Specialized {@link ObjectSwap} for {@link Surrogate} classes.
  *
  * @param <T> The class type that this transform applies to.
  * @param <F> The transformed class type.
  */
-public class SurrogateSwap<T,F> extends PojoSwap<T,F> {
+public class SurrogateSwap<T,F> extends ObjectSwap<T,F> {
 
 	private Constructor<F> constructor;   // public F(T t);
 	private Method unswapMethod;        // public T build();
@@ -48,7 +48,7 @@ public class SurrogateSwap<T,F> extends PojoSwap<T,F> {
 	}
 
 	/**
-	 * Given the specified surrogate class, return the list of POJO swaps.
+	 * Given the specified surrogate class, return the list of object swaps.
 	 *
 	 * <p>
 	 * A transform is returned for each public 1-arg constructor found.
@@ -56,10 +56,10 @@ public class SurrogateSwap<T,F> extends PojoSwap<T,F> {
 	 *
 	 * @param c The surrogate class.
 	 * @param bc The bean context to use for looking up annotations.
-	 * @return The list of POJO swaps that apply to this class.
+	 * @return The list of object swaps that apply to this class.
 	 */
 	@SuppressWarnings({"unchecked", "rawtypes"})
-	public static List<SurrogateSwap<?,?>> findPojoSwaps(Class<?> c, BeanContext bc) {
+	public static List<SurrogateSwap<?,?>> findObjectSwaps(Class<?> c, BeanContext bc) {
 		List<SurrogateSwap<?,?>> l = new LinkedList<>();
 		ClassInfo ci = ClassInfo.of(c);
 		for (ConstructorInfo cc : ci.getPublicConstructors()) {
@@ -80,7 +80,7 @@ public class SurrogateSwap<T,F> extends PojoSwap<T,F> {
 		return l;
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public F swap(BeanSession session, T o) throws SerializeException {
 		try {
 			return constructor.newInstance(o);
@@ -89,7 +89,7 @@ public class SurrogateSwap<T,F> extends PojoSwap<T,F> {
 		}
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	@SuppressWarnings("unchecked")
 	public T unswap(BeanSession session, F f, ClassMeta<?> hint) throws ParseException {
 		if (unswapMethod == null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/package-info.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/package-info.java
similarity index 95%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/package-info.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/package-info.java
index 187b5c5..8b56356 100755
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/package-info.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/package-info.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 
 /**
- * Transform API
+ * Swap API
  */
-package org.apache.juneau.transform;
+package org.apache.juneau.swap;
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/BeanStringSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/BeanStringSwap.java
similarity index 94%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/BeanStringSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/BeanStringSwap.java
index 968241c..0c4c2eb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/BeanStringSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/BeanStringSwap.java
@@ -10,10 +10,10 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms beans into {@link String Strings} by simply calling the {@link Object#toString()} method.
@@ -35,7 +35,7 @@ public class BeanStringSwap<T> extends StringSwap<T> {
 	/**
 	 * Converts the specified bean to a {@link String}.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, T o) {
 		return o.toString();
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ByteArraySwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ByteArraySwap.java
similarity index 90%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ByteArraySwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ByteArraySwap.java
index 135fc26..13c475c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ByteArraySwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ByteArraySwap.java
@@ -10,12 +10,12 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import static org.apache.juneau.internal.StringUtils.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms <code><jk>byte</jk>[]</code> arrays to Strings.
@@ -29,7 +29,7 @@ public abstract class ByteArraySwap extends StringSwap<byte[]> {
 		/**
 		 * Converts the specified <code><jk>byte</jk>[]</code> to a {@link String}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public String swap(BeanSession session, byte[] b) throws Exception {
 			return base64Encode(b);
 		}
@@ -37,7 +37,7 @@ public abstract class ByteArraySwap extends StringSwap<byte[]> {
 		/**
 		 * Converts the specified {@link String} to a <code><jk>byte</jk>[]</code>.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public byte[] unswap(BeanSession session, String s, ClassMeta<?> hint) throws Exception {
 			return base64Decode(s);
 		}
@@ -50,7 +50,7 @@ public abstract class ByteArraySwap extends StringSwap<byte[]> {
 		/**
 		 * Converts the specified <code><jk>byte</jk>[]</code> to a {@link String}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public String swap(BeanSession session, byte[] b) throws Exception {
 			return toHex(b);
 		}
@@ -58,7 +58,7 @@ public abstract class ByteArraySwap extends StringSwap<byte[]> {
 		/**
 		 * Converts the specified {@link String} to a <code><jk>byte</jk>[]</code>.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public byte[] unswap(BeanSession session, String s, ClassMeta<?> hint) throws Exception {
 			return fromHex(s);
 		}
@@ -71,7 +71,7 @@ public abstract class ByteArraySwap extends StringSwap<byte[]> {
 		/**
 		 * Converts the specified <code><jk>byte</jk>[]</code> to a {@link String}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public String swap(BeanSession session, byte[] b) throws Exception {
 			return toSpacedHex(b);
 		}
@@ -79,7 +79,7 @@ public abstract class ByteArraySwap extends StringSwap<byte[]> {
 		/**
 		 * Converts the specified {@link String} to a <code><jk>byte</jk>[]</code>.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public byte[] unswap(BeanSession session, String s, ClassMeta<?> hint) throws Exception {
 			return fromSpacedHex(s);
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ClassSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ClassSwap.java
similarity index 93%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ClassSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ClassSwap.java
index 04b7554..54525a5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ClassSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ClassSwap.java
@@ -10,22 +10,22 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link Class} objects to and from {@link String Strings}.
  */
 public class ClassSwap extends StringSwap<Class<?>> {
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, Class<?> o) throws Exception {
 		return o == null ? null : o.getName();
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Class<?> unswap(BeanSession session, String o, ClassMeta<?> hint) throws Exception {
 		return o == null ? null : Class.forName(o);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DefaultingTemporalAccessor.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/DefaultingTemporalAccessor.java
similarity index 99%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DefaultingTemporalAccessor.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/DefaultingTemporalAccessor.java
index 084a4b2..42b1454 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DefaultingTemporalAccessor.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/DefaultingTemporalAccessor.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import static java.time.temporal.ChronoField.*;
 import static java.time.temporal.TemporalQueries.*;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/EnumerationSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/EnumerationSwap.java
similarity index 90%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/EnumerationSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/EnumerationSwap.java
index baba65a..9eb8cc7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/EnumerationSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/EnumerationSwap.java
@@ -10,12 +10,12 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link Enumeration Enumerations} to {@code List<Object>} objects.
@@ -24,12 +24,12 @@ import org.apache.juneau.transform.*;
  * This is a one-way transform, since {@code Enumerations} cannot be reconstituted.
  */
 @SuppressWarnings({"unchecked","rawtypes"})
-public class EnumerationSwap extends PojoSwap<Enumeration,List> {
+public class EnumerationSwap extends ObjectSwap<Enumeration,List> {
 
 	/**
 	 * Converts the specified {@link Enumeration} to a {@link List}.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public List swap(BeanSession session, Enumeration o) {
 		List l = new LinkedList();
 		while (o.hasMoreElements())
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/InputStreamSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/InputStreamSwap.java
similarity index 92%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/InputStreamSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/InputStreamSwap.java
index 615b10b..617aef0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/InputStreamSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/InputStreamSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
@@ -18,7 +18,7 @@ import static org.apache.juneau.internal.IOUtils.*;
 import java.io.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms <code>InputStreams</code> to {@link String Strings}.
@@ -32,7 +32,7 @@ public abstract class InputStreamSwap extends StringSwap<InputStream> {
 		/**
 		 * Converts the specified {@link InputStream} to a {@link String}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public String swap(BeanSession session, InputStream is) throws Exception {
 			return base64Encode(toBytes(is));
 		}
@@ -40,7 +40,7 @@ public abstract class InputStreamSwap extends StringSwap<InputStream> {
 		/**
 		 * Converts the specified {@link String} to an {@link InputStream}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public InputStream unswap(BeanSession session, String s, ClassMeta<?> hint) throws Exception {
 			return toStream(base64Decode(s), hint);
 		}
@@ -53,7 +53,7 @@ public abstract class InputStreamSwap extends StringSwap<InputStream> {
 		/**
 		 * Converts the specified {@link InputStream} to a {@link String}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public String swap(BeanSession session, InputStream is) throws Exception {
 			return toHex(toBytes(is));
 		}
@@ -61,7 +61,7 @@ public abstract class InputStreamSwap extends StringSwap<InputStream> {
 		/**
 		 * Converts the specified {@link String} to an {@link InputStream}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public InputStream unswap(BeanSession session, String s, ClassMeta<?> hint) throws Exception {
 			return toStream(fromHex(s), hint);
 		}
@@ -74,7 +74,7 @@ public abstract class InputStreamSwap extends StringSwap<InputStream> {
 		/**
 		 * Converts the specified {@link InputStream} to a {@link String}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public String swap(BeanSession session, InputStream is) throws Exception {
 			return toSpacedHex(toBytes(is));
 		}
@@ -82,7 +82,7 @@ public abstract class InputStreamSwap extends StringSwap<InputStream> {
 		/**
 		 * Converts the specified {@link String} to an {@link InputStream}.
 		 */
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public InputStream unswap(BeanSession session, String s, ClassMeta<?> hint) throws Exception {
 			return toStream(fromSpacedHex(s), hint);
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/IteratorSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/IteratorSwap.java
similarity index 90%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/IteratorSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/IteratorSwap.java
index 219baec..8f92b92 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/IteratorSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/IteratorSwap.java
@@ -10,12 +10,12 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link Iterator Iterators} to {@code List<Object>} objects.
@@ -24,12 +24,12 @@ import org.apache.juneau.transform.*;
  * This is a one-way transform, since {@code Iterators} cannot be reconstituted.
  */
 @SuppressWarnings({"unchecked","rawtypes"})
-public class IteratorSwap extends PojoSwap<Iterator,List> {
+public class IteratorSwap extends ObjectSwap<Iterator,List> {
 
 	/**
 	 * Converts the specified {@link Iterator} to a {@link List}.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public List swap(BeanSession session, Iterator o) {
 		List l = new LinkedList();
 		while (o.hasNext())
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/LocaleSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/LocaleSwap.java
similarity index 93%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/LocaleSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/LocaleSwap.java
index 7d6dc80..a1d9efa 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/LocaleSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/LocaleSwap.java
@@ -10,24 +10,24 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link Locale} objects to and from language tag {@link String Strings}.
  */
 public class LocaleSwap extends StringSwap<Locale> {
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, Locale o) throws Exception {
 		return o == null ? null : o.toLanguageTag();
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Locale unswap(BeanSession session, String o, ClassMeta<?> hint) throws Exception {
 		return o == null ? null : Locale.forLanguageTag(o);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/MatchResultSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/MatchResultSwap.java
similarity index 90%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/MatchResultSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/MatchResultSwap.java
index 92f8cee..95a8c62 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/MatchResultSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/MatchResultSwap.java
@@ -10,13 +10,13 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.util.*;
 import java.util.regex.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link MatchResult MatchResults} to {@code List} objects.
@@ -24,12 +24,12 @@ import org.apache.juneau.transform.*;
  * <p>
  * Entries in the list represent matched groups in a regular expression.
  */
-public class MatchResultSwap extends PojoSwap<MatchResult,List<String>> {
+public class MatchResultSwap extends ObjectSwap<MatchResult,List<String>> {
 
 	/**
 	 * Converts the specified {@link Enumeration} to a {@link List}.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public List<String> swap(BeanSession session, MatchResult o) {
 		List<String> l = new ArrayList<>(o.groupCount());
 		for (int i = 0; i <= o.groupCount(); i++)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ParsedReaderSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ParsedReaderSwap.java
similarity index 93%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ParsedReaderSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ParsedReaderSwap.java
index 836ed42..b841ea9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ParsedReaderSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ParsedReaderSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import static org.apache.juneau.internal.IOUtils.*;
 
@@ -20,7 +20,7 @@ import org.apache.juneau.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.xml.*;
@@ -49,7 +49,7 @@ import org.apache.juneau.xml.*;
  * 	<li>{@link PlainText} - Parses plain text.
  * </ul>
  */
-public class ParsedReaderSwap extends PojoSwap<Reader,Object> {
+public class ParsedReaderSwap extends ObjectSwap<Reader,Object> {
 
 	/** Reader transform for reading JSON text. */
 	public static class Json extends ParsedReaderSwap {
@@ -112,7 +112,7 @@ public class ParsedReaderSwap extends PojoSwap<Reader,Object> {
 	/**
 	 * Converts the specified {@link Reader} to an {@link Object} whose type is determined by the contents of the reader.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Object swap(BeanSession session, Reader o) throws Exception {
 		if (parser == null)
 			return read(o);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ReaderSwap.java
similarity index 93%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ReaderSwap.java
index dca7709..51a00f1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ReaderSwap.java
@@ -10,14 +10,14 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import static org.apache.juneau.internal.IOUtils.*;
 
 import java.io.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms <code>Readers</code> to {@link String Strings}.
@@ -27,7 +27,7 @@ public class ReaderSwap extends StringSwap<Reader> {
 	/**
 	 * Converts the specified {@link InputStream} to a {@link String}.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, Reader r) throws Exception {
 		return read(r);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StackTraceElementSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/StackTraceElementSwap.java
similarity index 90%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StackTraceElementSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/StackTraceElementSwap.java
index 3654c77..93eaf04 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StackTraceElementSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/StackTraceElementSwap.java
@@ -10,12 +10,12 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link StackTraceElement StackTraceElements} to {@code String} objects.
@@ -24,17 +24,17 @@ import org.apache.juneau.transform.*;
  * The swap is identical to just calling {@link StackTraceElement#toString()}, but provides the ability to
  * parse the resulting string back into a bean.
  */
-public class StackTraceElementSwap extends PojoSwap<StackTraceElement,String> {
+public class StackTraceElementSwap extends ObjectSwap<StackTraceElement,String> {
 
 	/**
 	 * Converts the specified {@link Enumeration} to a {@link List}.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, StackTraceElement o) {
 		return o.toString();
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public StackTraceElement unswap(BeanSession session, String in, ClassMeta<?> hint) {
 		String methodName = "", fileName = null;
 		int lineNumber = -1;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StringFormatSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/StringFormatSwap.java
similarity index 90%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StringFormatSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/StringFormatSwap.java
index 93dc62a..ee83ddb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StringFormatSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/StringFormatSwap.java
@@ -10,14 +10,14 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
- * Built-in POJO swap implementation class for the {@link Beanp#format() @Beanp(format)} annotation.
+ * Built-in object swap implementation class for the {@link Beanp#format() @Beanp(format)} annotation.
  */
 public class StringFormatSwap extends StringSwap<Object> {
 
@@ -32,12 +32,12 @@ public class StringFormatSwap extends StringSwap<Object> {
 		this.format = format;
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, Object o) throws Exception {
 		return String.format(format, o);
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Object unswap(BeanSession session, String f, ClassMeta<?> hint) throws Exception {
 		return session.convertToType(f, hint);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalCalendarSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalCalendarSwap.java
similarity index 98%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalCalendarSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalCalendarSwap.java
index 24e5f2e..e47db45 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalCalendarSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalCalendarSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.time.*;
 import java.time.format.*;
@@ -19,7 +19,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Swap that converts {@link Calendar} objects to and from strings.
@@ -282,7 +282,7 @@ public class TemporalCalendarSwap extends StringSwap<Calendar> {
 		this.formatter = DateUtils.getFormatter(pattern);
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, Calendar o) throws Exception {
 		if (o == null)
 			return null;
@@ -290,7 +290,7 @@ public class TemporalCalendarSwap extends StringSwap<Calendar> {
 		return formatter.format(t);
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Calendar unswap(BeanSession session, String f, ClassMeta<?> hint) throws Exception {
 		if (f == null)
 			return null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalDateSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalDateSwap.java
similarity index 98%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalDateSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalDateSwap.java
index fd8f706..b7b6535 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalDateSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalDateSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.time.*;
 import java.time.format.*;
@@ -19,7 +19,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Swap that converts {@link Date} objects to and from strings.
@@ -282,14 +282,14 @@ public class TemporalDateSwap extends StringSwap<Date> {
 		this.formatter = DateUtils.getFormatter(pattern);
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, Date o) throws Exception {
 		if (o == null)
 			return null;
 		return formatter.format(o.toInstant().atZone(session.getTimeZoneId()));
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Date unswap(BeanSession session, String f, ClassMeta<?> hint) throws Exception {
 		if (f == null)
 			return null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
similarity index 98%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
index d4fcead..eb2d847 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TemporalSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.lang.reflect.*;
 import java.time.*;
@@ -23,7 +23,7 @@ import java.util.concurrent.*;
 import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Swap that converts {@link Temporal} objects to strings.
@@ -365,7 +365,7 @@ public class TemporalSwap extends StringSwap<Temporal> {
 		return zoneOptional;
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, Temporal o) throws Exception {
 		if (o == null)
 			return null;
@@ -406,7 +406,7 @@ public class TemporalSwap extends StringSwap<Temporal> {
 	}
 
 	@SuppressWarnings("unchecked")
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public Temporal unswap(BeanSession session, String f, ClassMeta<?> hint) throws Exception {
 		if (hint == null)
 			hint = session.getClassMeta(Instant.class);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TimeZoneSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TimeZoneSwap.java
similarity index 93%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TimeZoneSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TimeZoneSwap.java
index 485ea68..db24428 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/TimeZoneSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TimeZoneSwap.java
@@ -10,24 +10,24 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link TimeZone} objects to and from {@link String Strings}.
  */
 public class TimeZoneSwap extends StringSwap<TimeZone> {
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, TimeZone o) throws Exception {
 		return o.getID();
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public TimeZone unswap(BeanSession session, String o, ClassMeta<?> hint) throws Exception {
 		return TimeZone.getTimeZone(o);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/XMLGregorianCalendarSwap.java
similarity index 93%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/XMLGregorianCalendarSwap.java
index c2f78c6..5da4052 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/XMLGregorianCalendarSwap.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
@@ -18,7 +18,7 @@ import static org.apache.juneau.internal.StringUtils.*;
 import javax.xml.datatype.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link XMLGregorianCalendar XMLGregorianCalendars} to ISO8601 date-time {@link String Strings}.
@@ -47,7 +47,7 @@ public class XMLGregorianCalendarSwap extends StringSwap<XMLGregorianCalendar> {
 	/**
 	 * Converts the specified <c>XMLGregorianCalendar</c> to a {@link String}.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, XMLGregorianCalendar b) throws Exception {
 		return b.toXMLFormat();
 	}
@@ -55,7 +55,7 @@ public class XMLGregorianCalendarSwap extends StringSwap<XMLGregorianCalendar> {
 	/**
 	 * Converts the specified {@link String} to an <c>XMLGregorianCalendar</c>.
 	 */
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public XMLGregorianCalendar unswap(BeanSession session, String s, ClassMeta<?> hint) throws Exception {
 		if (isEmpty(s))
 			return null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ZoneIdSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ZoneIdSwap.java
similarity index 93%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ZoneIdSwap.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ZoneIdSwap.java
index 45f1206..55575a6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ZoneIdSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/ZoneIdSwap.java
@@ -10,24 +10,24 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES 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.juneau.transforms;
+package org.apache.juneau.swaps;
 
 import java.time.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Transforms {@link ZoneId} objects to and from {@link String Strings}.
  */
 public class ZoneIdSwap extends StringSwap<ZoneId> {
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public String swap(BeanSession session, ZoneId o) throws Exception {
 		return o.getId();
 	}
 
-	@Override /* PojoSwap */
+	@Override /* ObjectSwap */
 	public ZoneId unswap(BeanSession session, String o, ClassMeta<?> hint) throws Exception {
 		return ZoneId.of(o);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/package-info.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/package-info.java
similarity index 94%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/package-info.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/package-info.java
index 9650342..1b61ec5 100755
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/package-info.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/package-info.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 
 /**
- * Predefined Transforms
+ * Predefined Swaps
  */
-package org.apache.juneau.transforms;
+package org.apache.juneau.swaps;
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
index 5e38a86..a3d5063 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
@@ -313,7 +313,7 @@ public class UonParser extends ReaderParser implements HttpPartParser, UonMetaPr
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index b4eec42..ca3143e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -27,7 +27,7 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link UonParser}.
@@ -296,7 +296,7 @@ public class UonParserSession extends ReaderParserSession implements HttpPartPar
 
 		if (eType == null)
 			eType = object();
-		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getSwap(this);
+		ObjectSwap<T,Object> swap = (ObjectSwap<T,Object>)eType.getSwap(this);
 		BuilderSwap<T,Object> builder = (BuilderSwap<T,Object>)eType.getBuilderSwap(this);
 		ClassMeta<?> sType = null;
 		if (builder != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
index 7724c38..ff1a49e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
@@ -546,7 +546,7 @@ public class UonSerializer extends WriterSerializer implements HttpPartSerialize
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
index 8d863bf..1aa57b4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
@@ -28,7 +28,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link UonSerializer}.
@@ -307,7 +307,7 @@ public class UonSerializerSession extends WriterSerializerSession implements Htt
 		String typeName = getBeanTypeName(this, eType, aType, pMeta);
 
 		// Swap if necessary
-		PojoSwap swap = aType.getSwap(this);
+		ObjectSwap swap = aType.getSwap(this);
 		if (swap != null) {
 			o = swap(swap, o);
 			sType = swap.getSwapClassMeta(this);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
index f66086d..941cd3c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
@@ -272,7 +272,7 @@ public class UrlEncodingParser extends UonParser implements UrlEncodingMetaProvi
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
index 7eac6d7..6794205 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
@@ -24,7 +24,7 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.uon.*;
 
 /**
@@ -245,7 +245,7 @@ public class UrlEncodingParserSession extends UonParserSession {
 
 		if (eType == null)
 			eType = (ClassMeta<T>)object();
-		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getSwap(this);
+		ObjectSwap<T,Object> swap = (ObjectSwap<T,Object>)eType.getSwap(this);
 		BuilderSwap<T,Object> builder = (BuilderSwap<T,Object>)eType.getBuilderSwap(this);
 		ClassMeta<?> sType = null;
 		if (builder != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
index ebcd677..baf8a44 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
@@ -409,7 +409,7 @@ public class UrlEncodingSerializer extends UonSerializer implements UrlEncodingM
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
index 343a667..aeb4aea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
@@ -27,7 +27,7 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.uon.*;
 
 /**
@@ -273,7 +273,7 @@ public class UrlEncodingSerializerSession extends UonSerializerSession {
 		String typeName = getBeanTypeName(this, eType, aType, null);
 
 		// Swap if necessary
-		PojoSwap swap = aType.getSwap(this);
+		ObjectSwap swap = aType.getSwap(this);
 		if (swap != null) {
 			o = swap(swap, o);
 			sType = swap.getSwapClassMeta(this);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
index d213dcb..97e2086 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -356,7 +356,7 @@ public class XmlParser extends ReaderParser implements XmlMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
index 296bdc3..db539fd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
@@ -32,7 +32,7 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -441,7 +441,7 @@ public class XmlParserSession extends ReaderParserSession {
 
 		if (eType == null)
 			eType = (ClassMeta<T>)object();
-		PojoSwap<T,Object> swap = (PojoSwap<T,Object>)eType.getSwap(this);
+		ObjectSwap<T,Object> swap = (ObjectSwap<T,Object>)eType.getSwap(this);
 		BuilderSwap<T,Object> builder = (BuilderSwap<T,Object>)eType.getBuilderSwap(this);
 		ClassMeta<?> sType = null;
 		if (builder != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index 9203aa0..ce94730 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -596,7 +596,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
index c37c5df..07b7f3f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
@@ -31,7 +31,7 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -453,7 +453,7 @@ public class XmlSerializerSession extends WriterSerializerSession {
 			sType = aType;
 
 			// Swap if necessary
-			PojoSwap swap = aType.getSwap(this);
+			ObjectSwap swap = aType.getSwap(this);
 			if (swap != null) {
 				o = swap(swap, o);
 				sType = swap.getSwapClassMeta(this);
diff --git a/juneau-doc/docs/ReleaseNotes/5.0.0.00.html b/juneau-doc/docs/ReleaseNotes/5.0.0.00.html
index d6e887e..338757d 100644
--- a/juneau-doc/docs/ReleaseNotes/5.0.0.00.html
+++ b/juneau-doc/docs/ReleaseNotes/5.0.0.00.html
@@ -42,7 +42,7 @@
 		Two new subclasses of {@del Transform}:
 		<ul>
 			<li>{@del oaj.transform.BeanFilter} - Filter POJO beans.</li>
-			<li>{@link oaj.transform.PojoSwap} - Filter POJOs that aren't beans.</li>
+			<li>{@del oaj.transform.PojoSwap} - Filter POJOs that aren't beans.</li>
 		</ul>
 		This new API replaces the previous separate <c>Cast</c> and <c>BeanFilter</c> APIs which were considerably more complicated and puts them under a common API. 
 	</li>
diff --git a/juneau-doc/docs/ReleaseNotes/5.0.0.14.html b/juneau-doc/docs/ReleaseNotes/5.0.0.14.html
index a3db30f..ab30395 100644
--- a/juneau-doc/docs/ReleaseNotes/5.0.0.14.html
+++ b/juneau-doc/docs/ReleaseNotes/5.0.0.14.html
@@ -47,7 +47,7 @@
        		</ul>
        	</li>
        	<li>
-		New <c>org.apache.juneau.transform</c> package.
+		New <c>org.apache.juneau.swap</c> package.
 		<ul>
 			<li>Cleaner class structure.</li>
 			<li>Improved {@del oaj.transform.BeanFilter} class for defining property filters on beans.</li>
diff --git a/juneau-doc/docs/ReleaseNotes/5.0.0.29.html b/juneau-doc/docs/ReleaseNotes/5.0.0.29.html
index 102c5b6..500310a 100644
--- a/juneau-doc/docs/ReleaseNotes/5.0.0.29.html
+++ b/juneau-doc/docs/ReleaseNotes/5.0.0.29.html
@@ -42,8 +42,8 @@
 	<li>
 		New predefined DateFilters with millisecond precision:
 		<ul>
-			<li><c>org.apache.juneau.transforms.DateSwap.ISO8601DTP</c></li>
-			<li><c>org.apache.juneau.transforms.DateSwap.ISO8601DTZP</c></li>
+			<li><c>org.apache.juneau.swaps.DateSwap.ISO8601DTP</c></li>
+			<li><c>org.apache.juneau.swaps.DateSwap.ISO8601DTZP</c></li>
 		</ul>
 	</li>
 </ul>		
diff --git a/juneau-doc/docs/ReleaseNotes/5.0.0.31.html b/juneau-doc/docs/ReleaseNotes/5.0.0.31.html
index 3fc70ad..2bdec57 100644
--- a/juneau-doc/docs/ReleaseNotes/5.0.0.31.html
+++ b/juneau-doc/docs/ReleaseNotes/5.0.0.31.html
@@ -25,7 +25,7 @@
 		The new class hierarchy is much simpler to understand.
 	</li>
 	<li>
-		Added {@link oaj.transforms.XMLGregorianCalendarSwap} to convert these to ISO8601 strings during serialization, and vice versa during parsing.
+		Added {@del oaj.transforms.XMLGregorianCalendarSwap} to convert these to ISO8601 strings during serialization, and vice versa during parsing.
 	</li>
 	<li>
 		Added a strict mode to {@link oaj.json.JsonParser}.
diff --git a/juneau-doc/docs/ReleaseNotes/5.1.0.06.html b/juneau-doc/docs/ReleaseNotes/5.1.0.06.html
index b9977ab..3ffd172 100644
--- a/juneau-doc/docs/ReleaseNotes/5.1.0.06.html
+++ b/juneau-doc/docs/ReleaseNotes/5.1.0.06.html
@@ -19,11 +19,11 @@
 	Juno 5.1.0.6 is a moderate update.
 </p>
 <ul class='spaced-list'>
-	<li>Simplified API for {@link oaj.transform.PojoSwap}.  
+	<li>Simplified API for {@del oaj.transform.PojoSwap}.  
 		Since it's rarely used, the <c>beanContext</c> parameter was replaced with a {@del PojoSwap#getBeanContext()} method on
 		the class.
-	<li>New simplified way of defining POJO filters without needing to extend {@link oaj.transform.PojoSwap}.
-		See {@link oaj.transform.SurrogateSwap} for details.
+	<li>New simplified way of defining POJO filters without needing to extend {@del oaj.transform.PojoSwap}.
+		See {@del oaj.transform.SurrogateSwap} for details.
 	<li>New {@link oaj.html.annotation.Html @Html} annotation.
 		Will allow the definition of standard XHTML DTOs in future releases.  
 		For now, {@del Img} is an example of defining an XHTML element using Juno DTOs.
diff --git a/juneau-doc/docs/ReleaseNotes/5.1.0.13.html b/juneau-doc/docs/ReleaseNotes/5.1.0.13.html
index 4aeca8c..6d966d0 100644
--- a/juneau-doc/docs/ReleaseNotes/5.1.0.13.html
+++ b/juneau-doc/docs/ReleaseNotes/5.1.0.13.html
@@ -23,7 +23,7 @@
 <ul class='spaced-list'>
 	<li>{@link oaj.ClassMeta#newInstance()} method can now create new instances of arrays.
 	<li>Arguments passed to {@del Link} are now serialized using {@link oaj.urlencoding.UrlEncodingSerializer}, so arbitrary POJOs can now be passed as arguments.
-	<li>New date filters:  <c>org.apache.juneau.transforms.Datefilter.ISO8601DTZP</c> and <c>org.apache.juneau.transforms.Datefilter.SimpleP</c>.
+	<li>New date filters:  <c>org.apache.juneau.swaps.Datefilter.ISO8601DTZP</c> and <c>org.apache.juneau.swaps.Datefilter.SimpleP</c>.
 	<li>New {@del HtmlDocSerializerContext#HTMLDOC_nowrap} setting for {@link oaj.html.HtmlDocSerializer} class.  
 		Adds <js>"* {white-space:nowrap}"</js> to the style header to prevent word wrapping.
 	<li>Fixed bug in {@link oaj.uon.UonParser} where passing in a blank value on an array or collection type in a form post would cause a <c>ClassCastException</c>.  
diff --git a/juneau-doc/docs/ReleaseNotes/5.2.0.0.html b/juneau-doc/docs/ReleaseNotes/5.2.0.0.html
index 047949d..7b52ed7 100644
--- a/juneau-doc/docs/ReleaseNotes/5.2.0.0.html
+++ b/juneau-doc/docs/ReleaseNotes/5.2.0.0.html
@@ -431,6 +431,6 @@
 	<li>{@del StringVarResolver} - New documentation.
 	<li>{@del org.apache.juneau.rest.client} - New package-level javadoc.
 	<li><dc>Overview / Samples</dc> - New section.
-	<li><dc>org.apache.juneau.transform / Stop Classes</dc> - New section.
+	<li><dc>org.apache.juneau.swap / Stop Classes</dc> - New section.
 	<li>{@del org.apache.juneau.rest} - Extensive updates.
 </ul>
diff --git a/juneau-doc/docs/ReleaseNotes/6.1.0.html b/juneau-doc/docs/ReleaseNotes/6.1.0.html
index afedd74..b7db004 100644
--- a/juneau-doc/docs/ReleaseNotes/6.1.0.html
+++ b/juneau-doc/docs/ReleaseNotes/6.1.0.html
@@ -124,10 +124,10 @@
 	<jk>new</jk> JsonSerializer().setSimpleMode(<jk>true</jk>).setQuoteChar(<js>'"'</js>);
 			</p>
 	</ul>
-	<li>Simplified {@link oaj.transform.PojoSwap} class.  Now just two methods:
+	<li>Simplified {@del oaj.transform.PojoSwap} class.  Now just two methods:
 	<ul>
-		<li>{@link oaj.transform.PojoSwap#swap(BeanSession,Object)}
-		<li>{@link oaj.transform.PojoSwap#unswap(BeanSession,Object,ClassMeta)}
+		<li>{@del oaj.transform.PojoSwap#swap(BeanSession,Object)}
+		<li>{@del oaj.transform.PojoSwap#unswap(BeanSession,Object,ClassMeta)}
 	</ul>
 	<li>General code improvements made to {@link oaj.ClassMeta} class.
 	<ul>
@@ -182,7 +182,7 @@
 			<li>New setter method names for a better fluent design.
 			<li>Updated {@del org.apache.juneau.dto.atom} documentation.
 		</ul>
-	<li>New {@link oaj.transform.MapSwap} and {@link oaj.transform.StringSwap} classes.
+	<li>New {@del oaj.transform.MapSwap} and {@del oaj.transform.StringSwap} classes.
 	<li>New {@link oaj.serializer.WriterSerializer#println(Object)} method.  Useful for debugging purposes.
 	<li>New {@link oaj.BeanContext#getClassMeta(Type,Type...)} and {@link oaj.BeanSession#getClassMeta(Type,Type...)}
 		methods for retrieving Map and Collection class metas.  
diff --git a/juneau-doc/docs/ReleaseNotes/6.4.0.html b/juneau-doc/docs/ReleaseNotes/6.4.0.html
index d7734d2..6253482 100644
--- a/juneau-doc/docs/ReleaseNotes/6.4.0.html
+++ b/juneau-doc/docs/ReleaseNotes/6.4.0.html
@@ -264,7 +264,7 @@
 				</p>
 		</ul>
 	<li>
-		New {@link oaj.transform.Surrogate} interface for identifying surrogate classes.
+		New {@del oaj.transform.Surrogate} interface for identifying surrogate classes.
 	<li>
 		Serializers can now serialize to {@link java.util.StringBuilder StringBuilders}.
 	<li>
@@ -310,7 +310,7 @@
 		</p>
 		This is mostly an internal change and doesn't affect the existing APIs.
 	<li>
-		{@link oaj.transform.PojoSwap#swap(BeanSession,Object)} and {@link oaj.transform.PojoSwap#unswap(BeanSession,Object,ClassMeta)} 
+		{@del oaj.transform.PojoSwap#swap(BeanSession,Object)} and {@del oaj.transform.PojoSwap#unswap(BeanSession,Object,ClassMeta)} 
 		can now throw arbitrary exceptions instead of having to wrap them in <c>SerializeException</c>/<c>ParseException</c>.
 	<li>
 		New {@del oaj.utils.CalendarUtils} class that encapsulates serialization/parsing logic from {@del oaj.transforms.CalendarSwap} and 
diff --git a/juneau-doc/docs/ReleaseNotes/7.1.0.html b/juneau-doc/docs/ReleaseNotes/7.1.0.html
index 1e7ee6a..39c4d34 100644
--- a/juneau-doc/docs/ReleaseNotes/7.1.0.html
+++ b/juneau-doc/docs/ReleaseNotes/7.1.0.html
@@ -149,11 +149,11 @@
 		New {@del oaj.parser.Parser#PARSER_autoCloseStreams} setting allows input streams and
 		readers passed into parsers to be automatically closed after parsing.
 	<li>
-		Syntax changed on unswap method on {@link oaj.transform.Surrogate} classes.
+		Syntax changed on unswap method on {@del oaj.transform.Surrogate} classes.
 		<br>It's now a regular method instead of a static method.
 	<li>
 		{@link oaj.annotation.Swap @Swap} annotation can now be used with 
-		{@link oaj.transform.Surrogate} classes.
+		{@del oaj.transform.Surrogate} classes.
 	<li>
 		New support for {@doc PojoBuilders POJO Builders}.	
 </ul>
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.0.html b/juneau-doc/docs/ReleaseNotes/8.1.0.html
index 585d274..734e64e 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.0.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.0.html
@@ -22,7 +22,7 @@
 	<li>
 		{@doc ConfigurableAnnotations Configurable Annotations}
 	<li>
-		{@doc DefaultPojoSwaps Default PojoSwaps}
+		{@del DefaultPojoSwaps Default PojoSwaps}
 	<li>
 		{@doc ConfigImports Config Imports}
 	<li>
@@ -89,9 +89,9 @@
 	<li>
 		New Java 8 date-time transforms:
 		<ul class='javatree'>
-			<li class='jc'>{@link oaj.transforms.TemporalSwap} - For all Java 8 temporal types (e.g. {@link java.time.ZonedDateTime})
-			<li class='jc'>{@link oaj.transforms.TemporalDateSwap} - For {@link java.util.Date}
-			<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap} - For {@link java.util.Calendar}
+			<li class='jc'>{@del oaj.transforms.TemporalSwap} - For all Java 8 temporal types (e.g. {@link java.time.ZonedDateTime})
+			<li class='jc'>{@del oaj.transforms.TemporalDateSwap} - For {@link java.util.Date}
+			<li class='jc'>{@del oaj.transforms.TemporalCalendarSwap} - For {@link java.util.Calendar}
 		</ul>
 	<li>
 		All serializers and parsers now have built-in default swaps for common class types:
diff --git a/juneau-doc/docs/ReleaseNotes/8.2.0.html b/juneau-doc/docs/ReleaseNotes/8.2.0.html
index 786c68b..840f7e5 100644
--- a/juneau-doc/docs/ReleaseNotes/8.2.0.html
+++ b/juneau-doc/docs/ReleaseNotes/8.2.0.html
@@ -140,8 +140,8 @@ The new API is located in the <c>org.apache.juneau.rest.client2</c> package and
 	<li>
 		New swaps auto-added to all serializers/parsers:
 		<ul>
-			<li class='jc'>{@link oaj.transforms.MatchResultSwap} 
-			<li class='jc'>{@link oaj.transforms.StackTraceElementSwap} 
+			<li class='jc'>{@del oaj.transforms.MatchResultSwap} 
+			<li class='jc'>{@del oaj.transforms.StackTraceElementSwap} 
 		</ul>		
 	<li>
 		{@link oaj.html.annotation.Html#noTableHeaders} now can be applied to collections of beans.
@@ -248,7 +248,7 @@ The new API is located in the <c>org.apache.juneau.rest.client2</c> package and
 	<li>
 		New Bean Property Interceptor API for intercepting calls to bean getters/setters.
 		<ul>
-			<li class='jac'>{@link oaj.transform.BeanInterceptor}
+			<li class='jac'>{@del oaj.transform.BeanInterceptor}
 			<li class='ja'>{@link oaj.annotation.Bean#interceptor Bean(interceptor)}
 			<li class='jm'>{@link oaj.BeanContext.Builder#beanInterceptor(Class,Class)}
 		</ul>
diff --git a/juneau-doc/docs/Topics/01.Overview/01.CoreOverview.html b/juneau-doc/docs/Topics/01.Overview/01.CoreOverview.html
index a0cb81c..fac6305 100644
--- a/juneau-doc/docs/Topics/01.Overview/01.CoreOverview.html
+++ b/juneau-doc/docs/Topics/01.Overview/01.CoreOverview.html
@@ -122,8 +122,8 @@
 		For other objects, "transforms" allow you to perform various mutations on them before serialization and after parsing.
 	</p>
 	<p> 
-		{@doc PojoSwaps POJO swaps} allow you to replace non-serializable POJOs with serializable equivalents.
-		The {@link oaj.transforms} package contains a variety of predefined swaps.
+		{@doc ObjectSwaps Object swaps} allow you to replace non-serializable objects with serializable equivalents.
+		The {@link oaj.swaps} package contains a variety of predefined swaps.
 	</p>
 	<p class='bcode w800'>
 	<jc>// Create a serializer from scratch programmatically using a builder.</jc>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/01.BeanAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/01.BeanAnnotation.html
index e3c62f9..8e342ec 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/01.BeanAnnotation.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/01.BeanAnnotation.html
@@ -117,7 +117,7 @@
 </p>
 <p>
 	The {@link oaj.annotation.Bean#interceptor() @Bean(interceptor)} annotation
-	and {@link oaj.transform.BeanInterceptor} class can be used to perform interception
+	and {@link oaj.swap.BeanInterceptor} class can be used to perform interception
 	and inline handling of bean getter and setter calls.
 </p>
 <p class='bpcode w800'>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/07.PojoBuilders.html b/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/07.PojoBuilders.html
index 9349b4a..ca47017 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/07.PojoBuilders.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/07.PojoBuilders.html
@@ -94,7 +94,7 @@
 		<p class='bcode w800 nomargin'>
 	<jk>public static</jk> Builder <jsm>create</jsm>() {...}
 		</p>
-	<li>A public constructor on the POJO class that takes in a single parameter that implements the {@link oaj.transform.Builder} interface.
+	<li>A public constructor on the POJO class that takes in a single parameter that implements the {@link oaj.swap.Builder} interface.
 		<br>The builder class must have a public no-arg constructor.
 		<p class='bcode w800 nomargin'>
 	<jk>public</jk> MyBean(Builder <jv>builder</jv>) {...}
@@ -121,5 +121,5 @@
 </ul>
 <ul class='seealso'>
 	<li class='ja'>{@link oaj.annotation.Builder}
-	<li class='jic'>{@link oaj.transform.Builder}
+	<li class='jic'>{@link oaj.swap.Builder}
 </ul>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/08.BypassSerialization.html b/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/08.BypassSerialization.html
index 8412c44..4a827ad 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/08.BypassSerialization.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/04.JavaBeansSupport/08.BypassSerialization.html
@@ -45,7 +45,7 @@
 	
 	<jc>// A swap that produces specialized output for JSON, but default serialization for</jc>
 	<jc>// all other media types.</jc>
-	<jk>public class</jk> MyBeanSwapSometimes <jk>extends</jk> PojoSwap&lt;MyBean,Object&gt; {
+	<jk>public class</jk> MyBeanSwapSometimes <jk>extends</jk> ObjectSwap&lt;MyBean,Object&gt; {
 		<jk>public</jk> Object swap(BeanSession <jv>session</jv>, MyPojo <jv>object</jv>) <jk>throws</jk> Exception {
 			MediaType <jv>mt</jv> = <jv>session</jv>.getMediaType();
 			<jk>if</jk> (<jv>mt</jv>.hasSubType(<js>"json"</js>))
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/11.ContextsBuildersSessionsPropertyStores.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.ContextsBuildersSessionsPropertyStores.html
deleted file mode 100644
index 09b7916..0000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/11.ContextsBuildersSessionsPropertyStores.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Contexts, Builders, Sessions, and ContextProperties', updated:'9.0.0', flags:'review'}
-
-<p>
-	All the serializers, parsers, and REST server/client classes use the following design pattern:
-</p>
-<ul class='spaced-list'>
-	<li>
-		<l>Context</l> - A thread-safe read-only object.
-		<ul>
-			<li>Heavy to construct and designed to be cached and reused.
-			<li>Created by <l>Context.Builder</l> classes.
-			<li>Examples:  <c>BeanContext</c>, <c>JsonSerializer</c>
-		</ul>
-	<li>
-		<l>Session</l> - A non-thread-safe single-use object with configuration combined from context and 
-		runtime args such as locale/timezone.
-		<ul>
-			<li>Lightweight objects that take a minimum amount of time to instantiate and are not typically reused.
-			<li>Created by <c>Context</c> objects.
-			<li>Examples:  <c>BeanSession</c>, <c>JsonSerializerSession</c>
-		</ul>
-	<li>
-		<l>ContextProperties</l> - A thread-safe read-only set of configuration properties.
-		<ul>
-			<li>Heavier to create than <c>Sessions</c> but lighter than <c>Contexts</c>.
-			<li>Each <c>Context</c> contains one <c>ContextProperties</c> that defines all the configuration about that object.
-			<li>Created by <l>ContextPropertiesBuilder</l> classes.
-		</ul>
-</ul>	
-<p>
-	For example, the class hierarchy for <c>JsonSerializer</c> is:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>Object</c>
-	<ul>
-		<li class='jac'>{@link oaj.Context}
-		<ul>
-			<li class='jc'>{@link oaj.BeanContext}
-			<ul>
-				<li class='jac'>{@link oaj.serializer.Serializer}
-				<ul>
-					<li class='jac'>{@link oaj.serializer.WriterSerializer}
-					<ul>
-						<li class='jc'>{@link oaj.json.JsonSerializer}
-					</ul>
-				</ul>
-			</ul>
-		</ul>
-	</ul>
-</ul>
-<p>
-	Each context object in the hierarchy define properties that can be stored in a <c>ContextProperties</c>
-	such as <jsf>WSERIALIZER_useWhitespace</jsf> or <jsf>JSON_simpleMode</jsf>.
-</p>
-<p>
-	The class hierarchy for <c>JsonSerializer.Builder</c> is:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>Object</c>
-	<ul>
-		<li class='jac'>{@link oaj.Context.Builder}
-		<ul>
-			<li class='jc'>{@link oaj.BeanContext.Builder}
-			<ul>
-				<li class='jac'>{@link oaj.serializer.Serializer.Builder}
-				<ul>
-					<li class='jac'>{@link oaj.serializer.WriterSerializer.Builder}
-					<ul>
-						<li class='jc'>{@link oaj.json.JsonSerializer.Builder}
-					</ul>
-				</ul>
-			</ul>
-		</ul>
-	</ul>
-</ul>
-<p>
-	The class hierarchy for <c>JsonSerializerSession</c> is:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>Object</c>
-	<ul>
-		<li class='jac'>{@link oaj.Session}
-		<ul>
-			<li class='jc'>{@link oaj.BeanSession}
-			<ul>
-				<li class='jac'>{@link oaj.serializer.SerializerSession}
-				<ul>
-					<li class='jac'>{@link oaj.serializer.WriterSerializerSession}
-					<ul>
-						<li class='jc'>{@link oaj.json.JsonSerializerSession}
-					</ul>
-				</ul>
-			</ul>
-		</ul>
-	</ul>
-</ul>
-<p>
-	The general idea behind a {@del oaj.ContextProperties} is to serve as a reusable configuration of an artifact 
-	(such as a serializer) such that the artifact can be cached and reused if the property stores are 'equal'.
-</p>
-<p>
-	For example, two serializers of the same type created with the same configuration will always end up being
-	the same serializer: 
-</p>
-<p class='bpcode w800'>
-	<jc>// Two serializers created with identical configurations will always be the same copy.</jc> 
-	WriterSerializer <jv>s1</jv> = JsonSerializer.<jsm>create</jsm>().swaps(MySwap.<jk>class</jk>).simpleMode().build();
-	WriterSerializer <jv>s2</jv> = JsonSerializer.<jsm>create</jsm>().set(<jsf>JSON_simpleMode</jsf>).swaps(MySwap.<jk>class</jk>).build();
-	<jk>assert</jk>(<jv>s1</jv> == <jv>s2</jv>);
-</p>
-<p>
-	This has the effect of significantly improving performance especially if you're creating many 
-	serializers and parsers.
-</p>
-<p>
-	The {@del oaj.ContextPropertiesBuilder} class is used to build up and instantiate immutable 
-	<c>ContextProperties</c> objects.
-</p>
-<p>
-	In the example above, the property store being built looks like the following:
-</p>
-<p class='bpcode w800'>
-	ContextProperties <jv>ps</jv> = ContextProperties
-		.<jsm>create</jsm>()
-		.set(<js>"BeanContext.swaps.lo"</js>, MySwap.<jk>class</jk>)
-		.set(<js>"JsonSerializer.simpleMode.b"</js>)
-		.build();
-</p>
-<p>
-	Property stores are immutable, comparable, and their hashcodes are calculated exactly one time.
-	That makes them particularly suited for use as hashmap keys, and thus for caching reusable serializers and parsers.
-</p>
-<p>
-	Refer to the {@del oaj.ContextProperties} javadoc for a detailed explanation on how
-	property stores work.
-</p>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/01.PojoSwaps.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps.html
similarity index 91%
rename from juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/01.PojoSwaps.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps.html
index 427a28c..8965688 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/01.PojoSwaps.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps.html
@@ -13,10 +13,10 @@
  ***************************************************************************************************************************/
  -->
 
-{title:'Swaps', updated:'8.1.0,8.2.0'}
+{title:'Swaps', updated:'9.0.0'}
 
 <p>
-	{@link oaj.transform.PojoSwap Swaps} are a critical component of Juneau.
+	{@link oaj.swap.ObjectSwap Swaps} are a critical component of Juneau.
 	They allow the serializers and parsers to handle Java objects that wouldn't normally be serializable.
 </p>
 <p>
@@ -29,21 +29,21 @@
 	These are classes that aren't beans and cannot be represented as simple maps, collections, or primitives.
 </p>
 <p>
-	In the following example, we introduce a <c>PojoSwap</c> that will swap in a bean of a particular type
+	In the following example, we introduce a <c>ObjectSwap</c> that will swap in a bean of a particular type
 	with a map containing customized key-value pairs:
 </p>
 <p class='bpcode w800'>
 	<jc>// Sample swap for converting a bean to a specialized map of key-value pairs.</jc>
-	<jk>public class</jk> MyBeanSwap <jk>extends</jk> PojoSwap&lt;MyBean,OMap&gt; {
+	<jk>public class</jk> MyBeanSwap <jk>extends</jk> ObjectSwap&lt;MyBean,OMap&gt; {
 		
 		<jc>// Converts a bean to a generic map.</jc>
-		<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+		<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 		<jk>public</jk> OMap swap(BeanSession <jv>session</jv>, MyBean <jv>bean</jv>) {
 			<jk>return</jk> OMap.<jsm>of</jsm>(<js>"foo"</js>, <jv>bean</jv>.getBar());
 		}
 		
 		<jc>// Converts the generic map back into a bean.</jc>
-		<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+		<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 		<jk>public</jk> MyBean unswap(BeanSession <jv>session</jv>, OMap <jv>omap</jv>, ClassMeta&lt;?&gt; <jv>hint</jv>) <jk>throws</jk> Exception {
 			MyBean <jv>bean</jv> = <jk>new</jk> MyBean();
 			<jv>bean</jv>.setBar(<jv>omap</jv>.getString(<js>"foo"</js>));
@@ -64,7 +64,7 @@
 	MyBean <jv>bean</jv> = <jv>parser</jv>.parse(<jv>json</jv>, MyBean.<jk>class</jk>);
 </p>
 <p>
-	Another example of a <c>PojoSwap</c> is one that converts <c><jk>byte</jk>[]</c> arrays to
+	Another example of a <c>ObjectSwap</c> is one that converts <c><jk>byte</jk>[]</c> arrays to
 	BASE64-encoded strings:
 </p>
 <p class='bpcode w800'>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/01.DefaultSwaps.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/01.DefaultSwaps.html
new file mode 100644
index 0000000..09b3b9e
--- /dev/null
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/01.DefaultSwaps.html
@@ -0,0 +1,119 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *  
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ ***************************************************************************************************************************/
+ -->
+
+{title:'Default Swaps'}
+
+<p>
+	By default, all serializers and parsers have built in <c>ObjectSwaps</c> defined for the following common data types:
+</p>
+<ul class='javatree'>
+	<li class='jc'>{@link java.util.Enumeration}
+	<li class='jc'>{@link java.util.Iterator}
+	<li class='jc'>{@link java.util.Locale}
+	<li class='jc'>{@link java.util.Class}
+	<li class='jc'>{@link java.util.Calendar} - ISO offset date-time.
+	<li class='jc'>{@link java.util.Date} - Local date-time
+	<li class='jc'>{@link java.time.Instant} - ISO instant.
+	<li class='jc'>{@link java.time.ZonedDateTime} - ISO offset date-time.
+	<li class='jc'>{@link java.time.LocalDate} - ISO local date.
+	<li class='jc'>{@link java.time.LocalDateTime} - ISO local date-time.
+	<li class='jc'>{@link java.time.LocalTime} - ISO local time.
+	<li class='jc'>{@link java.time.OffsetDateTime} - ISO offset date-time.
+	<li class='jc'>{@link java.time.OffsetTime} - ISO offset time.
+	<li class='jc'>{@link java.time.Year} - ISO year.
+	<li class='jc'>{@link java.time.YearMonth} - ISO year-month.
+	<li class='jc'>{@link java.time.Temporal} - ISO instant.
+	<li class='jc'>{@link java.util.TimeZone}
+	<li class='jc'>{@link javax.xml.datatype.XMLGregorianCalendar}
+	<li class='jc'>{@link java.time.ZoneId}
+</ul>
+<p>
+	Various other swaps are provided in the <c>org.apache.juneau.transforms</c> package:
+</p>
+<ul class='javatree'>
+	<li class='jp'><jk>org.apache.juneau.transforms</jk>
+		<ul>
+			<li class='jac'>{@link oaj.swaps.ByteArraySwap}
+			<ul>
+				<li class='jc'>{@link oaj.swaps.ByteArraySwap.Base64}
+				<li class='jc'>{@link oaj.swaps.ByteArraySwap.Hex}
+				<li class='jc'>{@link oaj.swaps.ByteArraySwap.SpacedHex}
+			</ul>
+			<li class='jac'>{@link oaj.swaps.InputStreamSwap}
+			<ul>
+				<li class='jc'>{@link oaj.swaps.InputStreamSwap.Base64}
+				<li class='jc'>{@link oaj.swaps.InputStreamSwap.Hex}
+				<li class='jc'>{@link oaj.swaps.InputStreamSwap.SpacedHex}
+			</ul>
+			<li class='jc'>{@link oaj.swaps.ReaderSwap}
+			<li class='jac'>{@link oaj.swaps.TemporalCalendarSwap}
+			<ul>
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.BasicIsoDate}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoDate}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoInstant}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoLocalDate}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoLocalDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoLocalTime}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoOffsetDate}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoOffsetDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoOffsetTime}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoOrdinalDate}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoTime}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoWeekDate}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.IsoZonedDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalCalendarSwap.Rfc1123DateTime}
+			</ul>
+			<li class='jac'>{@link oaj.swaps.TemporalDateSwap}
+			<ul>
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.BasicIsoDate}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoDate}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoInstant}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoLocalDate}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoLocalDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoLocalTime}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoOffsetDate}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoOffsetDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoOffsetTime}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoOrdinalDate}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoTime}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoWeekDate}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.IsoZonedDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalDateSwap.Rfc1123DateTime}
+			</ul>
+			<li class='jac'>{@link oaj.swaps.TemporalSwap}
+			<ul>
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.BasicIsoDate}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoDate}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoInstant}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoLocalDate}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoLocalDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoLocalTime}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoOffsetDate}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoOffsetDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoOffsetTime}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoOrdinalDate}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoTime}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoWeekDate}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoYear}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoYearMonth}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.IsoZonedDateTime}
+				<li class='jc'>{@link oaj.swaps.TemporalSwap.Rfc1123DateTime}
+			</ul>
+		</ul>
+	</li>
+</ul>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/03.AutoPojoSwaps.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/02.AutoSwaps.html
similarity index 98%
rename from juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/03.AutoPojoSwaps.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/02.AutoSwaps.html
index 1777ea0..872b704 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/03.AutoPojoSwaps.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/02.AutoSwaps.html
@@ -13,11 +13,11 @@
  ***************************************************************************************************************************/
  -->
 
-{title:'Auto-detected POJO swaps', created:'8.1.0'} 
+{title:'Auto-detected swaps', created:'8.1.0'} 
 
 <p>
 	Various methods can be defined on a class directly to affect how it gets serialized.
-	This can often be simpler than using <c>PojoSwaps</c>.
+	This can often be simpler than using <c>ObjectSwaps</c>.
 </p>
 <p>
 	Objects serialized as <c>Strings</c> can be parsed back into their original objects by 
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/04.PerMediaTypePojoSwaps.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/03.PerMediaTypeSwaps.html
similarity index 86%
rename from juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/04.PerMediaTypePojoSwaps.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/03.PerMediaTypeSwaps.html
index cfdc4a5..c87ec92 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/04.PerMediaTypePojoSwaps.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/03.PerMediaTypeSwaps.html
@@ -19,7 +19,7 @@
 	Swaps can also be defined per-media-type.		
 </p>
 <p>	
-	The {@link oaj.transform.PojoSwap#forMediaTypes()} method can be overridden to 
+	The {@link oaj.swap.ObjectSwap#forMediaTypes()} method can be overridden to 
 	provide a set of media types that the swap is invoked on.
 	It's also possible to define multiple swaps against the same POJO as long as they're differentiated 
 	by media type.
@@ -30,38 +30,38 @@
 	One for JSON, one for XML, and one for all other types.
 </p>
 <p class='bpcode w800'>
-	<jk>public class</jk> PojoSwapTest {
+	<jk>public class</jk> ObjectSwapTest {
 
 		<jk>public static class</jk> MyPojo {}
 
 		<jk>public static class</jk> MyJsonSwap <jk>extends</jk> StringSwap&lt;MyPojo&gt; {
-			<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+			<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 			<jk>public</jk> MediaType[] forMediaTypes() {
 				<jk>return</jk> MediaType.<jsm>forStrings</jsm>(<js>"&#42;/json"</js>);
 			}
-			<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+			<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 			<jk>public</jk> String swap(BeanSession <jv>session</jv>, MyPojo <jv>pojo</jv>) <jk>throws</jk> Exception {
 				<jk>return</jk> <js>"It's JSON!"</js>;
 			}
 		}
 
 		<jk>public static class</jk> MyXmlSwap <jk>extends</jk> StringSwap&lt;MyPojo&gt; {
-			<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+			<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 			<jk>public</jk> MediaType[] forMediaTypes() {
 				<jk>return</jk> MediaType.<jsm>forStrings</jsm>(<js>"&#42;/xml"</js>);
 			}
-			<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+			<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 			<jk>public</jk> String swap(BeanSession <jv>session</jv>, MyPojo <jv>pojo</jv>) <jk>throws</jk> Exception {
 				<jk>return</jk> <js>"It's XML!"</js>;
 			}
 		}
 
 		<jk>public static class</jk> MyOtherSwap <jk>extends</jk> StringSwap&lt;MyPojo&gt; {
-			<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+			<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 			<jk>public</jk> MediaType[] forMediaTypes() {
 				<jk>return</jk> MediaType.<jsm>forStrings</jsm>(<js>"&#42;/*"</js>);
 			}
-			<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+			<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 			<jk>public</jk> String swap(BeanSession <jv>session</jv>, MyPojo <jv>pojo</jv>) <jk>throws</jk> Exception {
 				<jk>return</jk> <js>"It's something else!"</js>;
 			}
@@ -101,11 +101,11 @@
 	<jk>public static class</jk> MyPojo {}
 
 	<ja>@Swap</ja>(mediaTypes=<js>"&#42;/json"</js>)
-	<jk>public static class</jk> MyJsonSwap <jk>extends</jk> PojoSwap&lt;MyPojo,String&gt; {...}
+	<jk>public static class</jk> MyJsonSwap <jk>extends</jk> ObjectSwap&lt;MyPojo,String&gt; {...}
 
 	<ja>@Swap</ja>(mediaTypes=<js>"&#42;/xml"</js>)
-	<jk>public static class</jk> MyXmlSwap <jk>extends</jk> PojoSwap&lt;MyPojo,String&gt; {...}
+	<jk>public static class</jk> MyXmlSwap <jk>extends</jk> ObjectSwap&lt;MyPojo,String&gt; {...}
 
 	<ja>@Swap</ja>(mediaTypes=<js>"&#42;/*"</js>)
-	<jk>public static class</jk> MyOtherSwap <jk>extends</jk> PojoSwap&lt;MyPojo,String&gt; {...}
+	<jk>public static class</jk> MyOtherSwap <jk>extends</jk> ObjectSwap&lt;MyPojo,String&gt; {...}
 </p>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/05.OneWayPojoSwaps.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/04.OneWaySwaps.html
similarity index 95%
rename from juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/05.OneWayPojoSwaps.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/04.OneWaySwaps.html
index ac8aa64..80898a5 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/05.OneWayPojoSwaps.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/04.OneWaySwaps.html
@@ -32,8 +32,8 @@
 	reconstruct an {@code Iterator} during parsing. 
 </p>
 <p class='bpcode w800'>
-	<jk>public class</jk> IteratorSwap <jk>extends</jk> PojoSwap&lt;Iterator,List&gt; {
-		<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+	<jk>public class</jk> IteratorSwap <jk>extends</jk> ObjectSwap&lt;Iterator,List&gt; {
+		<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 		<jk>public</jk> List swap(Iterator <jv>iterator</jv>) {
 			List <jv>list</jv> = <jk>new</jk> LinkedList();
 			<jk>while</jk> (<jv>iterator</jv>.hasNext())
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/06.SwapAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/05.SwapAnnotation.html
similarity index 90%
rename from juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/06.SwapAnnotation.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/05.SwapAnnotation.html
index cb4dad3..e01e5c2 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/06.SwapAnnotation.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/05.SwapAnnotation.html
@@ -22,15 +22,15 @@
 	your swap class near your POJO class. 
 </p>
 <p class='bpcode w800'>
-	<ja>@Swap</ja>(MyPojoSwap.<jk>class</jk>)
+	<ja>@Swap</ja>(MyObjectSwap.<jk>class</jk>)
 	<jk>public class</jk> MyPojo {
 		...
 	}
 	
 	<jc>// Sample swap for converting MyPojo classes to a simple string.</jc>
-	<jk>public class</jk> MyPojoSwap <jk>extends</jk> PojoSwap&lt;MyPojo,String&gt; {
+	<jk>public class</jk> MyObjectSwap <jk>extends</jk> ObjectSwap&lt;MyPojo,String&gt; {
 		
-		<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+		<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 		<jk>public</jk> String swap(BeanSession <jv>session</jv>, MyPojo <jv>pojo</jv>) {
 			<jk>return</jk> <jv>pojo</jv>.toSomeSerializableForm();
 		}
@@ -54,7 +54,7 @@
 	Therefore it's possible to implement a swap that provides fully-customized output.
 </p>
 <p class='bpcode w800'>
-	<jk>public class</jk> MyJsonSwap <jk>extends</jk> PojoSwap&lt;MyPojo,Reader&gt; {
+	<jk>public class</jk> MyJsonSwap <jk>extends</jk> ObjectSwap&lt;MyPojo,Reader&gt; {
 
 		<jk>public</jk> MediaType[] forMediaTypes() {
 			<jk>return</jk> MediaType.<jsm>forStrings</jsm>(<js>"&#42;/json"</js>);
@@ -74,7 +74,7 @@
 		<jk>private</jk> MyPojo <jf>myPojo</jf>;
 	
 		<jc>// Swap applied to bean property.</jc>	
-		<ja>@Beanp</ja>(swap=MyPojoSwap.<jk>class</jk>)
+		<ja>@Beanp</ja>(swap=MyObjectSwap.<jk>class</jk>)
 		<jk>public</jk> MyPojo getMyPojo() {
 			<jk>return</jk> <jf>myPojo</jf>;
 		}
@@ -89,7 +89,7 @@
 <p class='bpcode w800'>
 	<jk>public class</jk> MyBean {
 
-		<ja>@Beanp</ja>(swap=MyPojoSwap.<jk>class</jk>)
+		<ja>@Beanp</ja>(swap=MyObjectSwap.<jk>class</jk>)
 		<jk>private</jk> MyPojo <jf>myPojo</jf>;
 	
 		<jk>public</jk> MyPojo getMyPojo() {
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/07.TemplatedSwaps.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/06.TemplatedSwaps.html
similarity index 96%
rename from juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/07.TemplatedSwaps.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/06.TemplatedSwaps.html
index 40ac40b..301f7af 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/07.TemplatedSwaps.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/06.TemplatedSwaps.html
@@ -34,7 +34,7 @@
 </p>
 <p class='bpcode w800'>
 	<jc>// Our templated swap class.</jc>
-	<jk>public class</jk> FreeMarkerSwap <jk>extends</jk> PojoSwap&lt;Object,Reader&gt; {
+	<jk>public class</jk> FreeMarkerSwap <jk>extends</jk> ObjectSwap&lt;Object,Reader&gt; {
 
 		<jk>public</jk> MediaType[] forMediaTypes() {
 			<jc>// Make sure this only applies to the HTML serializer.</jc>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/08.SurrogateClasses.html b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/07.SurrogateClasses.html
similarity index 82%
rename from juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/08.SurrogateClasses.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/07.SurrogateClasses.html
index 7d014bf..cd3ca25 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/08.SurrogateClasses.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/11.Swaps/07.SurrogateClasses.html
@@ -17,7 +17,7 @@
 
 <p>
 <p>
-	Surrogate classes are very similar in concept to <c>PojoSwaps</c> except they're simpler to define.
+	Surrogate classes are very similar in concept to <c>ObjectSwaps</c> except they're simpler to define.
 </p>
 <p>
 	For example, let's say we want to be able to serialize the following class, but it's not serializable for 
@@ -29,7 +29,7 @@
 	}
 </p>
 <p>
-	This could be solved with the following <c>PojoSwap</c>.
+	This could be solved with the following <c>ObjectSwap</c>.
 </p>
 <p class='bpcode w800'>
 	<jc>// A serializable bean with 1 property.</jc>
@@ -37,9 +37,9 @@
 		<jk>public</jk> String <jf>foo</jf>;
 	}
 		
-	<jc>// A PojoSwap that swaps out our non-serializable object with our serializable object.</jc>
-	<jk>public class</jk> MySwap <jk>extends</jk> PojoSwap&lt;MyNonSerializableClass,MySerializableSurrogate&gt; {
-		<ja>@Override</ja> <jc>/* PojoSwap */</jc>
+	<jc>// An ObjectSwap that swaps out our non-serializable object with our serializable object.</jc>
+	<jk>public class</jk> MySwap <jk>extends</jk> ObjectSwap&lt;MyNonSerializableClass,MySerializableSurrogate&gt; {
+		<ja>@Override</ja> <jc>/* ObjectSwap */</jc>
 		<jk>public</jk> MySerializableSurrogate swap(MyNonSerializableClass <jv>pojo</jv>) {
 			
 			<jc>// Create some serializable class and manually copy the data into it.</jc>
@@ -64,11 +64,11 @@
 	}
 </p>
 <p>
-	The surrogate class is registered in the same way as a <c>PojoSwap</c>:
+	The surrogate class is registered in the same way as a <c>ObjectSwap</c>:
 </p>
 <p class='bpcode w800'>
 	<jc>// Create a JSON serializer that can serialize Iterators.</jc>
-	WriterSerializer <jv>serializer</jv> = JsonSerializer.<jsm>create</jsm>().pojoSwaps(MySerializableSurrogate.<jk>class</jk>).build();
+	WriterSerializer <jv>serializer</jv> = JsonSerializer.<jsm>create</jsm>().swaps(MySerializableSurrogate.<jk>class</jk>).build();
 </p>
 <p>
 	When the serializer encounters the non-serializable class, it will serialize an instance of the surrogate 
@@ -76,5 +76,5 @@
 </p>
 
 <ul class='seealso'>
-	<li class='jic'>{@link oaj.transform.Surrogate}
+	<li class='jic'>{@link oaj.swap.Surrogate}
 </ul>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/13.DynamicallyAppliedAnnotations.html b/juneau-doc/docs/Topics/02.juneau-marshall/12.DynamicallyAppliedAnnotations.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/13.DynamicallyAppliedAnnotations.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/12.DynamicallyAppliedAnnotations.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms.html b/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms.html
deleted file mode 100644
index 1742086..0000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Transforms', flags:'todo'}
-
-<p>
-	By default, the Juneau framework can serialize and parse a wide variety of POJOs out-of-the-box.  
-	However, two special classes are provided tailor how certain Java objects are handled by the framework.
-	These classes are:
-</p>
-<ul class='javatree'>
-	<li class='jc'>{@del oaj.transform.BeanFilter} - Transforms that alter the way beans are handled.
-	<li class='jac'>{@link oaj.transform.PojoSwap} - Transforms that swap non-serializable POJOs with 
-		serializable POJOs during serialization (and optionally vis-versa during parsing).
-		<ul>
-			<li class='jc'>{@link oaj.transform.StringSwap} - Convenience subclass for swaps that convert 
-				objects to strings.
-			<li class='jc'>{@link oaj.transform.MapSwap} - Convenience subclass for swaps that convert 
-				objects to maps.
-		</ul>
-	</li>
-</ul>
-<p>
-	Transforms are added to serializers and parsers (and REST clients) using the following configuration properties:
-</p> 
-<ul class='javatree'>
-	<li class='jc'>{@link oaj.BeanContext}
-	<ul>
-		<li class='jf'>{@del BeanContext#BEAN_beanFilters BEAN_beanFilters}
-		<li class='jf'>{@del oaj.BeanContext#BEAN_swaps BEAN_swaps}
-	</ul>
-</ul>
-<p>
-	Annotations are also provided for specifying transforms directly on classes and methods (all described in later sections):
-</p>
-<ul class='javatree'>
-	<li class='ja'>
-		{@link oaj.annotation.Swap} 
-		- Used to tailor how non-bean POJOs get interpreted by the framework.
-	<li class='ja'>
-		{@link oaj.annotation.Bean} 
-		- Used to tailor how beans get interpreted by the framework.
-	<li class='ja'>
-		{@link oaj.annotation.Beanc} 
-		- Maps constructor arguments to property names on beans with read-only properties.
-	<li class='ja'>
-		{@link oaj.annotation.Beanp} 
-		- Used to tailor how bean properties get interpreted by the framework.
-	<li class='ja'>
-		{@link oaj.annotation.BeanIgnore} 
-		- Ignore classes, fields, and methods from being interpreted as bean or bean components.
-	<li class='ja'>
-		{@link oaj.annotation.NameProperty} 
-		- Identifies a setter as a method for setting the name of a POJO as it's known by its parent object.
-	<li class='ja'>
-		{@link oaj.annotation.ParentProperty} 
-		- Identifies a setter as a method for adding a parent reference to a child object.
-	<li class='ja'>
-		{@link oaj.annotation.Uri} 
-		- Used to identify a class or bean property as a URI.
-</ul>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/02.DefaultPojoSwaps.html b/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/02.DefaultPojoSwaps.html
deleted file mode 100644
index 2795fa3..0000000
--- a/juneau-doc/docs/Topics/02.juneau-marshall/12.Transforms/02.DefaultPojoSwaps.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- ***************************************************************************************************************************/
- -->
-
-{title:'Default PojoSwaps'}
-
-<p>
-	By default, all serializers and parsers have built in <c>PojoSwaps</c> defined for the following common data types:
-</p>
-<ul class='javatree'>
-	<li class='jc'>{@link java.util.Enumeration}
-	<li class='jc'>{@link java.util.Iterator}
-	<li class='jc'>{@link java.util.Locale}
-	<li class='jc'>{@link java.util.Class}
-	<li class='jc'>{@link java.util.Calendar} - ISO offset date-time.
-	<li class='jc'>{@link java.util.Date} - Local date-time
-	<li class='jc'>{@link java.time.Instant} - ISO instant.
-	<li class='jc'>{@link java.time.ZonedDateTime} - ISO offset date-time.
-	<li class='jc'>{@link java.time.LocalDate} - ISO local date.
-	<li class='jc'>{@link java.time.LocalDateTime} - ISO local date-time.
-	<li class='jc'>{@link java.time.LocalTime} - ISO local time.
-	<li class='jc'>{@link java.time.OffsetDateTime} - ISO offset date-time.
-	<li class='jc'>{@link java.time.OffsetTime} - ISO offset time.
-	<li class='jc'>{@link java.time.Year} - ISO year.
-	<li class='jc'>{@link java.time.YearMonth} - ISO year-month.
-	<li class='jc'>{@link java.time.Temporal} - ISO instant.
-	<li class='jc'>{@link java.util.TimeZone}
-	<li class='jc'>{@link javax.xml.datatype.XMLGregorianCalendar}
-	<li class='jc'>{@link java.time.ZoneId}
-</ul>
-<p>
-	Various other swaps are provided in the <c>org.apache.juneau.transforms</c> package:
-</p>
-<ul class='javatree'>
-	<li class='jp'><jk>org.apache.juneau.transforms</jk>
-		<ul>
-			<li class='jac'>{@link oaj.transforms.ByteArraySwap}
-			<ul>
-				<li class='jc'>{@link oaj.transforms.ByteArraySwap.Base64}
-				<li class='jc'>{@link oaj.transforms.ByteArraySwap.Hex}
-				<li class='jc'>{@link oaj.transforms.ByteArraySwap.SpacedHex}
-			</ul>
-			<li class='jac'>{@link oaj.transforms.InputStreamSwap}
-			<ul>
-				<li class='jc'>{@link oaj.transforms.InputStreamSwap.Base64}
-				<li class='jc'>{@link oaj.transforms.InputStreamSwap.Hex}
-				<li class='jc'>{@link oaj.transforms.InputStreamSwap.SpacedHex}
-			</ul>
-			<li class='jc'>{@link oaj.transforms.ReaderSwap}
-			<li class='jac'>{@link oaj.transforms.TemporalCalendarSwap}
-			<ul>
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.BasicIsoDate}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoDate}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoInstant}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoLocalDate}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoLocalDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoLocalTime}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoOffsetDate}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoOffsetDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoOffsetTime}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoOrdinalDate}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoTime}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoWeekDate}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.IsoZonedDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalCalendarSwap.Rfc1123DateTime}
-			</ul>
-			<li class='jac'>{@link oaj.transforms.TemporalDateSwap}
-			<ul>
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.BasicIsoDate}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoDate}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoInstant}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoLocalDate}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoLocalDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoLocalTime}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoOffsetDate}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoOffsetDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoOffsetTime}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoOrdinalDate}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoTime}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoWeekDate}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.IsoZonedDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalDateSwap.Rfc1123DateTime}
-			</ul>
-			<li class='jac'>{@link oaj.transforms.TemporalSwap}
-			<ul>
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.BasicIsoDate}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoDate}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoInstant}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoLocalDate}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoLocalDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoLocalTime}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoOffsetDate}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoOffsetDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoOffsetTime}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoOrdinalDate}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoTime}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoWeekDate}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoYear}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoYearMonth}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.IsoZonedDateTime}
-				<li class='jc'>{@link oaj.transforms.TemporalSwap.Rfc1123DateTime}
-			</ul>
-		</ul>
-	</li>
-</ul>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/14.BeanDictionaries.html b/juneau-doc/docs/Topics/02.juneau-marshall/13.BeanDictionaries.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/14.BeanDictionaries.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/13.BeanDictionaries.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/14.BeanDictionaries/01.BeanSubTypes.html b/juneau-doc/docs/Topics/02.juneau-marshall/13.BeanDictionaries/01.BeanSubTypes.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/14.BeanDictionaries/01.BeanSubTypes.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/13.BeanDictionaries/01.BeanSubTypes.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/15.VirtualBeans.html b/juneau-doc/docs/Topics/02.juneau-marshall/14.VirtualBeans.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/15.VirtualBeans.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/14.VirtualBeans.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/16.Recursion.html b/juneau-doc/docs/Topics/02.juneau-marshall/15.Recursion.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/16.Recursion.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/15.Recursion.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/17.ParsingIntoGenericModels.html b/juneau-doc/docs/Topics/02.juneau-marshall/16.ParsingIntoGenericModels.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/17.ParsingIntoGenericModels.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/16.ParsingIntoGenericModels.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/18.ReadingContinuousStreams.html b/juneau-doc/docs/Topics/02.juneau-marshall/17.ReadingContinuousStreams.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/18.ReadingContinuousStreams.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/17.ReadingContinuousStreams.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/19.MarshallingUris.html b/juneau-doc/docs/Topics/02.juneau-marshall/18.MarshallingUris.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/19.MarshallingUris.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/18.MarshallingUris.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/20.JacksonComparison.html b/juneau-doc/docs/Topics/02.juneau-marshall/19.JacksonComparison.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/20.JacksonComparison.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/19.JacksonComparison.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/21.PojoCategories.html b/juneau-doc/docs/Topics/02.juneau-marshall/20.PojoCategories.html
similarity index 98%
rename from juneau-doc/docs/Topics/02.juneau-marshall/21.PojoCategories.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/20.PojoCategories.html
index b0e4f6f..45644a8 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/21.PojoCategories.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/20.PojoCategories.html
@@ -140,10 +140,10 @@
 		<td>
 			<b>Swapped objects</b>
 			<br>These are objects that are not directly serializable, but have 
-			{@link oaj.transform.PojoSwap PojoSwaps} associated with them.  
+			{@link oaj.swap.ObjectSwap ObjectSwaps} associated with them.  
 			The purpose of a POJO swap is to convert an object to another object that is easier to serialize 
 			and parse.  
-			For example, the {@link oaj.transforms.TemporalDateSwap.IsoLocalDateTime} class can be used to 
+			For example, the {@link oaj.swaps.TemporalDateSwap.IsoLocalDateTime} class can be used to 
 			serialize {@link java.util.Date} objects to ISO8601 strings, and parse them back into 
 			{@link java.util.Date} objects.
 		</td>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/22.FluentAssertions.html b/juneau-doc/docs/Topics/02.juneau-marshall/21.FluentAssertions.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/22.FluentAssertions.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/21.FluentAssertions.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/01.JsonMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/01.JsonMethodology.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/01.JsonMethodology.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/01.JsonMethodology.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/02.JsonSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/02.JsonSerializers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/02.JsonSerializers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/02.JsonSerializers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/03.SimplifiedJson.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/03.SimplifiedJson.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/03.SimplifiedJson.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/03.SimplifiedJson.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/04.JsonParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/04.JsonParsers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/04.JsonParsers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/04.JsonParsers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/05.JsonAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/05.JsonAnnotation.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/05.JsonAnnotation.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/05.JsonAnnotation.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/06.JsonSchema.html b/juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/06.JsonSchema.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/23.JsonDetails/06.JsonSchema.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/22.JsonDetails/06.JsonSchema.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/01.XmlMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/01.XmlMethodology.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/01.XmlMethodology.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/01.XmlMethodology.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/02.XmlSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/02.XmlSerializers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/02.XmlSerializers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/02.XmlSerializers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/03.XmlParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/03.XmlParsers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/03.XmlParsers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/03.XmlParsers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/04.XmlBeanTypeNameAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/04.XmlBeanTypeNameAnnotation.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/04.XmlBeanTypeNameAnnotation.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/04.XmlBeanTypeNameAnnotation.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/05.XmlChildNameAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/05.XmlChildNameAnnotation.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/05.XmlChildNameAnnotation.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/05.XmlChildNameAnnotation.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/06.XmlFormatAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/06.XmlFormatAnnotation.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/06.XmlFormatAnnotation.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/06.XmlFormatAnnotation.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/07.XmlNamespaces.html b/juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/07.XmlNamespaces.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/24.XmlDetails/07.XmlNamespaces.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/23.XmlDetails/07.XmlNamespaces.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/01.HtmlMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/01.HtmlMethodology.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/01.HtmlMethodology.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/01.HtmlMethodology.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/02.HtmlSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/02.HtmlSerializers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/02.HtmlSerializers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/02.HtmlSerializers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/03.HtmlParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/03.HtmlParsers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/03.HtmlParsers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/03.HtmlParsers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/04.HtmlAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/04.HtmlAnnotation.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/04.HtmlAnnotation.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/04.HtmlAnnotation.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/05.HtmlRenderAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/05.HtmlRenderAnnotation.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/05.HtmlRenderAnnotation.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/05.HtmlRenderAnnotation.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/06.HtmlDocSerializer.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/06.HtmlDocSerializer.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/06.HtmlDocSerializer.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/06.HtmlDocSerializer.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/07.BasicHtmlDocTemplate.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/07.BasicHtmlDocTemplate.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/07.BasicHtmlDocTemplate.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/07.BasicHtmlDocTemplate.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/08.HtmlCustomTemplates.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/08.HtmlCustomTemplates.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/08.HtmlCustomTemplates.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/08.HtmlCustomTemplates.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/09.HtmlSchema.html b/juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/09.HtmlSchema.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/25.HtmlDetails/09.HtmlSchema.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/24.HtmlDetails/09.HtmlSchema.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.UonDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.UonDetails.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/26.UonDetails.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/25.UonDetails.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.UonDetails/01.UonMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.UonDetails/01.UonMethodology.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/26.UonDetails/01.UonMethodology.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/25.UonDetails/01.UonMethodology.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.UonDetails/02.UonSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.UonDetails/02.UonSerializers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/26.UonDetails/02.UonSerializers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/25.UonDetails/02.UonSerializers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/26.UonDetails/03.UonParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/25.UonDetails/03.UonParsers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/26.UonDetails/03.UonParsers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/25.UonDetails/03.UonParsers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails/01.UrlEncMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails/01.UrlEncMethodology.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails/01.UrlEncMethodology.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails/01.UrlEncMethodology.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails/02.UrlEncSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails/02.UrlEncSerializers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails/02.UrlEncSerializers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails/02.UrlEncSerializers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails/03.UrlEncParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails/03.UrlEncParsers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails/03.UrlEncParsers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails/03.UrlEncParsers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails/04.UrlEncodingAnnotation.html b/juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails/04.UrlEncodingAnnotation.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/27.UrlEncodingDetails/04.UrlEncodingAnnotation.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/26.UrlEncodingDetails/04.UrlEncodingAnnotation.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.MsgPackDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.MsgPackDetails.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/28.MsgPackDetails.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/27.MsgPackDetails.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.MsgPackDetails/01.MsgPackSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.MsgPackDetails/01.MsgPackSerializers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/28.MsgPackDetails/01.MsgPackSerializers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/27.MsgPackDetails/01.MsgPackSerializers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/28.MsgPackDetails/02.MsgPackParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/27.MsgPackDetails/02.MsgPackParsers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/28.MsgPackDetails/02.MsgPackParsers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/27.MsgPackDetails/02.MsgPackParsers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails/01.OpenApiMethodology.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails/01.OpenApiMethodology.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails/01.OpenApiMethodology.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails/01.OpenApiMethodology.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails/02.OpenApiSerializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails/02.OpenApiSerializers.html
similarity index 97%
rename from juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails/02.OpenApiSerializers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails/02.OpenApiSerializers.html
index 4126b19..b4bc41c 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails/02.OpenApiSerializers.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails/02.OpenApiSerializers.html
@@ -149,7 +149,7 @@
 						<li><c><jk>public byte</jk>[] toBytes() {...}</c>
 						<li><c><jk>public byte</jk>[]</jk> toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a <c><jk>byte</jk>[]</c> via a {@link oaj.transform.PojoSwap}.
+				<li>Any POJO transformable to a <c><jk>byte</jk>[]</c> via an {@link oaj.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -164,7 +164,7 @@
 						<li><c><jk>public</jk> Calendar toCalendar() {...}</c>
 						<li><c><jk>public</jk> Calendar toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.util.Calendar} via a {@link oaj.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.util.Calendar} via an {@link oaj.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -185,7 +185,7 @@
 					<ul>
 						<li><c><jk>public</jk> String toString() {...}</c>
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.String} via a {@link oaj.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.String} via an {@link oaj.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -202,7 +202,7 @@
 						<li><c><jk>public</jk> Boolean toBoolean() {...}</c>
 						<li><c><jk>public</jk> Boolean toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.Boolean} via a {@link oaj.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.Boolean} via an {@link oaj.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -219,7 +219,7 @@
 						<li><c><jk>public</jk> Integer toInteger() {...}</c>
 						<li><c><jk>public</jk> Integer toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to an {@link java.lang.Integer} via a {@link oaj.transform.PojoSwap}.
+				<li>Any POJO transformable to an {@link java.lang.Integer} via an {@link oaj.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -235,7 +235,7 @@
 						<li><c><jk>public</jk> Long toLong() {...}</c>
 						<li><c><jk>public</jk> Long toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.Long} via a {@link oaj.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.Long} via an {@link oaj.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -252,7 +252,7 @@
 						<li><c><jk>public</jk> Float toFloat() {...}</c>
 						<li><c><jk>public</jk> Float toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.Float} via a {@link oaj.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.Float} via an {@link oaj.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -268,7 +268,7 @@
 						<li><c><jk>public</jk> Double toDouble() {...}</c>
 						<li><c><jk>public</jk> Double toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.Double} via a {@link oaj.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.Double} via an {@link oaj.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -283,7 +283,7 @@
 					<ul>
 						<li><c><jk>public</jk> Boolean[][] toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to arrays of the default types via a {@link oaj.transform.PojoSwap}
+				<li>Any POJO transformable to arrays of the default types via an {@link oaj.swap.ObjectSwap}
 			</ul>
 		</td>
 	</tr>
@@ -302,7 +302,7 @@
 			<ul>
 				<li><c>Map&lt;String,Object&gt;</c> (default)
 				<li>Beans with properties of anything on this list.
-				<li>Any POJO transformable to a map via a {@link oaj.transform.PojoSwap}
+				<li>Any POJO transformable to a map via an {@link oaj.swap.ObjectSwap}
 			</ul>
 		</td>
 	</tr>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails/03.OpenApiParsers.html b/juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails/03.OpenApiParsers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/29.OpenApiDetails/03.OpenApiParsers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/28.OpenApiDetails/03.OpenApiParsers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage/01.SvlVariables.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/01.SvlVariables.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage/01.SvlVariables.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/01.SvlVariables.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage/02.VarResolvers.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/02.VarResolvers.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage/02.VarResolvers.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/02.VarResolvers.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage/03.DefaultVarResolver.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/03.DefaultVarResolver.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage/03.DefaultVarResolver.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/03.DefaultVarResolver.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage/04.SvlOtherNotes.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/04.SvlOtherNotes.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/30.SimpleVariableLanguage/04.SvlOtherNotes.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/04.SvlOtherNotes.html
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/31.BestPractices.html b/juneau-doc/docs/Topics/02.juneau-marshall/30.BestPractices.html
similarity index 100%
rename from juneau-doc/docs/Topics/02.juneau-marshall/31.BestPractices.html
rename to juneau-doc/docs/Topics/02.juneau-marshall/30.BestPractices.html
diff --git a/juneau-doc/docs/Topics/04.juneau-dto/04.DtoSwaggerUi.html b/juneau-doc/docs/Topics/04.juneau-dto/04.DtoSwaggerUi.html
index fe57c42..e150e21 100644
--- a/juneau-doc/docs/Topics/04.juneau-dto/04.DtoSwaggerUi.html
+++ b/juneau-doc/docs/Topics/04.juneau-dto/04.DtoSwaggerUi.html
@@ -34,7 +34,7 @@
 	with {@link oaj.dto.html5.Div} elements:
 </p>
 <p class='bpcode w800'>
-	<jk>public class</jk> SwaggerUI <jk>extends</jk> PojoSwap&lt;Swagger,Div&gt; {
+	<jk>public class</jk> SwaggerUI <jk>extends</jk> ObjectSwap&lt;Swagger,Div&gt; {
 	
 		<ja>@Override</ja>
 		<jk>public</jk> MediaType[] forMediaTypes() {
diff --git a/juneau-doc/docs/Topics/21.Security/01.SecurityMarshall.html b/juneau-doc/docs/Topics/21.Security/01.SecurityMarshall.html
index 7fe0755..deb435b 100644
--- a/juneau-doc/docs/Topics/21.Security/01.SecurityMarshall.html
+++ b/juneau-doc/docs/Topics/21.Security/01.SecurityMarshall.html
@@ -56,7 +56,7 @@ juneau-marshall
 </p>
 <p class='bpcode w800'>
 	<jc>// Don't do this!</jc>
-	<jk>public class</jk> MyInsecureSwap <jk>extends</jk> PojoSwap&lt;OMap,Object&gt; {
+	<jk>public class</jk> MyInsecureSwap <jk>extends</jk> ObjectSwap&lt;OMap,Object&gt; {
 		<jk>public</jk> Object swap(BeanSession session, OMap input) <jk>throws</jk> Exception {
 			<jc>// Security hole!</jc>
 			<jk>return</jk> Class.<jsf>forName</jsf>(input.getString(<js>"class"</js>)).newInstance();
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 78b526c..0305af4 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -190,18 +190,16 @@
 		<li><p><a class='doclink' href='#juneau-marshall.ContextAnnotations'>Context Annotations</a><span class='update'>created: 8.1.0, updated: 8.1.3,8.2.0,<b>9.0.0</b></span></p>
 		<li><p><a class='doclink' href='#juneau-marshall.OMap'>OMap and OList</a><span class='update'>updated: 8.2.0</span></p>
 		<li><p><a class='doclink' href='#juneau-marshall.ComplexDataTypes'>Complex Data Types</a><span class='update'>created: <b>9.0.0</b></span></p>
-		<li><p><a class='doclink' href='#juneau-marshall.Groups'>SerializerGroups and ParserGroups</a><span class='update'>updated: <b>9.0.0</b></span></p>
-		<li><p><a class='doclink' href='#juneau-marshall.ContextsBuildersSessionsPropertyStores'>Contexts, Builders, Sessions, and ContextProperties</a><span class='update'>updated: <b>9.0.0</b>, <b><red>review</red></b></span></p>
-		<li><p><a class='doclink' href='#juneau-marshall.Transforms'>Transforms</a><span class='update'><b><red>todo</red></b></span></p>
+		<li><p><a class='doclink' href='#juneau-marshall.SerializerSetsParserSets'>SerializerSets and ParserSets</a><span class='update'>updated: <b>9.0.0</b></span></p>
+		<li><p><a class='doclink' href='#juneau-marshall.Swaps'>Swaps</a><span class='update'>updated: <b>9.0.0</b></span></p>
 		<ol>
-			<li><p><a class='doclink' href='#juneau-marshall.Transforms.PojoSwaps'>Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></p>
-			<li><p><a class='doclink' href='#juneau-marshall.Transforms.DefaultPojoSwaps'>Default PojoSwaps</a></p>
-			<li><p><a class='doclink' href='#juneau-marshall.Transforms.AutoPojoSwaps'>Auto-detected POJO swaps</a><span class='update'>created: 8.1.0</span></p>
-			<li><p><a class='doclink' href='#juneau-marshall.Transforms.PerMediaTypePojoSwaps'>Per-media-type Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></p>
-			<li><p><a class='doclink' href='#juneau-marshall.Transforms.OneWayPojoSwaps'>One-way Swaps</a></p>
-			<li><p><a class='doclink' href='#juneau-marshall.Transforms.SwapAnnotation'>@Swap Annotation</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p>
-			<li><p><a class='doclink' href='#juneau-marshall.Transforms.TemplatedSwaps'>Templated Swaps</a></p>
-			<li><p><a class='doclink' href='#juneau-marshall.Transforms.SurrogateClasses'>Surrogate Classes</a></p>
+			<li><p><a class='doclink' href='#juneau-marshall.Swaps.DefaultPojoSwaps'>Default PojoSwaps</a></p>
+			<li><p><a class='doclink' href='#juneau-marshall.Swaps.AutoPojoSwaps'>Auto-detected POJO swaps</a><span class='update'>created: 8.1.0</span></p>
+			<li><p><a class='doclink' href='#juneau-marshall.Swaps.PerMediaTypePojoSwaps'>Per-media-type Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></p>
+			<li><p><a class='doclink' href='#juneau-marshall.Swaps.OneWayPojoSwaps'>One-way Swaps</a></p>
+			<li><p><a class='doclink' href='#juneau-marshall.Swaps.SwapAnnotation'>@Swap Annotation</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='#juneau-marshall.Swaps.TemplatedSwaps'>Templated Swaps</a></p>
+			<li><p><a class='doclink' href='#juneau-marshall.Swaps.SurrogateClasses'>Surrogate Classes</a></p>
 		</ol>
 		<li><p><a class='doclink' href='#juneau-marshall.DynamicallyAppliedAnnotations'>Dynamically Applied Annotations</a><span class='update'>created: 8.1.3</span></p>
 		<li><p><a class='doclink' href='#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a></p>
@@ -946,7 +944,7 @@
 	</p>
 	<p> 
 		{@doc PojoSwaps POJO swaps} allow you to replace non-serializable POJOs with serializable equivalents.
-		The {@link org.apache.juneau.transforms} package contains a variety of predefined swaps.
+		The {@link org.apache.juneau.swaps} package contains a variety of predefined swaps.
 	</p>
 	<p class='bcode w800'>
 	<jc>// Create a serializer from scratch programmatically using a builder.</jc>
@@ -1200,15 +1198,15 @@
 	</ul>
 </div>
 
-<h5 class='toc'>Serializer and Parser Groups</h5>
+<h5 class='toc'>Serializer and Parser Sets</h5>
 <div class='topic'>
 	<p>
-		<code>SerializerGroup</code> and <code>ParserGroup</code> classes allow serializers and parsers 
+		<code>SerializerSet</code> and <code>ParserSet</code> classes allow serializers and parsers 
 		to be retrieved by W3C-compliant HTTP <code>Accept</code> and <code>Content-Type</code> values:
 	</p>
 	<p class='bcode w800'>
 	<jc>// Construct a new serializer group with configuration parameters that get applied to all serializers.</jc>
-	SerializerGroup <jv>serializerGroup</jv> = SerializerGroup
+	SerializerSet <jv>serializerSet</jv> = SerializerSet
 		.<jsm>create</jsm>()
 		.add(JsonSerializer.<jk>class</jk>, UrlEncodingSerializer.<jk>class</jk>);
 		.forEach(<jv>x</jv> -> <jv>x</jv>.swaps(CalendarSwap.ISO8601DT.<jk>class</jk>))
@@ -1217,23 +1215,23 @@
 
 	<jc>// Find the appropriate serializer by Accept type and serialize our POJO to the specified writer.</jc>
 	<jc>// Fully RFC2616 compliant.</jc>
-	<jv>serializerGroup</jv>
+	<jv>serializerSet</jv>
 		.getSerializer(<js>"text/invalid, text/json;q=0.8, text/*;q:0.6, *\/*;q=0.0"</js>)
 		.serialize(<jv>person</jv>, <jv>myWriter</jv>);
 		
 	<jc>// Construct a new parser group with configuration parameters that get applied to all parsers.</jc>
-	ParserGroup <jv>parserGroup</jv> = ParserGroup
+	ParserSet <jv>parserSet</jv> = ParserSet
 		.<jsm>create</jsm>()
 		.add(JsonParser.<jk>class</jk>, UrlEncodingParser.<jk>class</jk>);
  		.forEach(<jv>x</jv> -&gt; <jv>x</jv>.swaps(CalendarSwap.ISO8601DT.<jk>class</jk>))
  		.build();
 
-	Person <jv>person</jv> = <jv>parserGroup</jv>
+	Person <jv>person</jv> = <jv>parserSet</jv>
 		.getParser(<js>"text/json"</js>)
 		.parse(<jv>myReader</jv>, Person.<jk>class</jk>);
 	</p>
 	<ul class='seealso'>
-		<li class='link'>{@doc Groups SerializerGroups and ParserGroups} for more information.
+		<li class='link'>{@doc SerializerSetsParserSets SerializerSets and ParserSets} for more information.
 	</ul>
 </div>
 
@@ -2609,7 +2607,7 @@
 </p>
 <p>
 	The {@link org.apache.juneau.annotation.Bean#interceptor() @Bean(interceptor)} annotation
-	and {@link org.apache.juneau.transform.BeanInterceptor} class can be used to perform interception
+	and {@link org.apache.juneau.swap.BeanInterceptor} class can be used to perform interception
 	and inline handling of bean getter and setter calls.
 </p>
 <p class='bpcode w800'>
@@ -3094,7 +3092,7 @@
 		<p class='bcode w800 nomargin'>
 	<jk>public static</jk> Builder <jsm>create</jsm>() {...}
 		</p>
-	<li>A public constructor on the POJO class that takes in a single parameter that implements the {@link org.apache.juneau.transform.Builder} interface.
+	<li>A public constructor on the POJO class that takes in a single parameter that implements the {@link org.apache.juneau.swap.Builder} interface.
 		<br>The builder class must have a public no-arg constructor.
 		<p class='bcode w800 nomargin'>
 	<jk>public</jk> MyBean(Builder <jv>builder</jv>) {...}
@@ -3121,7 +3119,7 @@
 </ul>
 <ul class='seealso'>
 	<li class='ja'>{@link org.apache.juneau.annotation.Builder}
-	<li class='jic'>{@link org.apache.juneau.transform.Builder}
+	<li class='jic'>{@link org.apache.juneau.swap.Builder}
 </ul>
 </div><!-- END: 2.4.7 - juneau-marshall.JavaBeansSupport.PojoBuilders -->
 
@@ -3589,8 +3587,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Groups' id='juneau-marshall.Groups'>2.10 - SerializerGroups and ParserGroups</a><span class='update'>updated: <b>9.0.0</b></span></h3>
-<div class='topic'><!-- START: 2.10 - juneau-marshall.Groups -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SerializerSetsParserSets' id='juneau-marshall.SerializerSetsParserSets'>2.10 - SerializerSets and ParserSets</a><span class='update'>updated: <b>9.0.0</b></span></h3>
+<div class='topic'><!-- START: 2.10 - juneau-marshall.SerializerSetsParserSets -->
 <p>
 	On top of the serializers and parsers are the {@link org.apache.juneau.serializer.SerializerSet} and 
 	{@link org.apache.juneau.parser.ParserSet} classes.
@@ -3600,7 +3598,7 @@
 <p class='bpcode w800'>
 	<jc>// Construct a new serializer group with configuration parameters that get applied 
 	// to all serializers.</jc>
-	SerializerGroup <jv>group</jv> = SerializerGroup.<jsm>create</jsm>()
+	SerializerSet <jv>serializers</jv> = SerializerSet.<jsm>create</jsm>()
 		.add(JsonSerializer.<jk>class</jk>, UrlEncodingSerializer.<jk>class</jk>)
 		.forEach(<jv>x</jv> -&gt; <jv>x</jv>.swaps(TemporalCalendarSwap.IsoLocalDateTime.<jk>class</jk>))
 		.forEachWS(<jv>x</jv> -&gt; <jv>x</jv>.ws())   <jc>// or .useWhitespace(true)</jc>
@@ -3608,231 +3606,33 @@
 
 	<jc>// Find the appropriate serializer by Accept type and serialize our POJO to the 
 	// specified writer.</jc>
-	<jv>group</jv>.getSerializer(<js>"text/invalid, text/json;q=0.8, text/*;q:0.6, *\/*;q=0.0"</js>)
+	<jv>serializers</jv>
+		.getSerializer(<js>"text/invalid, text/json;q=0.8, text/*;q:0.6, *\/*;q=0.0"</js>)
 		.serialize(<jv>myPerson</jv>, <jv>myWriter</jv>);
 		
 	<jc>// Construct a new parser group with configuration parameters that get applied to all parsers.</jc>
-	ParserGroup <jv>group</jv> = ParserGroup.<jsm>create</jsm>()
+	ParserSet <jv>parsers</jv> = ParserSet.<jsm>create</jsm>()
 		.add(JsonSerializer.<jk>class</jk>, UrlEncodingSerializer.<jk>class</jk>)
  		.forEach(<jv>x</jv> -&gt; <jv>x</jv>.swaps(CalendarSwap.IsoLocalDateTime.<jk>class</jk>))
  		.build();
 
-	Person <jv>myPerson</jv> = <jv>group</jv>.getParser(<js>"text/json"</js>).parse(<jv>myReader</jv>, Person.<jk>class</jk>);
+	Person <jv>myPerson</jv> = <jv>parsers</jv>
+		.getParser(<js>"text/json"</js>)
+		.parse(<jv>myReader</jv>, Person.<jk>class</jk>);
 </p>
 <p>
-	The REST servlet API builds upon the <c>SerializerGroup</c> and <c>ParserGroup</c> classes 
+	The REST servlet API builds upon the <c>SerializerSet</c> and <c>ParserSet</c> classes 
 	to provide annotated REST servlets that automatically negotiate the HTTP media types and allow the developer
 	to work with requests and responses as POJOs.
 </p>
-</div><!-- END: 2.10 - juneau-marshall.Groups -->
-
-<!-- ==================================================================================================== -->
-
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ContextsBuildersSessionsPropertyStores' id='juneau-marshall.ContextsBuildersSessionsPropertyStores'>2.11 - Contexts, Builders, Sessions, and ContextProperties</a><span class='update'>updated: <b>9.0.0</b>, <b><red>review</red></b></span></h3>
-<div class='topic'><!-- START: 2.11 - juneau-marshall.ContextsBuildersSessionsPropertyStores -->
-<p>
-	All the serializers, parsers, and REST server/client classes use the following design pattern:
-</p>
-<ul class='spaced-list'>
-	<li>
-		<l>Context</l> - A thread-safe read-only object.
-		<ul>
-			<li>Heavy to construct and designed to be cached and reused.
-			<li>Created by <l>Context.Builder</l> classes.
-			<li>Examples:  <c>BeanContext</c>, <c>JsonSerializer</c>
-		</ul>
-	<li>
-		<l>Session</l> - A non-thread-safe single-use object with configuration combined from context and 
-		runtime args such as locale/timezone.
-		<ul>
-			<li>Lightweight objects that take a minimum amount of time to instantiate and are not typically reused.
-			<li>Created by <c>Context</c> objects.
-			<li>Examples:  <c>BeanSession</c>, <c>JsonSerializerSession</c>
-		</ul>
-	<li>
-		<l>ContextProperties</l> - A thread-safe read-only set of configuration properties.
-		<ul>
-			<li>Heavier to create than <c>Sessions</c> but lighter than <c>Contexts</c>.
-			<li>Each <c>Context</c> contains one <c>ContextProperties</c> that defines all the configuration about that object.
-			<li>Created by <l>ContextPropertiesBuilder</l> classes.
-		</ul>
-</ul>	
-<p>
-	For example, the class hierarchy for <c>JsonSerializer</c> is:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>Object</c>
-	<ul>
-		<li class='jac'>{@link org.apache.juneau.Context}
-		<ul>
-			<li class='jc'>{@link org.apache.juneau.BeanContext}
-			<ul>
-				<li class='jac'>{@link org.apache.juneau.serializer.Serializer}
-				<ul>
-					<li class='jac'>{@link org.apache.juneau.serializer.WriterSerializer}
-					<ul>
-						<li class='jc'>{@link org.apache.juneau.json.JsonSerializer}
-					</ul>
-				</ul>
-			</ul>
-		</ul>
-	</ul>
-</ul>
-<p>
-	Each context object in the hierarchy define properties that can be stored in a <c>ContextProperties</c>
-	such as <jsf>WSERIALIZER_useWhitespace</jsf> or <jsf>JSON_simpleMode</jsf>.
-</p>
-<p>
-	The class hierarchy for <c>JsonSerializer.Builder</c> is:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>Object</c>
-	<ul>
-		<li class='jac'>{@link org.apache.juneau.Context.Builder}
-		<ul>
-			<li class='jc'>{@link org.apache.juneau.BeanContext.Builder}
-			<ul>
-				<li class='jac'>{@link org.apache.juneau.serializer.Serializer.Builder}
-				<ul>
-					<li class='jac'>{@link org.apache.juneau.serializer.WriterSerializer.Builder}
-					<ul>
-						<li class='jc'>{@link org.apache.juneau.json.JsonSerializer.Builder}
-					</ul>
-				</ul>
-			</ul>
-		</ul>
-	</ul>
-</ul>
-<p>
-	The class hierarchy for <c>JsonSerializerSession</c> is:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>Object</c>
-	<ul>
-		<li class='jac'>{@link org.apache.juneau.Session}
-		<ul>
-			<li class='jc'>{@link org.apache.juneau.BeanSession}
-			<ul>
-				<li class='jac'>{@link org.apache.juneau.serializer.SerializerSession}
-				<ul>
-					<li class='jac'>{@link org.apache.juneau.serializer.WriterSerializerSession}
-					<ul>
-						<li class='jc'>{@link org.apache.juneau.json.JsonSerializerSession}
-					</ul>
-				</ul>
-			</ul>
-		</ul>
-	</ul>
-</ul>
-<p>
-	The general idea behind a {@del org.apache.juneau.ContextProperties} is to serve as a reusable configuration of an artifact 
-	(such as a serializer) such that the artifact can be cached and reused if the property stores are 'equal'.
-</p>
-<p>
-	For example, two serializers of the same type created with the same configuration will always end up being
-	the same serializer: 
-</p>
-<p class='bpcode w800'>
-	<jc>// Two serializers created with identical configurations will always be the same copy.</jc> 
-	WriterSerializer <jv>s1</jv> = JsonSerializer.<jsm>create</jsm>().swaps(MySwap.<jk>class</jk>).simpleMode().build();
-	WriterSerializer <jv>s2</jv> = JsonSerializer.<jsm>create</jsm>().set(<jsf>JSON_simpleMode</jsf>).swaps(MySwap.<jk>class</jk>).build();
-	<jk>assert</jk>(<jv>s1</jv> == <jv>s2</jv>);
-</p>
-<p>
-	This has the effect of significantly improving performance especially if you're creating many 
-	serializers and parsers.
-</p>
-<p>
-	The {@del org.apache.juneau.ContextPropertiesBuilder} class is used to build up and instantiate immutable 
-	<c>ContextProperties</c> objects.
-</p>
-<p>
-	In the example above, the property store being built looks like the following:
-</p>
-<p class='bpcode w800'>
-	ContextProperties <jv>ps</jv> = ContextProperties
-		.<jsm>create</jsm>()
-		.set(<js>"BeanContext.swaps.lo"</js>, MySwap.<jk>class</jk>)
-		.set(<js>"JsonSerializer.simpleMode.b"</js>)
-		.build();
-</p>
-<p>
-	Property stores are immutable, comparable, and their hashcodes are calculated exactly one time.
-	That makes them particularly suited for use as hashmap keys, and thus for caching reusable serializers and parsers.
-</p>
-<p>
-	Refer to the {@del org.apache.juneau.ContextProperties} javadoc for a detailed explanation on how
-	property stores work.
-</p>
-</div><!-- END: 2.11 - juneau-marshall.ContextsBuildersSessionsPropertyStores -->
-
-<!-- ==================================================================================================== -->
-
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms' id='juneau-marshall.Transforms'>2.12 - Transforms</a><span class='update'><b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 2.12 - juneau-marshall.Transforms -->
-<p>
-	By default, the Juneau framework can serialize and parse a wide variety of POJOs out-of-the-box.  
-	However, two special classes are provided tailor how certain Java objects are handled by the framework.
-	These classes are:
-</p>
-<ul class='javatree'>
-	<li class='jc'>{@del org.apache.juneau.transform.BeanFilter} - Transforms that alter the way beans are handled.
-	<li class='jac'>{@link org.apache.juneau.transform.PojoSwap} - Transforms that swap non-serializable POJOs with 
-		serializable POJOs during serialization (and optionally vis-versa during parsing).
-		<ul>
-			<li class='jc'>{@link org.apache.juneau.transform.StringSwap} - Convenience subclass for swaps that convert 
-				objects to strings.
-			<li class='jc'>{@link org.apache.juneau.transform.MapSwap} - Convenience subclass for swaps that convert 
-				objects to maps.
-		</ul>
-	</li>
-</ul>
-<p>
-	Transforms are added to serializers and parsers (and REST clients) using the following configuration properties:
-</p> 
-<ul class='javatree'>
-	<li class='jc'>{@link org.apache.juneau.BeanContext}
-	<ul>
-		<li class='jf'>{@del BeanContext#BEAN_beanFilters BEAN_beanFilters}
-		<li class='jf'>{@del org.apache.juneau.BeanContext#BEAN_swaps BEAN_swaps}
-	</ul>
-</ul>
-<p>
-	Annotations are also provided for specifying transforms directly on classes and methods (all described in later sections):
-</p>
-<ul class='javatree'>
-	<li class='ja'>
-		{@link org.apache.juneau.annotation.Swap} 
-		- Used to tailor how non-bean POJOs get interpreted by the framework.
-	<li class='ja'>
-		{@link org.apache.juneau.annotation.Bean} 
-		- Used to tailor how beans get interpreted by the framework.
-	<li class='ja'>
-		{@link org.apache.juneau.annotation.Beanc} 
-		- Maps constructor arguments to property names on beans with read-only properties.
-	<li class='ja'>
-		{@link org.apache.juneau.annotation.Beanp} 
-		- Used to tailor how bean properties get interpreted by the framework.
-	<li class='ja'>
-		{@link org.apache.juneau.annotation.BeanIgnore} 
-		- Ignore classes, fields, and methods from being interpreted as bean or bean components.
-	<li class='ja'>
-		{@link org.apache.juneau.annotation.NameProperty} 
-		- Identifies a setter as a method for setting the name of a POJO as it's known by its parent object.
-	<li class='ja'>
-		{@link org.apache.juneau.annotation.ParentProperty} 
-		- Identifies a setter as a method for adding a parent reference to a child object.
-	<li class='ja'>
-		{@link org.apache.juneau.annotation.Uri} 
-		- Used to identify a class or bean property as a URI.
-</ul>
+</div><!-- END: 2.10 - juneau-marshall.SerializerSetsParserSets -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms.PojoSwaps' id='juneau-marshall.Transforms.PojoSwaps'>2.12.1 - Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></h4>
-<div class='topic'><!-- START: 2.12.1 - juneau-marshall.Transforms.PojoSwaps -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Swaps' id='juneau-marshall.Swaps'>2.11 - Swaps</a><span class='update'>updated: <b>9.0.0</b></span></h3>
+<div class='topic'><!-- START: 2.11 - juneau-marshall.Swaps -->
 <p>
-	{@link org.apache.juneau.transform.PojoSwap Swaps} are a critical component of Juneau.
+	{@link org.apache.juneau.swap.ObjectSwap Swaps} are a critical component of Juneau.
 	They allow the serializers and parsers to handle Java objects that wouldn't normally be serializable.
 </p>
 <p>
@@ -3924,12 +3724,11 @@
 	<jv>json</jv> = <jv>serializer</jv>.serialize(<jv>bytes2d</jv>);		<jc>// Produces "['AQID','BAUG',null]"</jc>
 	<jv>bytes2d</jv> = <jv>parser</jv>.parse(<jv>json</jv>, <jk>byte</jk>[][].<jk>class</jk>);		<jc>// Reproduces {{1,2,3},{4,5,6},null}</jc>
 </p>
-</div><!-- END: 2.12.1 - juneau-marshall.Transforms.PojoSwaps -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms.DefaultPojoSwaps' id='juneau-marshall.Transforms.DefaultPojoSwaps'>2.12.2 - Default PojoSwaps</a></h4>
-<div class='topic'><!-- START: 2.12.2 - juneau-marshall.Transforms.DefaultPojoSwaps -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Swaps.DefaultPojoSwaps' id='juneau-marshall.Swaps.DefaultPojoSwaps'>2.11.1 - Default PojoSwaps</a></h4>
+<div class='topic'><!-- START: 2.11.1 - juneau-marshall.Swaps.DefaultPojoSwaps -->
 <p>
 	By default, all serializers and parsers have built in <c>PojoSwaps</c> defined for the following common data types:
 </p>
@@ -3955,89 +3754,89 @@
 	<li class='jc'>{@link java.time.ZoneId}
 </ul>
 <p>
-	Various other swaps are provided in the <c>org.apache.juneau.transforms</c> package:
+	Various other swaps are provided in the <c>org.apache.juneau.swaps</c> package:
 </p>
 <ul class='javatree'>
-	<li class='jp'><jk>org.apache.juneau.transforms</jk>
+	<li class='jp'><jk>org.apache.juneau.swaps</jk>
 		<ul>
-			<li class='jac'>{@link org.apache.juneau.transforms.ByteArraySwap}
+			<li class='jac'>{@link org.apache.juneau.swaps.ByteArraySwap}
 			<ul>
-				<li class='jc'>{@link org.apache.juneau.transforms.ByteArraySwap.Base64}
-				<li class='jc'>{@link org.apache.juneau.transforms.ByteArraySwap.Hex}
-				<li class='jc'>{@link org.apache.juneau.transforms.ByteArraySwap.SpacedHex}
+				<li class='jc'>{@link org.apache.juneau.swaps.ByteArraySwap.Base64}
+				<li class='jc'>{@link org.apache.juneau.swaps.ByteArraySwap.Hex}
+				<li class='jc'>{@link org.apache.juneau.swaps.ByteArraySwap.SpacedHex}
 			</ul>
-			<li class='jac'>{@link org.apache.juneau.transforms.InputStreamSwap}
+			<li class='jac'>{@link org.apache.juneau.swaps.InputStreamSwap}
 			<ul>
-				<li class='jc'>{@link org.apache.juneau.transforms.InputStreamSwap.Base64}
-				<li class='jc'>{@link org.apache.juneau.transforms.InputStreamSwap.Hex}
-				<li class='jc'>{@link org.apache.juneau.transforms.InputStreamSwap.SpacedHex}
+				<li class='jc'>{@link org.apache.juneau.swaps.InputStreamSwap.Base64}
+				<li class='jc'>{@link org.apache.juneau.swaps.InputStreamSwap.Hex}
+				<li class='jc'>{@link org.apache.juneau.swaps.InputStreamSwap.SpacedHex}
 			</ul>
-			<li class='jc'>{@link org.apache.juneau.transforms.ReaderSwap}
-			<li class='jac'>{@link org.apache.juneau.transforms.TemporalCalendarSwap}
+			<li class='jc'>{@link org.apache.juneau.swaps.ReaderSwap}
+			<li class='jac'>{@link org.apache.juneau.swaps.TemporalCalendarSwap}
 			<ul>
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.BasicIsoDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoInstant}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoLocalDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoLocalDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoLocalTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoOffsetDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoOffsetDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoOffsetTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoOrdinalDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoWeekDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.IsoZonedDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap.Rfc1123DateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.BasicIsoDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoInstant}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoLocalDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoLocalDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoLocalTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoOffsetDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoOffsetDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoOffsetTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoOrdinalDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoWeekDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.IsoZonedDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap.Rfc1123DateTime}
 			</ul>
-			<li class='jac'>{@link org.apache.juneau.transforms.TemporalDateSwap}
+			<li class='jac'>{@link org.apache.juneau.swaps.TemporalDateSwap}
 			<ul>
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.BasicIsoDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoInstant}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoLocalDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoLocalDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoLocalTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoOffsetDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoOffsetDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoOffsetTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoOrdinalDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoWeekDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.IsoZonedDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap.Rfc1123DateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.BasicIsoDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoInstant}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoLocalDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoLocalDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoLocalTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoOffsetDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoOffsetDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoOffsetTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoOrdinalDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoWeekDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.IsoZonedDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap.Rfc1123DateTime}
 			</ul>
-			<li class='jac'>{@link org.apache.juneau.transforms.TemporalSwap}
+			<li class='jac'>{@link org.apache.juneau.swaps.TemporalSwap}
 			<ul>
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.BasicIsoDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoInstant}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoLocalDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoLocalDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoLocalTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoOffsetDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoOffsetDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoOffsetTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoOrdinalDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoWeekDate}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoYear}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoYearMonth}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.IsoZonedDateTime}
-				<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap.Rfc1123DateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.BasicIsoDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoInstant}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoLocalDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoLocalDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoLocalTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoOffsetDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoOffsetDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoOffsetTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoOrdinalDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoWeekDate}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoYear}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoYearMonth}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.IsoZonedDateTime}
+				<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap.Rfc1123DateTime}
 			</ul>
 		</ul>
 	</li>
 </ul>
-</div><!-- END: 2.12.2 - juneau-marshall.Transforms.DefaultPojoSwaps -->
+</div><!-- END: 2.11.1 - juneau-marshall.Swaps.DefaultPojoSwaps -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms.AutoPojoSwaps' id='juneau-marshall.Transforms.AutoPojoSwaps'>2.12.3 - Auto-detected POJO swaps</a><span class='update'>created: 8.1.0</span></h4>
-<div class='topic'><!-- START: 2.12.3 - juneau-marshall.Transforms.AutoPojoSwaps -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Swaps.AutoPojoSwaps' id='juneau-marshall.Swaps.AutoPojoSwaps'>2.11.2 - Auto-detected POJO swaps</a><span class='update'>created: 8.1.0</span></h4>
+<div class='topic'><!-- START: 2.11.2 - juneau-marshall.Swaps.AutoPojoSwaps -->
 <p>
 	Various methods can be defined on a class directly to affect how it gets serialized.
 	This can often be simpler than using <c>PojoSwaps</c>.
@@ -4191,17 +3990,17 @@
 		}
 	}
 </p>
-</div><!-- END: 2.12.3 - juneau-marshall.Transforms.AutoPojoSwaps -->
+</div><!-- END: 2.11.2 - juneau-marshall.Swaps.AutoPojoSwaps -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms.PerMediaTypePojoSwaps' id='juneau-marshall.Transforms.PerMediaTypePojoSwaps'>2.12.4 - Per-media-type Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></h4>
-<div class='topic'><!-- START: 2.12.4 - juneau-marshall.Transforms.PerMediaTypePojoSwaps -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Swaps.PerMediaTypePojoSwaps' id='juneau-marshall.Swaps.PerMediaTypePojoSwaps'>2.11.3 - Per-media-type Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></h4>
+<div class='topic'><!-- START: 2.11.3 - juneau-marshall.Swaps.PerMediaTypePojoSwaps -->
 <p>
 	Swaps can also be defined per-media-type.		
 </p>
 <p>	
-	The {@link org.apache.juneau.transform.PojoSwap#forMediaTypes()} method can be overridden to 
+	The {@link org.apache.juneau.swap.ObjectSwap#forMediaTypes()} method can be overridden to 
 	provide a set of media types that the swap is invoked on.
 	It's also possible to define multiple swaps against the same POJO as long as they're differentiated 
 	by media type.
@@ -4252,21 +4051,21 @@
 		<ja>@Test</ja>
 		<jk>public void</jk> doTest() <jk>throws</jk> Exception {
 
-			SerializerGroup <jv>group</jv> = SerializerGroup.<jsm>create</jsm>()
-				.append(JsonSerializer.<jk>class</jk>, XmlSerializer.<jk>class</jk>, HtmlSerializer.<jk>class</jk>)
-				.sq()
-				.swaps(MyJsonSwap.<jk>class</jk>, MyXmlSwap.<jk>class</jk>, MyOtherSwap.<jk>class</jk>)
+			SerializerSet <jv>serializers</jv> = SerializersSet.<jsm>create</jsm>()
+				.add(JsonSerializer.<jk>class</jk>, XmlSerializer.<jk>class</jk>, HtmlSerializer.<jk>class</jk>)
+				.forEach(<jv>x</jv> -&gt; <jv>x</jv>.swaps(MyJsonSwap.<jk>class</jk>, MyXmlSwap.<jk>class</jk>, MyOtherSwap.<jk>class</jk>))
+				.forEachWS(<jv>x</jv> -&gt; <jv>x</jv>.ws())
 				.build();
 
 			MyPojo <jv>myPojo</jv> = <jk>new</jk> MyPojo();
 
-			String <jv>json</jv> = <jv>group</jv>.getWriterSerializer(<js>"text/json"</js>).serialize(<jv>myPojo</jv>);
+			String <jv>json</jv> = <jv>seralizers</jv>.getWriterSerializer(<js>"text/json"</js>).serialize(<jv>myPojo</jv>);
 			<jsm>assertEquals</jsm>(<js>"'It\\'s JSON!'"</js>, <jv>json</jv>);
 
-			String <jv>xml</jv> = <jv>group</jv>.getWriterSerializer(<js>"text/xml"</js>).serialize(<jv>myPojo</jv>);
+			String <jv>xml</jv> = <jv>seralizers</jv>.getWriterSerializer(<js>"text/xml"</js>).serialize(<jv>myPojo</jv>);
 			<jsm>assertEquals</jsm>(<js>"&lt;string&gt;It's XML!&lt;/string&gt;"</js>, <jv>xml</jv>);
 
-			String <jv>html</jv> = <jv>group</jv>.getWriterSerializer(<js>"text/html"</js>).serialize(<jv>myPojo</jv>);
+			String <jv>html</jv> = <jv>seralizers</jv>.getWriterSerializer(<js>"text/html"</js>).serialize(<jv>myPojo</jv>);
 			<jsm>assertEquals</jsm>(<js>"&lt;string&gt;It's something else!&lt;/string&gt;"</js>, <jv>html</jv>);
 		}
 	}
@@ -4291,12 +4090,12 @@
 	<ja>@Swap</ja>(mediaTypes=<js>"&#42;/*"</js>)
 	<jk>public static class</jk> MyOtherSwap <jk>extends</jk> PojoSwap&lt;MyPojo,String&gt; {...}
 </p>
-</div><!-- END: 2.12.4 - juneau-marshall.Transforms.PerMediaTypePojoSwaps -->
+</div><!-- END: 2.11.3 - juneau-marshall.Swaps.PerMediaTypePojoSwaps -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms.OneWayPojoSwaps' id='juneau-marshall.Transforms.OneWayPojoSwaps'>2.12.5 - One-way Swaps</a></h4>
-<div class='topic'><!-- START: 2.12.5 - juneau-marshall.Transforms.OneWayPojoSwaps -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Swaps.OneWayPojoSwaps' id='juneau-marshall.Swaps.OneWayPojoSwaps'>2.11.4 - One-way Swaps</a></h4>
+<div class='topic'><!-- START: 2.11.4 - juneau-marshall.Swaps.OneWayPojoSwaps -->
 <p>
 	In the previous sections, we defined two-way swaps, meaning swaps where the original objects could be 
 	reconstructing during parsing. 
@@ -4343,12 +4142,12 @@
 	ReaderParser <jv>parser</jv> = JsonParser.<jsm>create</jsm>().swaps(IteratorSwap.<jk>class</jk>).build();
 	<jv>iterator</jv> = <jv>parser</jv>.parse(<jv>json</jv>, Iterator.<jk>class</jk>);		<jc>// Throws ParseException!!!</jc>
 </p>
-</div><!-- END: 2.12.5 - juneau-marshall.Transforms.OneWayPojoSwaps -->
+</div><!-- END: 2.11.4 - juneau-marshall.Swaps.OneWayPojoSwaps -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms.SwapAnnotation' id='juneau-marshall.Transforms.SwapAnnotation'>2.12.6 - @Swap Annotation</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 2.12.6 - juneau-marshall.Transforms.SwapAnnotation -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Swaps.SwapAnnotation' id='juneau-marshall.Swaps.SwapAnnotation'>2.11.5 - @Swap Annotation</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 2.11.5 - juneau-marshall.Swaps.SwapAnnotation -->
 <p>
 	{@link org.apache.juneau.annotation.Swap @Swap} can be used to associate a swap class using an 
 	annotation.
@@ -4436,12 +4235,12 @@
 		}
 	}
 </p>
-</div><!-- END: 2.12.6 - juneau-marshall.Transforms.SwapAnnotation -->
+</div><!-- END: 2.11.5 - juneau-marshall.Swaps.SwapAnnotation -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms.TemplatedSwaps' id='juneau-marshall.Transforms.TemplatedSwaps'>2.12.7 - Templated Swaps</a></h4>
-<div class='topic'><!-- START: 2.12.7 - juneau-marshall.Transforms.TemplatedSwaps -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Swaps.TemplatedSwaps' id='juneau-marshall.Swaps.TemplatedSwaps'>2.11.6 - Templated Swaps</a></h4>
+<div class='topic'><!-- START: 2.11.6 - juneau-marshall.Swaps.TemplatedSwaps -->
 <p>
 	The {@link org.apache.juneau.annotation.Swap#template() @Swap(template)} annotation allows you to associate
 	arbitrary contextual strings with swaps.
@@ -4475,12 +4274,12 @@
 		}
 	}
 </p>
-</div><!-- END: 2.12.7 - juneau-marshall.Transforms.TemplatedSwaps -->
+</div><!-- END: 2.11.6 - juneau-marshall.Swaps.TemplatedSwaps -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Transforms.SurrogateClasses' id='juneau-marshall.Transforms.SurrogateClasses'>2.12.8 - Surrogate Classes</a></h4>
-<div class='topic'><!-- START: 2.12.8 - juneau-marshall.Transforms.SurrogateClasses -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Swaps.SurrogateClasses' id='juneau-marshall.Swaps.SurrogateClasses'>2.11.7 - Surrogate Classes</a></h4>
+<div class='topic'><!-- START: 2.11.7 - juneau-marshall.Swaps.SurrogateClasses -->
 <p>
 <p>
 	Surrogate classes are very similar in concept to <c>PojoSwaps</c> except they're simpler to define.
@@ -4542,15 +4341,15 @@
 </p>
 
 <ul class='seealso'>
-	<li class='jic'>{@link org.apache.juneau.transform.Surrogate}
+	<li class='jic'>{@link org.apache.juneau.swap.Surrogate}
 </ul>
-</div><!-- END: 2.12.8 - juneau-marshall.Transforms.SurrogateClasses -->
-</div><!-- END: 2.12 - juneau-marshall.Transforms -->
+</div><!-- END: 2.11.7 - juneau-marshall.Swaps.SurrogateClasses -->
+</div><!-- END: 2.11 - juneau-marshall.Swaps -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.DynamicallyAppliedAnnotations' id='juneau-marshall.DynamicallyAppliedAnnotations'>2.13 - Dynamically Applied Annotations</a><span class='update'>created: 8.1.3</span></h3>
-<div class='topic'><!-- START: 2.13 - juneau-marshall.DynamicallyAppliedAnnotations -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.DynamicallyAppliedAnnotations' id='juneau-marshall.DynamicallyAppliedAnnotations'>2.12 - Dynamically Applied Annotations</a><span class='update'>created: 8.1.3</span></h3>
+<div class='topic'><!-- START: 2.12 - juneau-marshall.DynamicallyAppliedAnnotations -->
 <p>
 	In the section {@doc Transforms}, you were introduced to annotations that can be applied to bean
 	classes, methods, fields, and constructors such as {@link org.apache.juneau.annotation.Bean @Bean}:
@@ -4711,12 +4510,12 @@
 		</ul>
 	<li>A comma-delimited list of anything on this list.
 </ul>
-</div><!-- END: 2.13 - juneau-marshall.DynamicallyAppliedAnnotations -->
+</div><!-- END: 2.12 - juneau-marshall.DynamicallyAppliedAnnotations -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.BeanDictionaries' id='juneau-marshall.BeanDictionaries'>2.14 - Bean Names and Dictionaries</a></h3>
-<div class='topic'><!-- START: 2.14 - juneau-marshall.BeanDictionaries -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.BeanDictionaries' id='juneau-marshall.BeanDictionaries'>2.13 - Bean Names and Dictionaries</a></h3>
+<div class='topic'><!-- START: 2.13 - juneau-marshall.BeanDictionaries -->
 <p>
 	While parsing into beans, Juneau attempts to determine the class types of bean properties through 
 	reflection on the bean property getter or setter.
@@ -4873,8 +4672,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.BeanDictionaries.BeanSubTypes' id='juneau-marshall.BeanDictionaries.BeanSubTypes'>2.14.1 - Bean Subtypes</a></h4>
-<div class='topic'><!-- START: 2.14.1 - juneau-marshall.BeanDictionaries.BeanSubTypes -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.BeanDictionaries.BeanSubTypes' id='juneau-marshall.BeanDictionaries.BeanSubTypes'>2.13.1 - Bean Subtypes</a></h4>
+<div class='topic'><!-- START: 2.13.1 - juneau-marshall.BeanDictionaries.BeanSubTypes -->
 <p>
 	In addition to the bean type name support described above, simplified support is provided
 	for bean subtypes.
@@ -4929,13 +4728,13 @@
 	A <jv>a</jv> = <jv>parser</jv>.parse(<jv>json</jv>, A.<jk>class</jk>);
 	<jsm>assertTrue</jsm>(<jv>a</jv> <jk>instanceof</jk> A1);
 </p>
-</div><!-- END: 2.14.1 - juneau-marshall.BeanDictionaries.BeanSubTypes -->
-</div><!-- END: 2.14 - juneau-marshall.BeanDictionaries -->
+</div><!-- END: 2.13.1 - juneau-marshall.BeanDictionaries.BeanSubTypes -->
+</div><!-- END: 2.13 - juneau-marshall.BeanDictionaries -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.VirtualBeans' id='juneau-marshall.VirtualBeans'>2.15 - Virtual Beans</a><span class='update'><b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 2.15 - juneau-marshall.VirtualBeans -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.VirtualBeans' id='juneau-marshall.VirtualBeans'>2.14 - Virtual Beans</a><span class='update'><b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 2.14 - juneau-marshall.VirtualBeans -->
 <p>
 	The {@link org.apache.juneau.BeanContext.Builder#disableInterfaceProxies()} setting (enabled by default) allows
 	the Juneau parsers to parse content into virtual beans (bean interfaces without implementation classes).
@@ -4983,12 +4782,12 @@
 <p class='bpcode w800'>
 	Address <jv>address</jv> = BeanContext.<jsf>DEFAULT</jsf>.createSession().newBean(Address.<jk>class</jk>);
 </p>
-</div><!-- END: 2.15 - juneau-marshall.VirtualBeans -->
+</div><!-- END: 2.14 - juneau-marshall.VirtualBeans -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Recursion' id='juneau-marshall.Recursion'>2.16 - Non-Tree Models and Recursion Detection</a></h3>
-<div class='topic'><!-- START: 2.16 - juneau-marshall.Recursion -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Recursion' id='juneau-marshall.Recursion'>2.15 - Non-Tree Models and Recursion Detection</a></h3>
+<div class='topic'><!-- START: 2.15 - juneau-marshall.Recursion -->
 <p>
 	The Juneau Serializer API is designed to be used against POJO tree structures. 
 	It expects that there not be loops in the POJO model (e.g. children with references to parents, etc...).
@@ -5052,12 +4851,12 @@
 	Recursion detection introduces a performance penalty of around 20%.
 	For this reason the setting is disabled by default.
 </p>
-</div><!-- END: 2.16 - juneau-marshall.Recursion -->
+</div><!-- END: 2.15 - juneau-marshall.Recursion -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ParsingIntoGenericModels' id='juneau-marshall.ParsingIntoGenericModels'>2.17 - Parsing into Generic Models</a><span class='update'>updated: 8.2.0</span></h3>
-<div class='topic'><!-- START: 2.17 - juneau-marshall.ParsingIntoGenericModels -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ParsingIntoGenericModels' id='juneau-marshall.ParsingIntoGenericModels'>2.16 - Parsing into Generic Models</a><span class='update'>updated: 8.2.0</span></h3>
+<div class='topic'><!-- START: 2.16 - juneau-marshall.ParsingIntoGenericModels -->
 <p>
 	The Juneau parsers are not limited to parsing back into the original bean classes.
 	If the bean classes are not available on the parsing side, the parser can also be used to 
@@ -5167,12 +4966,12 @@
 	As a general rule, parsing into beans is often more efficient than parsing into generic models.
 	And working with beans is often less error prone than working with generic models.
 </p>
-</div><!-- END: 2.17 - juneau-marshall.ParsingIntoGenericModels -->
+</div><!-- END: 2.16 - juneau-marshall.ParsingIntoGenericModels -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ReadingContinuousStreams' id='juneau-marshall.ReadingContinuousStreams'>2.18 - Reading Continuous Streams</a></h3>
-<div class='topic'><!-- START: 2.18 - juneau-marshall.ReadingContinuousStreams -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ReadingContinuousStreams' id='juneau-marshall.ReadingContinuousStreams'>2.17 - Reading Continuous Streams</a></h3>
+<div class='topic'><!-- START: 2.17 - juneau-marshall.ReadingContinuousStreams -->
 <p>
 	The following parsers can be configured to read continuous streams of objects from the same input stream:
 </p>
@@ -5219,12 +5018,12 @@
 	The {@link org.apache.juneau.msgpack.MsgPackParser} class doesn't use any internal buffering to begin with, so it can be used with
 	continuous streams without any special properties.
 </p>
-</div><!-- END: 2.18 - juneau-marshall.ReadingContinuousStreams -->
+</div><!-- END: 2.17 - juneau-marshall.ReadingContinuousStreams -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.MarshallingUris' id='juneau-marshall.MarshallingUris'>2.19 - URIs</a></h3>
-<div class='topic'><!-- START: 2.19 - juneau-marshall.MarshallingUris -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.MarshallingUris' id='juneau-marshall.MarshallingUris'>2.18 - URIs</a></h3>
+<div class='topic'><!-- START: 2.18 - juneau-marshall.MarshallingUris -->
 <p>
 	Juneau serializers have sophisticated support for transforming relative URIs to absolute form.
 </p>
@@ -5362,12 +5161,12 @@
 		}
 	}
 </p>
-</div><!-- END: 2.19 - juneau-marshall.MarshallingUris -->
+</div><!-- END: 2.18 - juneau-marshall.MarshallingUris -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JacksonComparison' id='juneau-marshall.JacksonComparison'>2.20 - Comparison with Jackson</a><span class='update'><b><red>review</red></b></span></h3>
-<div class='topic'><!-- START: 2.20 - juneau-marshall.JacksonComparison -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JacksonComparison' id='juneau-marshall.JacksonComparison'>2.19 - Comparison with Jackson</a><span class='update'><b><red>review</red></b></span></h3>
+<div class='topic'><!-- START: 2.19 - juneau-marshall.JacksonComparison -->
 <p>
 	Juneau was developed independently from Jackson, but shares many of the same features and capabilities.
 	Whereas Jackson was created to work primarily with JSON, Juneau was created to work for multiple languages.
@@ -5475,12 +5274,12 @@
 		</td>
 	</tr>
 </table>
-</div><!-- END: 2.20 - juneau-marshall.JacksonComparison -->
+</div><!-- END: 2.19 - juneau-marshall.JacksonComparison -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.PojoCategories' id='juneau-marshall.PojoCategories'>2.21 - POJO Categories</a></h3>
-<div class='topic'><!-- START: 2.21 - juneau-marshall.PojoCategories -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.PojoCategories' id='juneau-marshall.PojoCategories'>2.20 - POJO Categories</a></h3>
+<div class='topic'><!-- START: 2.20 - juneau-marshall.PojoCategories -->
 <p>
 	In general, Juneau allows for marshalling for a wide variety of POJO types including:
 </p>
@@ -5606,10 +5405,10 @@
 		<td>
 			<b>Swapped objects</b>
 			<br>These are objects that are not directly serializable, but have 
-			{@link org.apache.juneau.transform.PojoSwap PojoSwaps} associated with them.  
+			{@link org.apache.juneau.swap.ObjectSwap PojoSwaps} associated with them.  
 			The purpose of a POJO swap is to convert an object to another object that is easier to serialize 
 			and parse.  
-			For example, the {@link org.apache.juneau.transforms.TemporalDateSwap.IsoLocalDateTime} class can be used to 
+			For example, the {@link org.apache.juneau.swaps.TemporalDateSwap.IsoLocalDateTime} class can be used to 
 			serialize {@link java.util.Date} objects to ISO8601 strings, and parse them back into 
 			{@link java.util.Date} objects.
 		</td>
@@ -5813,12 +5612,12 @@
 <p>
 	POJOs are considered convertible from X if any of the reverse of above are true.
 </p>
-</div><!-- END: 2.21 - juneau-marshall.PojoCategories -->
+</div><!-- END: 2.20 - juneau-marshall.PojoCategories -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.FluentAssertions' id='juneau-marshall.FluentAssertions'>2.22 - Fluent Assertions</a><span class='update'>created: <b>9.0.0</b></span></h3>
-<div class='topic'><!-- START: 2.22 - juneau-marshall.FluentAssertions -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.FluentAssertions' id='juneau-marshall.FluentAssertions'>2.21 - Fluent Assertions</a><span class='update'>created: <b>9.0.0</b></span></h3>
+<div class='topic'><!-- START: 2.21 - juneau-marshall.FluentAssertions -->
 <p>
 	The {@link org.apache.juneau.assertions} package in Juneau is a powerful API for performing fluent style assertions.
 	It is used throughout the REST client and server APIs for performing inline assertions on REST requests and responses.
@@ -6000,12 +5799,12 @@
 	For more information about the capabilities of the Assertions API, refer to the methods on the {@link org.apache.juneau.assertions.Assertions} methods
 	above.
 </p>
-</div><!-- END: 2.22 - juneau-marshall.FluentAssertions -->
+</div><!-- END: 2.21 - juneau-marshall.FluentAssertions -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails' id='juneau-marshall.JsonDetails'>2.23 - JSON Details</a></h3>
-<div class='topic'><!-- START: 2.23 - juneau-marshall.JsonDetails -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails' id='juneau-marshall.JsonDetails'>2.22 - JSON Details</a></h3>
+<div class='topic'><!-- START: 2.22 - juneau-marshall.JsonDetails -->
 <p>
 	Juneau supports converting arbitrary POJOs to and from JSON using ultra-efficient serializers and parsers.
 	The JSON serializer converts POJOs directly to JSON without the need for intermediate DOM objects using a 
@@ -6087,8 +5886,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonMethodology' id='juneau-marshall.JsonDetails.JsonMethodology'>2.23.1 - JSON Methodology</a></h4>
-<div class='topic'><!-- START: 2.23.1 - juneau-marshall.JsonDetails.JsonMethodology -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonMethodology' id='juneau-marshall.JsonDetails.JsonMethodology'>2.22.1 - JSON Methodology</a></h4>
+<div class='topic'><!-- START: 2.22.1 - juneau-marshall.JsonDetails.JsonMethodology -->
 <p>
 	The JSON data type produced depends on the Java object type being serialized.
 </p>
@@ -6159,12 +5958,12 @@
 	<c>Calendar</c> object to ISO8601 strings, or <c><jk>byte</jk>[]</c> arrays to Base-64 
 	encoded strings.
 </p>
-</div><!-- END: 2.23.1 - juneau-marshall.JsonDetails.JsonMethodology -->
+</div><!-- END: 2.22.1 - juneau-marshall.JsonDetails.JsonMethodology -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonSerializers' id='juneau-marshall.JsonDetails.JsonSerializers'>2.23.2 - JSON Serializers</a></h4>
-<div class='topic'><!-- START: 2.23.2 - juneau-marshall.JsonDetails.JsonSerializers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonSerializers' id='juneau-marshall.JsonDetails.JsonSerializers'>2.22.2 - JSON Serializers</a></h4>
+<div class='topic'><!-- START: 2.22.2 - juneau-marshall.JsonDetails.JsonSerializers -->
 <p>
 	The {@link org.apache.juneau.json.JsonSerializer} class is used to serialize POJOs into JSON.
 </p>	
@@ -6195,12 +5994,12 @@
 		<li class='jf'>{@link org.apache.juneau.json.SimpleJsonSerializer#DEFAULT_READABLE DEFAULT_READABLE}
 	</ul>
 </ul>
-</div><!-- END: 2.23.2 - juneau-marshall.JsonDetails.JsonSerializers -->
+</div><!-- END: 2.22.2 - juneau-marshall.JsonDetails.JsonSerializers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.SimplifiedJson' id='juneau-marshall.JsonDetails.SimplifiedJson'>2.23.3 - Simplified JSON</a></h4>
-<div class='topic'><!-- START: 2.23.3 - juneau-marshall.JsonDetails.SimplifiedJson -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.SimplifiedJson' id='juneau-marshall.JsonDetails.SimplifiedJson'>2.22.3 - Simplified JSON</a></h4>
+<div class='topic'><!-- START: 2.22.3 - juneau-marshall.JsonDetails.SimplifiedJson -->
 <p>
 	The {@link org.apache.juneau.json.SimpleJsonSerializer} class can be used to serialized POJOs into Simplified JSON notation.
 </p>
@@ -6257,12 +6056,12 @@
 <ul class='seealso'>
 	<li class='jf'>{@del org.apache.juneau.json.JsonSerializer#JSON_simpleMode}
 </ul>
-</div><!-- END: 2.23.3 - juneau-marshall.JsonDetails.SimplifiedJson -->
+</div><!-- END: 2.22.3 - juneau-marshall.JsonDetails.SimplifiedJson -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonParsers' id='juneau-marshall.JsonDetails.JsonParsers'>2.23.4 - JSON Parsers</a></h4>
-<div class='topic'><!-- START: 2.23.4 - juneau-marshall.JsonDetails.JsonParsers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonParsers' id='juneau-marshall.JsonDetails.JsonParsers'>2.22.4 - JSON Parsers</a></h4>
+<div class='topic'><!-- START: 2.22.4 - juneau-marshall.JsonDetails.JsonParsers -->
 <p>
 	The {@link org.apache.juneau.json.JsonParser} class is used to parse JSON into POJOs.
 </p>	
@@ -6301,12 +6100,12 @@
 	<li>
 		Concatenated strings. 
 </ul>
-</div><!-- END: 2.23.4 - juneau-marshall.JsonDetails.JsonParsers -->
+</div><!-- END: 2.22.4 - juneau-marshall.JsonDetails.JsonParsers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonAnnotation' id='juneau-marshall.JsonDetails.JsonAnnotation'>2.23.5 - @Json Annotation</a></h4>
-<div class='topic'><!-- START: 2.23.5 - juneau-marshall.JsonDetails.JsonAnnotation -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonAnnotation' id='juneau-marshall.JsonDetails.JsonAnnotation'>2.22.5 - @Json Annotation</a></h4>
+<div class='topic'><!-- START: 2.22.5 - juneau-marshall.JsonDetails.JsonAnnotation -->
 <p>
 	The {@link org.apache.juneau.json.annotation.Json @Json} annotation
 	is used to override the behavior of {@link org.apache.juneau.json.JsonSerializer} on individual bean classes or properties.
@@ -6354,12 +6153,12 @@
 		</td>
 	</tr>
 </table>
-</div><!-- END: 2.23.5 - juneau-marshall.JsonDetails.JsonAnnotation -->
+</div><!-- END: 2.22.5 - juneau-marshall.JsonDetails.JsonAnnotation -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonSchema' id='juneau-marshall.JsonDetails.JsonSchema'>2.23.6 - JSON-Schema Support</a></h4>
-<div class='topic'><!-- START: 2.23.6 - juneau-marshall.JsonDetails.JsonSchema -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.JsonDetails.JsonSchema' id='juneau-marshall.JsonDetails.JsonSchema'>2.22.6 - JSON-Schema Support</a></h4>
+<div class='topic'><!-- START: 2.22.6 - juneau-marshall.JsonDetails.JsonSchema -->
 <p>
 	Juneau provides the {@link org.apache.juneau.json.JsonSchemaSerializer} class for generating JSON-Schema 
 	documents that describe the output generated by the {@link org.apache.juneau.json.JsonSerializer} class.
@@ -6451,13 +6250,13 @@
 		}
 	}
 </p>
-</div><!-- END: 2.23.6 - juneau-marshall.JsonDetails.JsonSchema -->
-</div><!-- END: 2.23 - juneau-marshall.JsonDetails -->
+</div><!-- END: 2.22.6 - juneau-marshall.JsonDetails.JsonSchema -->
+</div><!-- END: 2.22 - juneau-marshall.JsonDetails -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails' id='juneau-marshall.XmlDetails'>2.24 - XML Details</a></h3>
-<div class='topic'><!-- START: 2.24 - juneau-marshall.XmlDetails -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails' id='juneau-marshall.XmlDetails'>2.23 - XML Details</a></h3>
+<div class='topic'><!-- START: 2.23 - juneau-marshall.XmlDetails -->
 <p>
 	Juneau supports converting arbitrary POJOs to and from XML using ultra-efficient serializers and parsers.
 	The XML serializer converts POJOs directly to XML without the need for intermediate DOM objects.
@@ -6534,8 +6333,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlMethodology' id='juneau-marshall.XmlDetails.XmlMethodology'>2.24.1 - XML Methodology</a></h4>
-<div class='topic'><!-- START: 2.24.1 - juneau-marshall.XmlDetails.XmlMethodology -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlMethodology' id='juneau-marshall.XmlDetails.XmlMethodology'>2.23.1 - XML Methodology</a></h4>
+<div class='topic'><!-- START: 2.23.1 - juneau-marshall.XmlDetails.XmlMethodology -->
 <p>
 	The following examples show how different data types are represented in XML.
 	They mirror how the data structures are represented in JSON.
@@ -6936,12 +6735,12 @@
 		</xt></td>
 	</tr>
 </table>
-</div><!-- END: 2.24.1 - juneau-marshall.XmlDetails.XmlMethodology -->
+</div><!-- END: 2.23.1 - juneau-marshall.XmlDetails.XmlMethodology -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlSerializers' id='juneau-marshall.XmlDetails.XmlSerializers'>2.24.2 - XML Serializers</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 2.24.2 - juneau-marshall.XmlDetails.XmlSerializers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlSerializers' id='juneau-marshall.XmlDetails.XmlSerializers'>2.23.2 - XML Serializers</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 2.23.2 - juneau-marshall.XmlDetails.XmlSerializers -->
 <p>
 	The {@link org.apache.juneau.xml.XmlSerializer} class is used to serialize POJOs into XML.
 </p>	
@@ -6980,12 +6779,12 @@
 		<li class='jf'>{@link org.apache.juneau.xml.XmlSerializer#DEFAULT_XS_NAMESPACE DEFAULT_XS_NAMESPACE}				
 	</ul>
 </ul>
-</div><!-- END: 2.24.2 - juneau-marshall.XmlDetails.XmlSerializers -->
+</div><!-- END: 2.23.2 - juneau-marshall.XmlDetails.XmlSerializers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlParsers' id='juneau-marshall.XmlDetails.XmlParsers'>2.24.3 - XML Parsers</a></h4>
-<div class='topic'><!-- START: 2.24.3 - juneau-marshall.XmlDetails.XmlParsers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlParsers' id='juneau-marshall.XmlDetails.XmlParsers'>2.23.3 - XML Parsers</a></h4>
+<div class='topic'><!-- START: 2.23.3 - juneau-marshall.XmlDetails.XmlParsers -->
 <p>
 	The {@link org.apache.juneau.xml.XmlParser} class is used to parse XML into POJOs.
 </p>	
@@ -7012,12 +6811,12 @@
 		<li class='jf'>{@link org.apache.juneau.xml.XmlParser#DEFAULT DEFAULT}
 	</ul>
 </ul>
-</div><!-- END: 2.24.3 - juneau-marshall.XmlDetails.XmlParsers -->
+</div><!-- END: 2.23.3 - juneau-marshall.XmlDetails.XmlParsers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlBeanTypeNameAnnotation' id='juneau-marshall.XmlDetails.XmlBeanTypeNameAnnotation'>2.24.4 - @Bean(typeName) Annotation</a></h4>
-<div class='topic'><!-- START: 2.24.4 - juneau-marshall.XmlDetails.XmlBeanTypeNameAnnotation -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlBeanTypeNameAnnotation' id='juneau-marshall.XmlDetails.XmlBeanTypeNameAnnotation'>2.23.4 - @Bean(typeName) Annotation</a></h4>
+<div class='topic'><!-- START: 2.23.4 - juneau-marshall.XmlDetails.XmlBeanTypeNameAnnotation -->
 <p>
 	The {@link org.apache.juneau.annotation.Bean#typeName() @Bean(typeName)} annotation can be used to 
 	override the Juneau default name on bean elements. 
@@ -7496,12 +7295,12 @@
 	{@link javax.xml.stream.XMLInputFactory#IS_REPLACING_ENTITY_REFERENCES} setting in Java
 	forced us to make some hard design decisions that may not be the most elegant.
 </p>
-</div><!-- END: 2.24.4 - juneau-marshall.XmlDetails.XmlBeanTypeNameAnnotation -->
+</div><!-- END: 2.23.4 - juneau-marshall.XmlDetails.XmlBeanTypeNameAnnotation -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlChildNameAnnotation' id='juneau-marshall.XmlDetails.XmlChildNameAnnotation'>2.24.5 - @Xml(childName) Annotation</a></h4>
-<div class='topic'><!-- START: 2.24.5 - juneau-marshall.XmlDetails.XmlChildNameAnnotation -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlChildNameAnnotation' id='juneau-marshall.XmlDetails.XmlChildNameAnnotation'>2.23.5 - @Xml(childName) Annotation</a></h4>
+<div class='topic'><!-- START: 2.23.5 - juneau-marshall.XmlDetails.XmlChildNameAnnotation -->
 <p>
 	The {@link org.apache.juneau.xml.annotation.Xml#childName() @Xml(childName)} annotation can be used to 
 	specify the name of XML child elements for bean properties of type collection or array.
@@ -7585,12 +7384,12 @@
 		</xt></td>
 	</tr>
 </table>
-</div><!-- END: 2.24.5 - juneau-marshall.XmlDetails.XmlChildNameAnnotation -->
+</div><!-- END: 2.23.5 - juneau-marshall.XmlDetails.XmlChildNameAnnotation -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlFormatAnnotation' id='juneau-marshall.XmlDetails.XmlFormatAnnotation'>2.24.6 - @Xml(format) Annotation</a></h4>
-<div class='topic'><!-- START: 2.24.6 - juneau-marshall.XmlDetails.XmlFormatAnnotation -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlFormatAnnotation' id='juneau-marshall.XmlDetails.XmlFormatAnnotation'>2.23.6 - @Xml(format) Annotation</a></h4>
+<div class='topic'><!-- START: 2.23.6 - juneau-marshall.XmlDetails.XmlFormatAnnotation -->
 <p>
 	The {@link org.apache.juneau.xml.annotation.Xml#format() @Xml(format)} annotation can be used to tweak 
 	the XML format of a POJO.
@@ -8294,12 +8093,12 @@
 		</xt></td>
 	</tr>
 </table>
-</div><!-- END: 2.24.6 - juneau-marshall.XmlDetails.XmlFormatAnnotation -->
+</div><!-- END: 2.23.6 - juneau-marshall.XmlDetails.XmlFormatAnnotation -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlNamespaces' id='juneau-marshall.XmlDetails.XmlNamespaces'>2.24.7 - Namespaces</a><span class='update'><b><red>review</red></b></span></h4>
-<div class='topic'><!-- START: 2.24.7 - juneau-marshall.XmlDetails.XmlNamespaces -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.XmlDetails.XmlNamespaces' id='juneau-marshall.XmlDetails.XmlNamespaces'>2.23.7 - Namespaces</a><span class='update'><b><red>review</red></b></span></h4>
+<div class='topic'><!-- START: 2.23.7 - juneau-marshall.XmlDetails.XmlNamespaces -->
 <p>
 	Let's go back to the example of our original <c>Person</c> bean class, but add some namespace annotations:
 </p>
@@ -8464,13 +8263,13 @@
 		.namespaces(<js>"{per:'http://www.apache.org/person/'}"</js>)
 		.build();
 </p>
-</div><!-- END: 2.24.7 - juneau-marshall.XmlDetails.XmlNamespaces -->
-</div><!-- END: 2.24 - juneau-marshall.XmlDetails -->
+</div><!-- END: 2.23.7 - juneau-marshall.XmlDetails.XmlNamespaces -->
+</div><!-- END: 2.23 - juneau-marshall.XmlDetails -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails' id='juneau-marshall.HtmlDetails'>2.25 - HTML Details</a></h3>
-<div class='topic'><!-- START: 2.25 - juneau-marshall.HtmlDetails -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails' id='juneau-marshall.HtmlDetails'>2.24 - HTML Details</a></h3>
+<div class='topic'><!-- START: 2.24 - juneau-marshall.HtmlDetails -->
 <p>
 	Juneau supports converting arbitrary POJOs to and from HTML.
 	Built on top of the existing XML parser, it also uses a STaX parser and creates POJOs directly without intermediate DOM objects.
@@ -8481,8 +8280,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlMethodology' id='juneau-marshall.HtmlDetails.HtmlMethodology'>2.25.1 - HTML Methodology</a></h4>
-<div class='topic'><!-- START: 2.25.1 - juneau-marshall.HtmlDetails.HtmlMethodology -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlMethodology' id='juneau-marshall.HtmlDetails.HtmlMethodology'>2.24.1 - HTML Methodology</a></h4>
+<div class='topic'><!-- START: 2.24.1 - juneau-marshall.HtmlDetails.HtmlMethodology -->
 <p>
 	The following examples show how different data types are represented in HTML.
 	They mirror how the data structures are represented in JSON.
@@ -8990,12 +8789,12 @@
 		</xt></td>
 	</tr>
 </table>
-</div><!-- END: 2.25.1 - juneau-marshall.HtmlDetails.HtmlMethodology -->
+</div><!-- END: 2.24.1 - juneau-marshall.HtmlDetails.HtmlMethodology -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlSerializers' id='juneau-marshall.HtmlDetails.HtmlSerializers'>2.25.2 - HTML Serializers</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 2.25.2 - juneau-marshall.HtmlDetails.HtmlSerializers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlSerializers' id='juneau-marshall.HtmlDetails.HtmlSerializers'>2.24.2 - HTML Serializers</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 2.24.2 - juneau-marshall.HtmlDetails.HtmlSerializers -->
 <p>
 	The {@link org.apache.juneau.html.HtmlSerializer} class is used to serialize POJOs into HTML.
 </p>	
@@ -9050,12 +8849,12 @@
 		<li class='jf'>{@link org.apache.juneau.html.HtmlDocSerializer#DEFAULT }
 	</ul>
 </ul>
-</div><!-- END: 2.25.2 - juneau-marshall.HtmlDetails.HtmlSerializers -->
+</div><!-- END: 2.24.2 - juneau-marshall.HtmlDetails.HtmlSerializers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlParsers' id='juneau-marshall.HtmlDetails.HtmlParsers'>2.25.3 - HTML Parsers</a></h4>
-<div class='topic'><!-- START: 2.25.3 - juneau-marshall.HtmlDetails.HtmlParsers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlParsers' id='juneau-marshall.HtmlDetails.HtmlParsers'>2.24.3 - HTML Parsers</a></h4>
+<div class='topic'><!-- START: 2.24.3 - juneau-marshall.HtmlDetails.HtmlParsers -->
 <p>
 	The {@link org.apache.juneau.html.HtmlParser} class is used to parse HTML into POJOs.
 	They can also parse the contents produced by {@link org.apache.juneau.html.HtmlDocSerializer}.
@@ -9075,12 +8874,12 @@
 		<li class='jf'>{@link org.apache.juneau.html.HtmlParser#DEFAULT DEFAULT}
 	</ul>
 </ul>
-</div><!-- END: 2.25.3 - juneau-marshall.HtmlDetails.HtmlParsers -->
+</div><!-- END: 2.24.3 - juneau-marshall.HtmlDetails.HtmlParsers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlAnnotation' id='juneau-marshall.HtmlDetails.HtmlAnnotation'>2.25.4 - @Html Annotation</a></h4>
-<div class='topic'><!-- START: 2.25.4 - juneau-marshall.HtmlDetails.HtmlAnnotation -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlAnnotation' id='juneau-marshall.HtmlDetails.HtmlAnnotation'>2.24.4 - @Html Annotation</a></h4>
+<div class='topic'><!-- START: 2.24.4 - juneau-marshall.HtmlDetails.HtmlAnnotation -->
 <p>
 	The {@link org.apache.juneau.html.annotation.Html @Html} annotation can be used to customize how POJOs are serialized to HTML on a per-class/field/method basis.
 </p>
@@ -9136,12 +8935,12 @@
 <p>
 	The {@link org.apache.juneau.html.annotation.Html#noTables @Html(noTables)} annotation is used to force beans to be serialized as trees instead of tables
 </p>
-</div><!-- END: 2.25.4 - juneau-marshall.HtmlDetails.HtmlAnnotation -->
+</div><!-- END: 2.24.4 - juneau-marshall.HtmlDetails.HtmlAnnotation -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlRenderAnnotation' id='juneau-marshall.HtmlDetails.HtmlRenderAnnotation'>2.25.5 - @Html(render) Annotation</a></h4>
-<div class='topic'><!-- START: 2.25.5 - juneau-marshall.HtmlDetails.HtmlRenderAnnotation -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlRenderAnnotation' id='juneau-marshall.HtmlDetails.HtmlRenderAnnotation'>2.24.5 - @Html(render) Annotation</a></h4>
+<div class='topic'><!-- START: 2.24.5 - juneau-marshall.HtmlDetails.HtmlRenderAnnotation -->
 <p>
 	The {@link org.apache.juneau.html.annotation.Html#render @Html(render)} annotation allows for custom rendering of bean property values when serialized as HTML. 
 	Using this class, you can alter the CSS style and HTML content of the bean property.
@@ -9243,12 +9042,12 @@
 		}
 	}
 </p>
-</div><!-- END: 2.25.5 - juneau-marshall.HtmlDetails.HtmlRenderAnnotation -->
+</div><!-- END: 2.24.5 - juneau-marshall.HtmlDetails.HtmlRenderAnnotation -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlDocSerializer' id='juneau-marshall.HtmlDetails.HtmlDocSerializer'>2.25.6 - HtmlDocSerializer</a></h4>
-<div class='topic'><!-- START: 2.25.6 - juneau-marshall.HtmlDetails.HtmlDocSerializer -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlDocSerializer' id='juneau-marshall.HtmlDetails.HtmlDocSerializer'>2.24.6 - HtmlDocSerializer</a></h4>
+<div class='topic'><!-- START: 2.24.6 - juneau-marshall.HtmlDetails.HtmlDocSerializer -->
 <p>
 	{@link org.apache.juneau.html.HtmlDocSerializer} is an extension of {@link org.apache.juneau.html.HtmlSerializer}
 	that wraps serialized POJOs in a complete HTML document. 
@@ -9298,12 +9097,12 @@
 	a template for the HTML page being generated.
 	The default template is described next.
 </p>
-</div><!-- END: 2.25.6 - juneau-marshall.HtmlDetails.HtmlDocSerializer -->
+</div><!-- END: 2.24.6 - juneau-marshall.HtmlDetails.HtmlDocSerializer -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.BasicHtmlDocTemplate' id='juneau-marshall.HtmlDetails.BasicHtmlDocTemplate'>2.25.7 - BasicHtmlDocTemplate</a></h4>
-<div class='topic'><!-- START: 2.25.7 - juneau-marshall.HtmlDetails.BasicHtmlDocTemplate -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.BasicHtmlDocTemplate' id='juneau-marshall.HtmlDetails.BasicHtmlDocTemplate'>2.24.7 - BasicHtmlDocTemplate</a></h4>
+<div class='topic'><!-- START: 2.24.7 - juneau-marshall.HtmlDetails.BasicHtmlDocTemplate -->
 <p>
 	The {@link org.apache.juneau.html.BasicHtmlDocTemplate} class defines a default template for HTML documents
 	created by {@link org.apache.juneau.html.HtmlDocSerializer}.
@@ -9337,12 +9136,12 @@
 		&lt;/body&gt;
 	&lt;/html&gt;</xt>
 </p>
-</div><!-- END: 2.25.7 - juneau-marshall.HtmlDetails.BasicHtmlDocTemplate -->
+</div><!-- END: 2.24.7 - juneau-marshall.HtmlDetails.BasicHtmlDocTemplate -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlCustomTemplates' id='juneau-marshall.HtmlDetails.HtmlCustomTemplates'>2.25.8 - Custom Templates</a></h4>
-<div class='topic'><!-- START: 2.25.8 - juneau-marshall.HtmlDetails.HtmlCustomTemplates -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlCustomTemplates' id='juneau-marshall.HtmlDetails.HtmlCustomTemplates'>2.24.8 - Custom Templates</a></h4>
+<div class='topic'><!-- START: 2.24.8 - juneau-marshall.HtmlDetails.HtmlCustomTemplates -->
 <p>
 	Custom page templates can be created by implementing the {@link org.apache.juneau.html.HtmlDocTemplate}
 	interface and associating it with your {@link org.apache.juneau.html.HtmlDocSerializer} using the {@del org.apache.juneau.html.HtmlDocSerializer#HTMLDOC_template HTMLDOC_template}
@@ -9357,12 +9156,12 @@
 <p>
 	The interface implementation is open-ended allowing you to define the contents of the page any way you wish.
 </p>
-</div><!-- END: 2.25.8 - juneau-marshall.HtmlDetails.HtmlCustomTemplates -->
+</div><!-- END: 2.24.8 - juneau-marshall.HtmlDetails.HtmlCustomTemplates -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlSchema' id='juneau-marshall.HtmlDetails.HtmlSchema'>2.25.9 - HTML-Schema Support</a></h4>
-<div class='topic'><!-- START: 2.25.9 - juneau-marshall.HtmlDetails.HtmlSchema -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.HtmlDetails.HtmlSchema' id='juneau-marshall.HtmlDetails.HtmlSchema'>2.24.9 - HTML-Schema Support</a></h4>
+<div class='topic'><!-- START: 2.24.9 - juneau-marshall.HtmlDetails.HtmlSchema -->
 <p>
 	The {@link org.apache.juneau.html.HtmlSchemaSerializer} class is the HTML-equivalent to the
 	{@link org.apache.juneau.json.JsonSchemaSerializer} class.
@@ -9541,13 +9340,13 @@
 		</td>
 	</tr>
 </table>
-</div><!-- END: 2.25.9 - juneau-marshall.HtmlDetails.HtmlSchema -->
-</div><!-- END: 2.25 - juneau-marshall.HtmlDetails -->
+</div><!-- END: 2.24.9 - juneau-marshall.HtmlDetails.HtmlSchema -->
+</div><!-- END: 2.24 - juneau-marshall.HtmlDetails -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UonDetails' id='juneau-marshall.UonDetails'>2.26 - UON Details</a></h3>
-<div class='topic'><!-- START: 2.26 - juneau-marshall.UonDetails -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UonDetails' id='juneau-marshall.UonDetails'>2.25 - UON Details</a></h3>
+<div class='topic'><!-- START: 2.25 - juneau-marshall.UonDetails -->
 <p>
 	Juneau supports converting arbitrary POJOs to and from UON strings using ultra-efficient serializers 
 	and parsers.
@@ -9619,8 +9418,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UonDetails.UonMethodology' id='juneau-marshall.UonDetails.UonMethodology'>2.26.1 - UON Methodology</a></h4>
-<div class='topic'><!-- START: 2.26.1 - juneau-marshall.UonDetails.UonMethodology -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UonDetails.UonMethodology' id='juneau-marshall.UonDetails.UonMethodology'>2.25.1 - UON Methodology</a></h4>
+<div class='topic'><!-- START: 2.25.1 - juneau-marshall.UonDetails.UonMethodology -->
 <h5 class='figure'>General methodology:</h5>
 <table class='styled w800' style='border-collapse:collapse'>
 	<tr><th>Java type</th><th>JSON equivalent</th><th>UON</th></tr>
@@ -9678,12 +9477,12 @@
 <p>
 	Refer to the <a href='doc-files/rfc_uon.txt'>UON specification</a> for a complete set of syntax rules.		
 </p>
-</div><!-- END: 2.26.1 - juneau-marshall.UonDetails.UonMethodology -->
+</div><!-- END: 2.25.1 - juneau-marshall.UonDetails.UonMethodology -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UonDetails.UonSerializers' id='juneau-marshall.UonDetails.UonSerializers'>2.26.2 - UON Serializers</a></h4>
-<div class='topic'><!-- START: 2.26.2 - juneau-marshall.UonDetails.UonSerializers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UonDetails.UonSerializers' id='juneau-marshall.UonDetails.UonSerializers'>2.25.2 - UON Serializers</a></h4>
+<div class='topic'><!-- START: 2.25.2 - juneau-marshall.UonDetails.UonSerializers -->
 <p>
 	The {@link org.apache.juneau.uon.UonSerializer} class is used to serialize POJOs into UON.
 </p>	
@@ -9710,12 +9509,12 @@
 		<li class='jf'>{@link org.apache.juneau.uon.UonSerializer#DEFAULT_READABLE DEFAULT_READABLE}
 	</ul>
 </ul>
-</div><!-- END: 2.26.2 - juneau-marshall.UonDetails.UonSerializers -->
+</div><!-- END: 2.25.2 - juneau-marshall.UonDetails.UonSerializers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UonDetails.UonParsers' id='juneau-marshall.UonDetails.UonParsers'>2.26.3 - UON Parsers</a></h4>
-<div class='topic'><!-- START: 2.26.3 - juneau-marshall.UonDetails.UonParsers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UonDetails.UonParsers' id='juneau-marshall.UonDetails.UonParsers'>2.25.3 - UON Parsers</a></h4>
+<div class='topic'><!-- START: 2.25.3 - juneau-marshall.UonDetails.UonParsers -->
 <p>
 	The {@link org.apache.juneau.uon.UonParser} class is used to parse UON into POJOs.
 </p>	
@@ -9740,13 +9539,13 @@
 		<li class='jf'>{@link org.apache.juneau.uon.UonParser#DEFAULT_DECODING DEFAULT_DECODING}			
 	</ul>
 </ul>
-</div><!-- END: 2.26.3 - juneau-marshall.UonDetails.UonParsers -->
-</div><!-- END: 2.26 - juneau-marshall.UonDetails -->
+</div><!-- END: 2.25.3 - juneau-marshall.UonDetails.UonParsers -->
+</div><!-- END: 2.25 - juneau-marshall.UonDetails -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails' id='juneau-marshall.UrlEncodingDetails'>2.27 - URL-Encoding Details</a></h3>
-<div class='topic'><!-- START: 2.27 - juneau-marshall.UrlEncodingDetails -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails' id='juneau-marshall.UrlEncodingDetails'>2.26 - URL-Encoding Details</a></h3>
+<div class='topic'><!-- START: 2.26 - juneau-marshall.UrlEncodingDetails -->
 <p>
 	Juneau supports converting arbitrary POJOs to and from URL-encoded strings using ultra-efficient serializers 
 	and parsers.
@@ -9816,8 +9615,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails.UrlEncMethodology' id='juneau-marshall.UrlEncodingDetails.UrlEncMethodology'>2.27.1 - URL-Encoding Methodology</a></h4>
-<div class='topic'><!-- START: 2.27.1 - juneau-marshall.UrlEncodingDetails.UrlEncMethodology -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails.UrlEncMethodology' id='juneau-marshall.UrlEncodingDetails.UrlEncMethodology'>2.26.1 - URL-Encoding Methodology</a></h4>
+<div class='topic'><!-- START: 2.26.1 - juneau-marshall.UrlEncodingDetails.UrlEncMethodology -->
 <h5 class='figure'>General methodology:</h5>
 <table class='styled w800' style='border-collapse:collapse'>
 	<tr><th>Java type</th><th>JSON equivalent</th><th>UON</th></tr>
@@ -9875,12 +9674,12 @@
 <p>
 	Refer to the <a href='doc-files/rfc_uon.txt'>UON specification</a> for a complete set of syntax rules.		
 </p>
-</div><!-- END: 2.27.1 - juneau-marshall.UrlEncodingDetails.UrlEncMethodology -->
+</div><!-- END: 2.26.1 - juneau-marshall.UrlEncodingDetails.UrlEncMethodology -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails.UrlEncSerializers' id='juneau-marshall.UrlEncodingDetails.UrlEncSerializers'>2.27.2 - URL-Encoding Serializers</a></h4>
-<div class='topic'><!-- START: 2.27.2 - juneau-marshall.UrlEncodingDetails.UrlEncSerializers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails.UrlEncSerializers' id='juneau-marshall.UrlEncodingDetails.UrlEncSerializers'>2.26.2 - URL-Encoding Serializers</a></h4>
+<div class='topic'><!-- START: 2.26.2 - juneau-marshall.UrlEncodingDetails.UrlEncSerializers -->
 <p>
 	The {@link org.apache.juneau.urlencoding.UrlEncodingSerializer} class is used to serialize POJOs into URL-Encoding.
 </p>	
@@ -9907,12 +9706,12 @@
 		
 	</ul>
 </ul>
-</div><!-- END: 2.27.2 - juneau-marshall.UrlEncodingDetails.UrlEncSerializers -->
+</div><!-- END: 2.26.2 - juneau-marshall.UrlEncodingDetails.UrlEncSerializers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails.UrlEncParsers' id='juneau-marshall.UrlEncodingDetails.UrlEncParsers'>2.27.3 - URL-Encoding Parsers</a></h4>
-<div class='topic'><!-- START: 2.27.3 - juneau-marshall.UrlEncodingDetails.UrlEncParsers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails.UrlEncParsers' id='juneau-marshall.UrlEncodingDetails.UrlEncParsers'>2.26.3 - URL-Encoding Parsers</a></h4>
+<div class='topic'><!-- START: 2.26.3 - juneau-marshall.UrlEncodingDetails.UrlEncParsers -->
 <p>
 	The {@link org.apache.juneau.urlencoding.UrlEncodingParser} class is used to parse URL-Encoding into POJOs.
 </p>	
@@ -9935,12 +9734,12 @@
 		<li class='jf'>{@link org.apache.juneau.urlencoding.UrlEncodingParser#DEFAULT DEFAULT}
 	</ul>
 </ul>
-</div><!-- END: 2.27.3 - juneau-marshall.UrlEncodingDetails.UrlEncParsers -->
+</div><!-- END: 2.26.3 - juneau-marshall.UrlEncodingDetails.UrlEncParsers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation' id='juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation'>2.27.4 - @UrlEncoding Annotation</a></h4>
-<div class='topic'><!-- START: 2.27.4 - juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation' id='juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation'>2.26.4 - @UrlEncoding Annotation</a></h4>
+<div class='topic'><!-- START: 2.26.4 - juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation -->
 <p>
 	The {@link org.apache.juneau.urlencoding.annotation.UrlEncoding @UrlEncoding} annotation
 	is used to override the behavior of {@link org.apache.juneau.urlencoding.UrlEncodingSerializer} on individual bean classes or properties.
@@ -9957,13 +9756,13 @@
 	It's identical in behavior to using the {@del org.apache.juneau.urlencoding.UrlEncodingSerializer#URLENC_expandedParams}
 	and {@del org.apache.juneau.urlencoding.UrlEncodingParser#URLENC_expandedParams} properties, but applies to only individual bean properties.
 </p>
-</div><!-- END: 2.27.4 - juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation -->
-</div><!-- END: 2.27 - juneau-marshall.UrlEncodingDetails -->
+</div><!-- END: 2.26.4 - juneau-marshall.UrlEncodingDetails.UrlEncodingAnnotation -->
+</div><!-- END: 2.26 - juneau-marshall.UrlEncodingDetails -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.MsgPackDetails' id='juneau-marshall.MsgPackDetails'>2.28 - MessagePack Details</a></h3>
-<div class='topic'><!-- START: 2.28 - juneau-marshall.MsgPackDetails -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.MsgPackDetails' id='juneau-marshall.MsgPackDetails'>2.27 - MessagePack Details</a></h3>
+<div class='topic'><!-- START: 2.27 - juneau-marshall.MsgPackDetails -->
 <p>
 	Juneau supports converting arbitrary POJOs to and from MessagePack using ultra-efficient serializers 
 	and parsers.
@@ -9975,8 +9774,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.MsgPackDetails.MsgPackSerializers' id='juneau-marshall.MsgPackDetails.MsgPackSerializers'>2.28.1 - MessagePack Serializers</a></h4>
-<div class='topic'><!-- START: 2.28.1 - juneau-marshall.MsgPackDetails.MsgPackSerializers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.MsgPackDetails.MsgPackSerializers' id='juneau-marshall.MsgPackDetails.MsgPackSerializers'>2.27.1 - MessagePack Serializers</a></h4>
+<div class='topic'><!-- START: 2.27.1 - juneau-marshall.MsgPackDetails.MsgPackSerializers -->
 <p>
 	The {@link org.apache.juneau.msgpack.MsgPackSerializer} class is used to serialize POJOs into MessagePack.
 </p>	
@@ -10000,12 +9799,12 @@
 		
 	</ul>
 </ul>
-</div><!-- END: 2.28.1 - juneau-marshall.MsgPackDetails.MsgPackSerializers -->
+</div><!-- END: 2.27.1 - juneau-marshall.MsgPackDetails.MsgPackSerializers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.MsgPackDetails.MsgPackParsers' id='juneau-marshall.MsgPackDetails.MsgPackParsers'>2.28.2 - MessagePack Parsers</a></h4>
-<div class='topic'><!-- START: 2.28.2 - juneau-marshall.MsgPackDetails.MsgPackParsers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.MsgPackDetails.MsgPackParsers' id='juneau-marshall.MsgPackDetails.MsgPackParsers'>2.27.2 - MessagePack Parsers</a></h4>
+<div class='topic'><!-- START: 2.27.2 - juneau-marshall.MsgPackDetails.MsgPackParsers -->
 <p>
 	The {@link org.apache.juneau.msgpack.MsgPackParser} class is used to parse MessagePack into POJOs.
 </p>	
@@ -10024,13 +9823,13 @@
 		<li class='jf'>{@link org.apache.juneau.msgpack.MsgPackParser#DEFAULT DEFAULT}
 	</ul>
 </ul>
-</div><!-- END: 2.28.2 - juneau-marshall.MsgPackDetails.MsgPackParsers -->
-</div><!-- END: 2.28 - juneau-marshall.MsgPackDetails -->
+</div><!-- END: 2.27.2 - juneau-marshall.MsgPackDetails.MsgPackParsers -->
+</div><!-- END: 2.27 - juneau-marshall.MsgPackDetails -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.OpenApiDetails' id='juneau-marshall.OpenApiDetails'>2.29 - OpenAPI Details</a><span class='update'>updated: 8.2.0</span></h3>
-<div class='topic'><!-- START: 2.29 - juneau-marshall.OpenApiDetails -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.OpenApiDetails' id='juneau-marshall.OpenApiDetails'>2.28 - OpenAPI Details</a><span class='update'>updated: 8.2.0</span></h3>
+<div class='topic'><!-- START: 2.28 - juneau-marshall.OpenApiDetails -->
 <p>
 	Juneau supports converting arbitrary POJOs to and from strings using OpenAPI-based schema rules. 
 </p>
@@ -10064,8 +9863,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.OpenApiDetails.OpenApiMethodology' id='juneau-marshall.OpenApiDetails.OpenApiMethodology'>2.29.1 - OpenAPI Methodology</a><span class='update'>updated: 8.2.0</span></h4>
-<div class='topic'><!-- START: 2.29.1 - juneau-marshall.OpenApiDetails.OpenApiMethodology -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.OpenApiDetails.OpenApiMethodology' id='juneau-marshall.OpenApiDetails.OpenApiMethodology'>2.28.1 - OpenAPI Methodology</a><span class='update'>updated: 8.2.0</span></h4>
+<div class='topic'><!-- START: 2.28.1 - juneau-marshall.OpenApiDetails.OpenApiMethodology -->
 <p>
 	Unlike the other Juneau serializers and parsers that convert input and output directly to-and-from POJOs,
 	the OpenAPI serializers and parsers use intermediate objects based on the <c>type</c> and <c>format</c>
@@ -10206,12 +10005,12 @@
 <p>
 	The next sections go more into depth on serializing and parsing various POJO types.
 </p>
-</div><!-- END: 2.29.1 - juneau-marshall.OpenApiDetails.OpenApiMethodology -->
+</div><!-- END: 2.28.1 - juneau-marshall.OpenApiDetails.OpenApiMethodology -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.OpenApiDetails.OpenApiSerializers' id='juneau-marshall.OpenApiDetails.OpenApiSerializers'>2.29.2 - OpenAPI Serializers</a><span class='update'>updated: 8.2.0</span></h4>
-<div class='topic'><!-- START: 2.29.2 - juneau-marshall.OpenApiDetails.OpenApiSerializers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.OpenApiDetails.OpenApiSerializers' id='juneau-marshall.OpenApiDetails.OpenApiSerializers'>2.28.2 - OpenAPI Serializers</a><span class='update'>updated: 8.2.0</span></h4>
+<div class='topic'><!-- START: 2.28.2 - juneau-marshall.OpenApiDetails.OpenApiSerializers -->
 <p>
 	The {@link org.apache.juneau.oapi.OpenApiSerializer} class is used to convert POJOs to HTTP parts.
 </p>
@@ -10346,7 +10145,7 @@
 						<li><c><jk>public byte</jk>[] toBytes() {...}</c>
 						<li><c><jk>public byte</jk>[]</jk> toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a <c><jk>byte</jk>[]</c> via a {@link org.apache.juneau.transform.PojoSwap}.
+				<li>Any POJO transformable to a <c><jk>byte</jk>[]</c> via a {@link org.apache.juneau.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -10361,7 +10160,7 @@
 						<li><c><jk>public</jk> Calendar toCalendar() {...}</c>
 						<li><c><jk>public</jk> Calendar toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.util.Calendar} via a {@link org.apache.juneau.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.util.Calendar} via a {@link org.apache.juneau.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -10382,7 +10181,7 @@
 					<ul>
 						<li><c><jk>public</jk> String toString() {...}</c>
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.String} via a {@link org.apache.juneau.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.String} via a {@link org.apache.juneau.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -10399,7 +10198,7 @@
 						<li><c><jk>public</jk> Boolean toBoolean() {...}</c>
 						<li><c><jk>public</jk> Boolean toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.Boolean} via a {@link org.apache.juneau.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.Boolean} via a {@link org.apache.juneau.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -10416,7 +10215,7 @@
 						<li><c><jk>public</jk> Integer toInteger() {...}</c>
 						<li><c><jk>public</jk> Integer toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to an {@link java.lang.Integer} via a {@link org.apache.juneau.transform.PojoSwap}.
+				<li>Any POJO transformable to an {@link java.lang.Integer} via a {@link org.apache.juneau.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -10432,7 +10231,7 @@
 						<li><c><jk>public</jk> Long toLong() {...}</c>
 						<li><c><jk>public</jk> Long toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.Long} via a {@link org.apache.juneau.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.Long} via a {@link org.apache.juneau.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -10449,7 +10248,7 @@
 						<li><c><jk>public</jk> Float toFloat() {...}</c>
 						<li><c><jk>public</jk> Float toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.Float} via a {@link org.apache.juneau.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.Float} via a {@link org.apache.juneau.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -10465,7 +10264,7 @@
 						<li><c><jk>public</jk> Double toDouble() {...}</c>
 						<li><c><jk>public</jk> Double toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to a {@link java.lang.Double} via a {@link org.apache.juneau.transform.PojoSwap}.
+				<li>Any POJO transformable to a {@link java.lang.Double} via a {@link org.apache.juneau.swap.ObjectSwap}.
 			</ul>
 		</td>
 	</tr>
@@ -10480,7 +10279,7 @@
 					<ul>
 						<li><c><jk>public</jk> Boolean[][] toFoo() {...}</c> (any method name starting with "to")
 					</ul>
-				<li>Any POJO transformable to arrays of the default types via a {@link org.apache.juneau.transform.PojoSwap}
+				<li>Any POJO transformable to arrays of the default types via a {@link org.apache.juneau.swap.ObjectSwap}
 			</ul>
 		</td>
 	</tr>
@@ -10499,7 +10298,7 @@
 			<ul>
 				<li><c>Map&lt;String,Object&gt;</c> (default)
 				<li>Beans with properties of anything on this list.
-				<li>Any POJO transformable to a map via a {@link org.apache.juneau.transform.PojoSwap}
+				<li>Any POJO transformable to a map via a {@link org.apache.juneau.swap.ObjectSwap}
 			</ul>
 		</td>
 	</tr>
@@ -10687,12 +10486,12 @@
 		However, you will get <c>SerializeExceptions</c> if you attempt an impossible conversion.
 		(e.g. trying to serialize the string "foo" as a boolean). 
 </ul>
-</div><!-- END: 2.29.2 - juneau-marshall.OpenApiDetails.OpenApiSerializers -->
+</div><!-- END: 2.28.2 - juneau-marshall.OpenApiDetails.OpenApiSerializers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.OpenApiDetails.OpenApiParsers' id='juneau-marshall.OpenApiDetails.OpenApiParsers'>2.29.3 - OpenAPI Parsers</a><span class='update'>updated: 8.2.0</span></h4>
-<div class='topic'><!-- START: 2.29.3 - juneau-marshall.OpenApiDetails.OpenApiParsers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.OpenApiDetails.OpenApiParsers' id='juneau-marshall.OpenApiDetails.OpenApiParsers'>2.28.3 - OpenAPI Parsers</a><span class='update'>updated: 8.2.0</span></h4>
+<div class='topic'><!-- START: 2.28.3 - juneau-marshall.OpenApiDetails.OpenApiParsers -->
 <p>
 	The {@link org.apache.juneau.oapi.OpenApiParser} class is used to convert HTTP parts back into POJOs.
 </p>
@@ -11013,13 +10812,13 @@
 		However, you will get <c>ParseExceptions</c> if you attempt an impossible conversion.
 		(e.g. trying to parse the string "foo" into a boolean). 
 </ul>
-</div><!-- END: 2.29.3 - juneau-marshall.OpenApiDetails.OpenApiParsers -->
-</div><!-- END: 2.29 - juneau-marshall.OpenApiDetails -->
+</div><!-- END: 2.28.3 - juneau-marshall.OpenApiDetails.OpenApiParsers -->
+</div><!-- END: 2.28 - juneau-marshall.OpenApiDetails -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage' id='juneau-marshall.SimpleVariableLanguage'>2.30 - Simple Variable Language</a></h3>
-<div class='topic'><!-- START: 2.30 - juneau-marshall.SimpleVariableLanguage -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage' id='juneau-marshall.SimpleVariableLanguage'>2.29 - Simple Variable Language</a></h3>
+<div class='topic'><!-- START: 2.29 - juneau-marshall.SimpleVariableLanguage -->
 <p>
 	The <l>org.apache.juneau.svl</l> packages defines an API for a language called <l>Simple Variable Language</l>.
 	In a nutshell, Simple Variable Language (or SVL) is text that contains variables of the form <js>"$varName{varKey}"</js>.
@@ -11072,8 +10871,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage.SvlVariables' id='juneau-marshall.SimpleVariableLanguage.SvlVariables'>2.30.1 - SVL Variables</a><span class='update'>updated: 8.0.0,8.1.0</span></h4>
-<div class='topic'><!-- START: 2.30.1 - juneau-marshall.SimpleVariableLanguage.SvlVariables -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage.SvlVariables' id='juneau-marshall.SimpleVariableLanguage.SvlVariables'>2.29.1 - SVL Variables</a><span class='update'>updated: 8.0.0,8.1.0</span></h4>
+<div class='topic'><!-- START: 2.29.1 - juneau-marshall.SimpleVariableLanguage.SvlVariables -->
 <p>
 	Variables are defined through the {@link org.apache.juneau.svl.Var} API.
 	The API comes with several predefined variables and is easily extensible.
@@ -11259,12 +11058,12 @@
 		<td class='code'>$UE{uriPart}</td>
 	</tr>
 </table>
-</div><!-- END: 2.30.1 - juneau-marshall.SimpleVariableLanguage.SvlVariables -->
+</div><!-- END: 2.29.1 - juneau-marshall.SimpleVariableLanguage.SvlVariables -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage.VarResolvers' id='juneau-marshall.SimpleVariableLanguage.VarResolvers'>2.30.2 - VarResolvers and VarResolverSessions</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 2.30.2 - juneau-marshall.SimpleVariableLanguage.VarResolvers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage.VarResolvers' id='juneau-marshall.SimpleVariableLanguage.VarResolvers'>2.29.2 - VarResolvers and VarResolverSessions</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 2.29.2 - juneau-marshall.SimpleVariableLanguage.VarResolvers -->
 <p>
 	The main class for performing variable resolution is {@link org.apache.juneau.svl.VarResolver}.
 	Two methods are provided for resolving variables:
@@ -11321,12 +11120,12 @@
 		.vars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>)
 		.build();
 </p>
-</div><!-- END: 2.30.2 - juneau-marshall.SimpleVariableLanguage.VarResolvers -->
+</div><!-- END: 2.29.2 - juneau-marshall.SimpleVariableLanguage.VarResolvers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage.DefaultVarResolver' id='juneau-marshall.SimpleVariableLanguage.DefaultVarResolver'>2.30.3 - VarResolver.DEFAULT</a><span class='update'>created: 8.1.0</span></h4>
-<div class='topic'><!-- START: 2.30.3 - juneau-marshall.SimpleVariableLanguage.DefaultVarResolver -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage.DefaultVarResolver' id='juneau-marshall.SimpleVariableLanguage.DefaultVarResolver'>2.29.3 - VarResolver.DEFAULT</a><span class='update'>created: 8.1.0</span></h4>
+<div class='topic'><!-- START: 2.29.3 - juneau-marshall.SimpleVariableLanguage.DefaultVarResolver -->
 <p>
 	{@link org.apache.juneau.svl.VarResolver#DEFAULT} is a reusable variable resolver with default support for the following variables:
 </p>
@@ -11347,12 +11146,12 @@
 	<li><c>$LN{arg[,delimiter]}</c> - {@link org.apache.juneau.svl.vars.LenVar}
 	<li><c>$ST{arg,start[,end]}</c> - {@link org.apache.juneau.svl.vars.SubstringVar}
 </ul>
-</div><!-- END: 2.30.3 - juneau-marshall.SimpleVariableLanguage.DefaultVarResolver -->
+</div><!-- END: 2.29.3 - juneau-marshall.SimpleVariableLanguage.DefaultVarResolver -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage.SvlOtherNotes' id='juneau-marshall.SimpleVariableLanguage.SvlOtherNotes'>2.30.4 - Other Notes</a></h4>
-<div class='topic'><!-- START: 2.30.4 - juneau-marshall.SimpleVariableLanguage.SvlOtherNotes -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.SimpleVariableLanguage.SvlOtherNotes' id='juneau-marshall.SimpleVariableLanguage.SvlOtherNotes'>2.29.4 - Other Notes</a></h4>
+<div class='topic'><!-- START: 2.29.4 - juneau-marshall.SimpleVariableLanguage.SvlOtherNotes -->
 <ul class='spaced-list'>
 	<li>
 		The escape character <js>'\'</js> can be used when necessary to escape the following characters: 
@@ -11368,13 +11167,13 @@
 		<br>For example, calling the resolve method on a string that doesn't contain variables (e.g. 
 		<c>resolver.resolve(<js>"foobar"</js>)</c>) will simply be a no-op and return the same string.
 </ul>
-</div><!-- END: 2.30.4 - juneau-marshall.SimpleVariableLanguage.SvlOtherNotes -->
-</div><!-- END: 2.30 - juneau-marshall.SimpleVariableLanguage -->
+</div><!-- END: 2.29.4 - juneau-marshall.SimpleVariableLanguage.SvlOtherNotes -->
+</div><!-- END: 2.29 - juneau-marshall.SimpleVariableLanguage -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.BestPractices' id='juneau-marshall.BestPractices'>2.31 - Best Practices</a></h3>
-<div class='topic'><!-- START: 2.31 - juneau-marshall.BestPractices -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.BestPractices' id='juneau-marshall.BestPractices'>2.30 - Best Practices</a></h3>
+<div class='topic'><!-- START: 2.30 - juneau-marshall.BestPractices -->
 <ol class='spaced-list'>
 	<li>
 		Reuse instances of serializers and parsers whenever possible.
@@ -11398,7 +11197,7 @@
 		take in {@link java.lang.Class} or {@link java.lang.Object} parameters, since the latter methods involve 
 		hash lookups to resolve to {@link org.apache.juneau.ClassMeta} parameters.
 </ol>
-</div><!-- END: 2.31 - juneau-marshall.BestPractices -->
+</div><!-- END: 2.30 - juneau-marshall.BestPractices -->
 </div><!-- END: 2 - juneau-marshall -->
 
 <!-- ==================================================================================================== -->
@@ -16033,7 +15832,7 @@
 	<jk>public void</jk> doGet3(RestRequest <jv>req</jv>, RestResponse <jv>res</jv>, <ja>@Path</ja>(<js>"personId"</js>) UUID personId) {
 		Person <jv>person</jv> = <jsm>getPersonById</jsm>(<jv>personId</jv>);
 		String <jv>accept</jv> = <jv>req</jv>.getStringHeader(<js>"Accept"</js>).orElse(<js>"text/json"</js>);
-		WriterSerializer <jv>serializer</jv> = <jv>res</jv>.getSerializerGroup().getWriterSerializer(<jv>accept</jv>);
+		WriterSerializer <jv>serializer</jv> = <jv>res</jv>.getSerializers().getWriterSerializer(<jv>accept</jv>);
 		<jv>res</jv>.setContentType(<jv>serializer</jv>.getResponseContentType());
 		<jv>serializer</jv>.serialize(<jv>person</jv>, <jv>res</jv>.getNegotiatedWriter());
 	}
@@ -30749,8 +30548,8 @@ Resource bundles are searched using the following base name patterns:
 		The API for handling non-standard POJOs has been simplified by introducing the concept of a {@del Transform} class, which is associated with the <c>BeanContext</c> class (and thus the Serializer and Parser classes too) through the <c>BeanContext.addTransforms(Class[])</c> method.<br>
 		Two new subclasses of {@del Transform}:
 		<ul>
-			<li>{@del org.apache.juneau.transform.BeanFilter} - Filter POJO beans.</li>
-			<li>{@link org.apache.juneau.transform.PojoSwap} - Filter POJOs that aren't beans.</li>
+			<li>{@del org.apache.juneau.swap.BeanFilter} - Filter POJO beans.</li>
+			<li>{@link org.apache.juneau.swap.ObjectSwap} - Filter POJOs that aren't beans.</li>
 		</ul>
 		This new API replaces the previous separate <c>Cast</c> and <c>BeanFilter</c> APIs which were considerably more complicated and puts them under a common API. 
 	</li>
@@ -30922,7 +30721,7 @@ Resource bundles are searched using the following base name patterns:
 		Merged separate settings classes back into their base classes (simplifies the API).
 	</li>
 	<li>
-		{@link org.apache.juneau.serializer.SerializerSet SerializerGroups} and {@link org.apache.juneau.parser.ParserSet ParserGroups} now share {@link org.apache.juneau.BeanContext BeanContexts} to reduce memory consumption of class type metadata.	
+		{@del org.apache.juneau.serializer.SerializerGroup SerializerGroups} and {@del org.apache.juneau.parser.ParserGroup ParserGroups} now share {@link org.apache.juneau.BeanContext BeanContexts} to reduce memory consumption of class type metadata.	
 	</li>	
 </ul>
 </div><!-- END: 5.0.0.3 -->
@@ -31332,7 +31131,7 @@ Resource bundles are searched using the following base name patterns:
 </p>
 <p>
 	The biggest change is that the <c>RestSerializer</c>, <c>RestParser</c>, <c>RestSerializerGroup</c>, and <c>RestParserGroup</c> classes have been eliminated entirely.<br>  
-	Instead, the existing {@link org.apache.juneau.serializer.Serializer}, {@link org.apache.juneau.parser.Parser}, {@link org.apache.juneau.serializer.SerializerSet}, and {@link org.apache.juneau.parser.ParserSet} classes of the core API have been augmented to replace them.
+	Instead, the existing {@link org.apache.juneau.serializer.Serializer}, {@link org.apache.juneau.parser.Parser}, {@del org.apache.juneau.serializer.SerializerGroup}, and {@del org.apache.juneau.parser.ParserGroup} classes of the core API have been augmented to replace them.
 </p>
 <p>
 	Adoptions will be required if you have previously used these classes.
@@ -31345,7 +31144,7 @@ Resource bundles are searched using the following base name patterns:
 			<li>Entirely reworked class hierarchy to make it easier to define new serializers.</li>
 			<li>New {@link org.apache.juneau.serializer.WriterSerializer} base class for defining character-based serializers.</li>
 			<li>New {@link org.apache.juneau.serializer.OutputStreamSerializer} base class for defining byte-based serializers.</li>
-			<li>Updated {@link org.apache.juneau.serializer.SerializerSet} class with full support for RFC2616 <c>Accept-Content</c> headers.</li>
+			<li>Updated {@del org.apache.juneau.serializer.SerializerGroup} class with full support for RFC2616 <c>Accept-Content</c> headers.</li>
 			<li>Improved cloning support on serializers and serializer groups.</li>
 		</ul>
        	</li>
@@ -31359,10 +31158,10 @@ Resource bundles are searched using the following base name patterns:
        		</ul>
        	</li>
        	<li>
-		New <c>org.apache.juneau.transform</c> package.
+		New <c>org.apache.juneau.swap</c> package.
 		<ul>
 			<li>Cleaner class structure.</li>
-			<li>Improved {@del org.apache.juneau.transform.BeanFilter} class for defining property filters on beans.</li>
+			<li>Improved {@del org.apache.juneau.swap.BeanFilter} class for defining property filters on beans.</li>
 			<li>Improved {@link org.apache.juneau.utils.PojoQuery} class for defining filters on objects (previously called <c>ObjectFilter</c>).</li>
        		</ul>
        	</li>
@@ -31372,7 +31171,7 @@ Resource bundles are searched using the following base name patterns:
 			<li>Defines API for {@link org.apache.juneau.encoders.Encoder Encoders} for enabling compression in REST servlets and clients.</li>
 			<li>Previously, gzip compression was enabled by default.  This new API allows you to plug in your own compression algorithms.</li>
 			<li>New {@link org.apache.juneau.encoders.GzipEncoder} class for enabling gzip compression.</li>
-			<li>New {@link org.apache.juneau.encoders.EncoderSet} class for managing multiple encoders and finding them based on RFC2616 <c>Accept-Encoding</c> header values.</li>
+			<li>New {@del org.apache.juneau.encoders.EncoderGroup} class for managing multiple encoders and finding them based on RFC2616 <c>Accept-Encoding</c> header values.</li>
 		</ul>
 	</li>
 	<li>
@@ -31707,7 +31506,7 @@ Resource bundles are searched using the following base name patterns:
 		Removed <c><ja>@Xml</ja>.valAttr</c> annotation since it's now redundant with <c><ja>@Xml</ja>(format=<jsf>CONTENT</jsf>)</c>.
 		</li>
 		<li>
-		Fixed timezone bug in {@del org.apache.juneau.transforms.CalendarSwap}.
+		Fixed timezone bug in {@del org.apache.juneau.swaps.CalendarSwap}.
 	</li>
 		<li>
 		Simplified <c>Serializer.serialize(Object,Object,SerializerContext)</c> method.
@@ -31839,7 +31638,7 @@ Resource bundles are searched using the following base name patterns:
 	<li>
 		Revamped the API for filter support:
 		<ul>
-			<li>Updated {@del org.apache.juneau.transform.BeanFilter} class to mirror the {@link org.apache.juneau.annotation.Bean @Bean} annotation.</li>
+			<li>Updated {@del org.apache.juneau.swap.BeanFilter} class to mirror the {@link org.apache.juneau.annotation.Bean @Bean} annotation.</li>
 			<li>Introduced support for bean {@del Bean#subTypeProperty() subtypes}. </li>
 			<li>Replaced <c><ja>@Bean</ja>(filter=xxx)</c> with new {@del @Transform} annotation.</li>
 		</ul>
@@ -31859,8 +31658,8 @@ Resource bundles are searched using the following base name patterns:
 	<li>
 		New predefined DateFilters with millisecond precision:
 		<ul>
-			<li><c>org.apache.juneau.transforms.DateSwap.ISO8601DTP</c></li>
-			<li><c>org.apache.juneau.transforms.DateSwap.ISO8601DTZP</c></li>
+			<li><c>org.apache.juneau.swaps.DateSwap.ISO8601DTP</c></li>
+			<li><c>org.apache.juneau.swaps.DateSwap.ISO8601DTZP</c></li>
 		</ul>
 	</li>
 </ul>
@@ -31897,7 +31696,7 @@ Resource bundles are searched using the following base name patterns:
 		The new class hierarchy is much simpler to understand.
 	</li>
 	<li>
-		Added {@link org.apache.juneau.transforms.XMLGregorianCalendarSwap} to convert these to ISO8601 strings during serialization, and vice versa during parsing.
+		Added {@link org.apache.juneau.swaps.XMLGregorianCalendarSwap} to convert these to ISO8601 strings during serialization, and vice versa during parsing.
 	</li>
 	<li>
 		Added a strict mode to {@link org.apache.juneau.json.JsonParser}.
@@ -32271,8 +32070,8 @@ Resource bundles are searched using the following base name patterns:
 	<li>New {@link org.apache.juneau.json.annotation.Json#wrapperAttr() @Json(wrapperAttr)}	annotation that automatically wraps beans and objects in a wrapper
 		attribute when serializing to or parsing from JSON.
 	<li>Changed the default ordering of bean properties to be in parent-to-child class order.
-	<li>New {@del org.apache.juneau.transform.BeanFilter#readProperty(Object,String,Object) readProperty()} and {@del org.apache.juneau.transform.BeanFilter#writeProperty(Object,String,Object) writeProperty()}
-		methods added to {@del org.apache.juneau.transform.BeanFilter} class to allow individualized serialization and parsing behavior on a class-by-class basis.
+	<li>New {@del org.apache.juneau.swap.BeanFilter#readProperty(Object,String,Object) readProperty()} and {@del org.apache.juneau.swap.BeanFilter#writeProperty(Object,String,Object) writeProperty()}
+		methods added to {@del org.apache.juneau.swap.BeanFilter} class to allow individualized serialization and parsing behavior on a class-by-class basis.
 	<li>Eliminated previous restriction where bean subtype attributes had to be listed first in JSON objects when using the {@del Bean#subTypeProperty()} annotation.
 		The previous behavior was not strictly JSON-compliant since JSON objects are supposed to consist of unordered lists of key/value pairs.
 		While targeted for JSON, the restriction is also lifted for all other parsers.  	
@@ -32345,11 +32144,11 @@ Resource bundles are searched using the following base name patterns:
 	Juno 5.1.0.6 is a moderate update.
 </p>
 <ul class='spaced-list'>
-	<li>Simplified API for {@link org.apache.juneau.transform.PojoSwap}.  
+	<li>Simplified API for {@link org.apache.juneau.swap.ObjectSwap}.  
 		Since it's rarely used, the <c>beanContext</c> parameter was replaced with a {@del PojoSwap#getBeanContext()} method on
 		the class.
-	<li>New simplified way of defining POJO filters without needing to extend {@link org.apache.juneau.transform.PojoSwap}.
-		See {@link org.apache.juneau.transform.SurrogateSwap} for details.
+	<li>New simplified way of defining POJO filters without needing to extend {@link org.apache.juneau.swap.ObjectSwap}.
+		See {@link org.apache.juneau.swap.SurrogateSwap} for details.
 	<li>New {@link org.apache.juneau.html.annotation.Html @Html} annotation.
 		Will allow the definition of standard XHTML DTOs in future releases.  
 		For now, {@del Img} is an example of defining an XHTML element using Juno DTOs.
@@ -32643,7 +32442,7 @@ Resource bundles are searched using the following base name patterns:
 <ul class='spaced-list'>
 	<li>{@link org.apache.juneau.ClassMeta#newInstance()} method can now create new instances of arrays.
 	<li>Arguments passed to {@del Link} are now serialized using {@link org.apache.juneau.urlencoding.UrlEncodingSerializer}, so arbitrary POJOs can now be passed as arguments.
-	<li>New date filters:  <c>org.apache.juneau.transforms.Datefilter.ISO8601DTZP</c> and <c>org.apache.juneau.transforms.Datefilter.SimpleP</c>.
+	<li>New date filters:  <c>org.apache.juneau.swaps.Datefilter.ISO8601DTZP</c> and <c>org.apache.juneau.swaps.Datefilter.SimpleP</c>.
 	<li>New {@del HtmlDocSerializerContext#HTMLDOC_nowrap} setting for {@link org.apache.juneau.html.HtmlDocSerializer} class.  
 		Adds <js>"* {white-space:nowrap}"</js> to the style header to prevent word wrapping.
 	<li>Fixed bug in {@link org.apache.juneau.uon.UonParser} where passing in a blank value on an array or collection type in a form post would cause a <c>ClassCastException</c>.  
@@ -33251,7 +33050,7 @@ Resource bundles are searched using the following base name patterns:
 	<li>New {@del StringVar#doResolve(String)} method.
 	<li>New {@del StringVarResolver#DEFAULT} field.
 	<li>Eliminated dependency on <c>javax.mail.internet.MimeUtility</c> by implementing our own {@link org.apache.juneau.internal.StringUtils#base64Encode(byte[])} method.
-	<li>{@del org.apache.juneau.transforms.CalendarSwap} and {@del org.apache.juneau.transforms.DateSwap} classes now handle blank input better.  Returns <jk>null</jk> instead of throwing an exception.
+	<li>{@del org.apache.juneau.swaps.CalendarSwap} and {@del org.apache.juneau.swaps.DateSwap} classes now handle blank input better.  Returns <jk>null</jk> instead of throwing an exception.
 	<li>{@link org.apache.juneau.html.HtmlDocSerializer} specifies the default CSS location as <c>/servletPath/style.css</c> instead of <c>/servletPath/htdocs/juneau.css</c>.  
 		This coincides with enhancements made in the server code for specifying styles.
 	<li>{@link org.apache.juneau.html.HtmlDocSerializer} wraps output in two div tags instead of one (e.g. <c>&lt;div class='outerdata'&gt;&lt;div class='data' id='data'&gt;...&lt;/div&gt;&lt;/div&gt;</c>).
@@ -33262,7 +33061,7 @@ Resource bundles are searched using the following base name patterns:
 	<li>RDF parser handles case where resources point to themselves (an unfortunate behavior in JFS RDF documents).
 	<li>JSON parser with throw an exception in strict mode if it encounters numbers that are valid in Java but invalid in JSON (e.g. octal, hexadecimal numbers).
 	<li>{@link org.apache.juneau.parser.Parser} methods now check for <jk>null</jk> input.
-	<li>{@link org.apache.juneau.serializer.SerializerSet} and {@link org.apache.juneau.parser.ParserSet} ignores serializers and parsers if they throw <c>NoClassDefFoundErrors</c>.
+	<li>{@del org.apache.juneau.serializer.SerializerGroup} and {@del org.apache.juneau.parser.ParserGroup} ignores serializers and parsers if they throw <c>NoClassDefFoundErrors</c>.
 	<li>{@link org.apache.juneau.urlencoding.UrlEncodingParser} creates lists if the same attribute name is encountered more than once.  Before it would just replace the previous value with the new value.
 	<li>New {@del UrlEncodingSerializer#DEFAULT_SIMPLE_EXPANDED} serializer.
 	<li>Changes to {@del Args}:
@@ -33283,7 +33082,7 @@ Resource bundles are searched using the following base name patterns:
 	<li>Several bug fixes and performance improvements in {@del StringVarResolver}.
 	<li>Various enhancements to {@del org.apache.juneau.internal.TeeWriter} and {@del org.apache.juneau.internal.TeeOutputStream}.
 	<li>Renamed {@del CharSet} to {@link org.apache.juneau.internal.AsciiSet}.
-	<li>{@link org.apache.juneau.serializer.SerializerSet} and {@link org.apache.juneau.parser.ParserSet} now ignores <c>NoClassDefFoundErrors</c>
+	<li>{@del org.apache.juneau.serializer.SerializerGroup} and {@del org.apache.juneau.parser.ParserGroup} now ignores <c>NoClassDefFoundErrors</c>
 		so that resources that include Jena support can continue to operate even if the Jena libraries are not present.
 	<li>New {@link org.apache.juneau.internal.FileUtils#createTempFile(String)} method.
 	<li>New {@link org.apache.juneau.utils.PojoQuery} modified to handle bean getters that throw exceptions.
@@ -33513,7 +33312,7 @@ Resource bundles are searched using the following base name patterns:
 	<li>{@del StringVarResolver} - New documentation.
 	<li>{@del org.apache.juneau.rest.client} - New package-level javadoc.
 	<li><dc>Overview / Samples</dc> - New section.
-	<li><dc>org.apache.juneau.transform / Stop Classes</dc> - New section.
+	<li><dc>org.apache.juneau.swap / Stop Classes</dc> - New section.
 	<li>{@del org.apache.juneau.rest} - Extensive updates.
 </ul>
 </div><!-- END: 5.2.0.0 -->
@@ -33619,7 +33418,7 @@ Resource bundles are searched using the following base name patterns:
 		The following features were added to enable this support:
 		<ul>
 			<li>{@link org.apache.juneau.annotation.Bean#typeName() @Bean(typeName)} - Annotation that defines an identifying name for a bean class.
-			<li>{@del org.apache.juneau.transform.BeanFilterBuilder#typeName(String)} - Programmatic equivalent to annotation above.
+			<li>{@del org.apache.juneau.swap.BeanFilterBuilder#typeName(String)} - Programmatic equivalent to annotation above.
 			<li>{@del org.apache.juneau.BeanContext#BEAN_beanDictionary} - List of bean classes that make up the bean dictionary for lookup
 				during parsing. 
 			<li>{@del BEAN_beanTypePropertyName} - The overridable type property name.  Default is <js>"_type"</js>.
@@ -33629,7 +33428,7 @@ Resource bundles are searched using the following base name patterns:
 		</ul>
 		In addition, the {@link org.apache.juneau.annotation.Bean#typeName() @Bean(typeName)} value replaces the <c>@Xml(name)</c> annotation, and the 
 		<js>"type"</js> and <js>"_class"</js> attributes in the XML and HTML serializers have been standardized on a single <js>"_type"</js> attribute.
-	<li>Refactor bean filter support to use {@del org.apache.juneau.transform.BeanFilterBuilder} class.
+	<li>Refactor bean filter support to use {@del org.apache.juneau.swap.BeanFilterBuilder} class.
 		Allows the <c>BeanFilter</c> class to use final fields.
 	<li>{@link org.apache.juneau.msgpack MessagePack} support.
 	<li>Serializers can now serialize directly to {@link java.io.File Files}.
@@ -33658,7 +33457,7 @@ Resource bundles are searched using the following base name patterns:
 		IBM JVMs maintain the order of methods in a class, whereas Oracle JVMs do not.
 	<li>Serializers and parsers now automatically convert {@link java.lang.Class} objects to readable names via {@del ClassUtils#getReadableClassName(Class)}.
 	<li>Eliminated the <c>ClassFilter</c> class since it's no longer needed.
-	<li>Code and concurrency improvements to {@link org.apache.juneau.serializer.SerializerSet} and {@link org.apache.juneau.parser.ParserSet}.
+	<li>Code and concurrency improvements to {@del org.apache.juneau.serializer.SerializerGroup} and {@del org.apache.juneau.parser.ParserGroup}.
 	<li>Various enhancements to {@del BeanContext#convertToType(Object,Class)}.
 	<li>New properties on {@link org.apache.juneau.html.HtmlSerializer}:
 		<ul>
@@ -33879,10 +33678,10 @@ Resource bundles are searched using the following base name patterns:
 	<jk>new</jk> JsonSerializer().setSimpleMode(<jk>true</jk>).setQuoteChar(<js>'"'</js>);
 			</p>
 	</ul>
-	<li>Simplified {@link org.apache.juneau.transform.PojoSwap} class.  Now just two methods:
+	<li>Simplified {@link org.apache.juneau.swap.ObjectSwap} class.  Now just two methods:
 	<ul>
-		<li>{@link org.apache.juneau.transform.PojoSwap#swap(BeanSession,Object)}
-		<li>{@link org.apache.juneau.transform.PojoSwap#unswap(BeanSession,Object,ClassMeta)}
+		<li>{@link org.apache.juneau.swap.ObjectSwap#swap(BeanSession,Object)}
+		<li>{@link org.apache.juneau.swap.ObjectSwap#unswap(BeanSession,Object,ClassMeta)}
 	</ul>
 	<li>General code improvements made to {@link org.apache.juneau.ClassMeta} class.
 	<ul>
@@ -33895,33 +33694,33 @@ Resource bundles are searched using the following base name patterns:
 		Allows for swaps and serializer/parser behavior to be tailored to individual media types.
 	<li>Several new {@link java.util.Calendar} and {@link java.util.Date} swaps:
 	<ul>
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.ToString},{@del org.apache.juneau.transforms.DateSwap.ToString} - To {@link java.lang.String Strings} using the {@code Date.toString()} method.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.ISO8601DT},{@del org.apache.juneau.transforms.DateSwap.ISO8601DT} - To ISO8601 date-time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.ISO8601DTZ},{@del org.apache.juneau.transforms.DateSwap.ISO8601DTZ} - Same as <jsf>ISO8601DT</jsf>, except always serializes in GMT.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.ISO8601DTP},{@del org.apache.juneau.transforms.DateSwap.ISO8601DTP} - Same as <jsf>ISO8601DT</jsf> except with millisecond precision.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.ISO8601DTPZ},{@del org.apache.juneau.transforms.DateSwap.ISO8601DTPZ} - Same as <jsf>ISO8601DTZ</jsf> except with millisecond precision.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.RFC2822DT},{@del org.apache.juneau.transforms.DateSwap.RFC2822DT} - To RFC2822 date-time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.RFC2822DTZ},{@del org.apache.juneau.transforms.DateSwap.RFC2822DTZ} - Same as <jsf>RFC2822DT</jsf>, except always serializes in GMT.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.RFC2822D},{@del org.apache.juneau.transforms.DateSwap.RFC2822D} - To RFC2822 date strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateTimeSimple},{@del org.apache.juneau.transforms.DateSwap.DateTimeSimple} - To simple <js>"yyyy/MM/dd HH:mm:ss"</js> date-time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateSimple},{@del org.apache.juneau.transforms.DateSwap.DateSimple} - To simple <js>"yyyy/MM/dd"</js> date strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.TimeSimple},{@del org.apache.juneau.transforms.DateSwap.TimeSimple} - To simple <js>"HH:mm:ss"</js> time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateFull},{@del org.apache.juneau.transforms.DateSwap.DateFull} - To {@link java.text.DateFormat#FULL} date strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateLong},{@del org.apache.juneau.transforms.DateSwap.DateLong} - To {@link java.text.DateFormat#LONG} date strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateMedium},{@del org.apache.juneau.transforms.DateSwap.DateMedium} - To {@link java.text.DateFormat#MEDIUM} date strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateShort},{@del org.apache.juneau.transforms.DateSwap.DateShort} - To {@link java.text.DateFormat#SHORT} date strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.TimeFull},{@del org.apache.juneau.transforms.DateSwap.TimeFull} - To {@link java.text.DateFormat#FULL} time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.TimeLong},{@del org.apache.juneau.transforms.DateSwap.TimeLong} - To {@link java.text.DateFormat#LONG} time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.TimeMedium},{@del org.apache.juneau.transforms.DateSwap.TimeMedium} - To {@link java.text.DateFormat#MEDIUM} time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.TimeShort},{@del org.apache.juneau.transforms.DateSwap.TimeShort} - To {@link java.text.DateFormat#SHORT} time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateTimeFull},{@del org.apache.juneau.transforms.DateSwap.DateTimeFull} - To {@link java.text.DateFormat#FULL} date-time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateTimeLong},{@del org.apache.juneau.transforms.DateSwap.DateTimeLong} - To {@link java.text.DateFormat#LONG} date-time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateTimeMedium},{@del org.apache.juneau.transforms.DateSwap.DateTimeMedium} - To {@link java.text.DateFormat#MEDIUM} date-time strings.
-		<li>{@del org.apache.juneau.transforms.CalendarSwap.DateTimeShort},{@del org.apache.juneau.transforms.DateSwap.DateTimeShort} - To {@link java.text.DateFormat#SHORT} date-time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.ToString},{@del org.apache.juneau.swaps.DateSwap.ToString} - To {@link java.lang.String Strings} using the {@code Date.toString()} method.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.ISO8601DT},{@del org.apache.juneau.swaps.DateSwap.ISO8601DT} - To ISO8601 date-time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.ISO8601DTZ},{@del org.apache.juneau.swaps.DateSwap.ISO8601DTZ} - Same as <jsf>ISO8601DT</jsf>, except always serializes in GMT.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.ISO8601DTP},{@del org.apache.juneau.swaps.DateSwap.ISO8601DTP} - Same as <jsf>ISO8601DT</jsf> except with millisecond precision.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.ISO8601DTPZ},{@del org.apache.juneau.swaps.DateSwap.ISO8601DTPZ} - Same as <jsf>ISO8601DTZ</jsf> except with millisecond precision.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.RFC2822DT},{@del org.apache.juneau.swaps.DateSwap.RFC2822DT} - To RFC2822 date-time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.RFC2822DTZ},{@del org.apache.juneau.swaps.DateSwap.RFC2822DTZ} - Same as <jsf>RFC2822DT</jsf>, except always serializes in GMT.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.RFC2822D},{@del org.apache.juneau.swaps.DateSwap.RFC2822D} - To RFC2822 date strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateTimeSimple},{@del org.apache.juneau.swaps.DateSwap.DateTimeSimple} - To simple <js>"yyyy/MM/dd HH:mm:ss"</js> date-time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateSimple},{@del org.apache.juneau.swaps.DateSwap.DateSimple} - To simple <js>"yyyy/MM/dd"</js> date strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.TimeSimple},{@del org.apache.juneau.swaps.DateSwap.TimeSimple} - To simple <js>"HH:mm:ss"</js> time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateFull},{@del org.apache.juneau.swaps.DateSwap.DateFull} - To {@link java.text.DateFormat#FULL} date strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateLong},{@del org.apache.juneau.swaps.DateSwap.DateLong} - To {@link java.text.DateFormat#LONG} date strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateMedium},{@del org.apache.juneau.swaps.DateSwap.DateMedium} - To {@link java.text.DateFormat#MEDIUM} date strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateShort},{@del org.apache.juneau.swaps.DateSwap.DateShort} - To {@link java.text.DateFormat#SHORT} date strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.TimeFull},{@del org.apache.juneau.swaps.DateSwap.TimeFull} - To {@link java.text.DateFormat#FULL} time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.TimeLong},{@del org.apache.juneau.swaps.DateSwap.TimeLong} - To {@link java.text.DateFormat#LONG} time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.TimeMedium},{@del org.apache.juneau.swaps.DateSwap.TimeMedium} - To {@link java.text.DateFormat#MEDIUM} time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.TimeShort},{@del org.apache.juneau.swaps.DateSwap.TimeShort} - To {@link java.text.DateFormat#SHORT} time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateTimeFull},{@del org.apache.juneau.swaps.DateSwap.DateTimeFull} - To {@link java.text.DateFormat#FULL} date-time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateTimeLong},{@del org.apache.juneau.swaps.DateSwap.DateTimeLong} - To {@link java.text.DateFormat#LONG} date-time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateTimeMedium},{@del org.apache.juneau.swaps.DateSwap.DateTimeMedium} - To {@link java.text.DateFormat#MEDIUM} date-time strings.
+		<li>{@del org.apache.juneau.swaps.CalendarSwap.DateTimeShort},{@del org.apache.juneau.swaps.DateSwap.DateTimeShort} - To {@link java.text.DateFormat#SHORT} date-time strings.
 	</ul>  
-	<li>New method {@link org.apache.juneau.serializer.SerializerSet#getSerializerMatch(String)} that returns the matched serializer and media type.
-	<li>New method {@link org.apache.juneau.parser.ParserSet#getParserMatch(String)} that returns the matched parser and media type.
-	<li>New method {@link org.apache.juneau.encoders.EncoderSet#getEncoderMatch(String)} that returns the matched encoder and encoding.
+	<li>New method {@del org.apache.juneau.serializer.SerializerGroup#getSerializerMatch(String)} that returns the matched serializer and media type.
+	<li>New method {@del org.apache.juneau.parser.ParserGroup#getParserMatch(String)} that returns the matched parser and media type.
+	<li>New method {@del org.apache.juneau.encoders.EncoderGroup#getEncoderMatch(String)} that returns the matched encoder and encoding.
 	<li>General improvements to Bean Dictionary support.
 		<ul>
 			<li>New {@link org.apache.juneau.BeanDictionaryList} class can be used for defining reusable sets of bean dictionaries consisting
@@ -33937,7 +33736,7 @@ Resource bundles are searched using the following base name patterns:
 			<li>New setter method names for a better fluent design.
 			<li>Updated {@del org.apache.juneau.dto.atom} documentation.
 		</ul>
-	<li>New {@link org.apache.juneau.transform.MapSwap} and {@link org.apache.juneau.transform.StringSwap} classes.
+	<li>New {@link org.apache.juneau.swap.MapSwap} and {@link org.apache.juneau.swap.StringSwap} classes.
 	<li>New {@link org.apache.juneau.serializer.WriterSerializer#println(Object)} method.  Useful for debugging purposes.
 	<li>New {@link org.apache.juneau.BeanContext#getClassMeta(Type,Type...)} and {@link org.apache.juneau.BeanSession#getClassMeta(Type,Type...)}
 		methods for retrieving Map and Collection class metas.  
@@ -34034,9 +33833,9 @@ Resource bundles are searched using the following base name patterns:
 		</p>	
 	<li>Also introduced the following builder classes and related architecture changes to make the built objects unmodifiable:
 		<ul>
-			<li>{@link org.apache.juneau.serializer.SerializerSet.Builder}
-			<li>{@link org.apache.juneau.parser.ParserSet.Builder}
-			<li>{@link org.apache.juneau.encoders.EncoderSet.Builder}
+			<li>{@del org.apache.juneau.serializer.SerializerGroup.Builder}
+			<li>{@del org.apache.juneau.parser.ParserGroup.Builder}
+			<li>{@del org.apache.juneau.encoders.EncoderGroup.Builder}
 		</ul>
 	<li>Revamped the config file API to use a build:  {@del ConfigFileBuilder}.
 	<li>Removed the {@del Lockable} interface.
@@ -35170,7 +34969,7 @@ Resource bundles are searched using the following base name patterns:
 				</p>
 		</ul>
 	<li>
-		New {@link org.apache.juneau.transform.Surrogate} interface for identifying surrogate classes.
+		New {@link org.apache.juneau.swap.Surrogate} interface for identifying surrogate classes.
 	<li>
 		Serializers can now serialize to {@link java.util.StringBuilder StringBuilders}.
 	<li>
@@ -35216,11 +35015,11 @@ Resource bundles are searched using the following base name patterns:
 		</p>
 		This is mostly an internal change and doesn't affect the existing APIs.
 	<li>
-		{@link org.apache.juneau.transform.PojoSwap#swap(BeanSession,Object)} and {@link org.apache.juneau.transform.PojoSwap#unswap(BeanSession,Object,ClassMeta)} 
+		{@link org.apache.juneau.swap.ObjectSwap#swap(BeanSession,Object)} and {@link org.apache.juneau.swap.ObjectSwap#unswap(BeanSession,Object,ClassMeta)} 
 		can now throw arbitrary exceptions instead of having to wrap them in <c>SerializeException</c>/<c>ParseException</c>.
 	<li>
-		New {@del org.apache.juneau.utils.CalendarUtils} class that encapsulates serialization/parsing logic from {@del org.apache.juneau.transforms.CalendarSwap} and 
-		{@del org.apache.juneau.transforms.DateSwap}.
+		New {@del org.apache.juneau.utils.CalendarUtils} class that encapsulates serialization/parsing logic from {@del org.apache.juneau.swaps.CalendarSwap} and 
+		{@del org.apache.juneau.swaps.DateSwap}.
 	<li>
 		New annotation {@link org.apache.juneau.html.annotation.Html#anchorText}.
 	<li>
@@ -35479,9 +35278,9 @@ Resource bundles are searched using the following base name patterns:
 		</p>
 		<br>The same static create methods have also been added to the following classes:
 		<ul>
-			<li>{@link org.apache.juneau.serializer.SerializerSet#create()}
-			<li>{@link org.apache.juneau.parser.ParserSet#create()}
-			<li>{@link org.apache.juneau.encoders.EncoderSet#create()}
+			<li>{@del org.apache.juneau.serializer.SerializerGroup#create()}
+			<li>{@del org.apache.juneau.parser.ParserGroup#create()}
+			<li>{@del org.apache.juneau.encoders.EncoderGroup#create()}
 			<li>{@link org.apache.juneau.rest.client.RestClient#create()}
 			<li>{@del ConfigFile#create()}
 		</ul>
@@ -35726,11 +35525,11 @@ Resource bundles are searched using the following base name patterns:
 		New {@del org.apache.juneau.parser.Parser#PARSER_autoCloseStreams} setting allows input streams and
 		readers passed into parsers to be automatically closed after parsing.
 	<li>
-		Syntax changed on unswap method on {@link org.apache.juneau.transform.Surrogate} classes.
+		Syntax changed on unswap method on {@link org.apache.juneau.swap.Surrogate} classes.
 		<br>It's now a regular method instead of a static method.
 	<li>
 		{@link org.apache.juneau.annotation.Swap @Swap} annotation can now be used with 
-		{@link org.apache.juneau.transform.Surrogate} classes.
+		{@link org.apache.juneau.swap.Surrogate} classes.
 	<li>
 		New support for {@doc PojoBuilders POJO Builders}.	
 </ul>
@@ -36929,9 +36728,9 @@ Resource bundles are searched using the following base name patterns:
 	<li>
 		New Java 8 date-time transforms:
 		<ul class='javatree'>
-			<li class='jc'>{@link org.apache.juneau.transforms.TemporalSwap} - For all Java 8 temporal types (e.g. {@link java.time.ZonedDateTime})
-			<li class='jc'>{@link org.apache.juneau.transforms.TemporalDateSwap} - For {@link java.util.Date}
-			<li class='jc'>{@link org.apache.juneau.transforms.TemporalCalendarSwap} - For {@link java.util.Calendar}
+			<li class='jc'>{@link org.apache.juneau.swaps.TemporalSwap} - For all Java 8 temporal types (e.g. {@link java.time.ZonedDateTime})
+			<li class='jc'>{@link org.apache.juneau.swaps.TemporalDateSwap} - For {@link java.util.Date}
+			<li class='jc'>{@link org.apache.juneau.swaps.TemporalCalendarSwap} - For {@link java.util.Calendar}
 		</ul>
 	<li>
 		All serializers and parsers now have built-in default swaps for common class types:
@@ -37560,8 +37359,8 @@ The new API is located in the <c>org.apache.juneau.rest.client2</c> package and
 	<li>
 		New swaps auto-added to all serializers/parsers:
 		<ul>
-			<li class='jc'>{@link org.apache.juneau.transforms.MatchResultSwap} 
-			<li class='jc'>{@link org.apache.juneau.transforms.StackTraceElementSwap} 
+			<li class='jc'>{@link org.apache.juneau.swaps.MatchResultSwap} 
+			<li class='jc'>{@link org.apache.juneau.swaps.StackTraceElementSwap} 
 		</ul>		
 	<li>
 		{@link org.apache.juneau.html.annotation.Html#noTableHeaders} now can be applied to collections of beans.
@@ -37668,7 +37467,7 @@ The new API is located in the <c>org.apache.juneau.rest.client2</c> package and
 	<li>
 		New Bean Property Interceptor API for intercepting calls to bean getters/setters.
 		<ul>
-			<li class='jac'>{@link org.apache.juneau.transform.BeanInterceptor}
+			<li class='jac'>{@link org.apache.juneau.swap.BeanInterceptor}
 			<li class='ja'>{@link org.apache.juneau.annotation.Bean#interceptor Bean(interceptor)}
 			<li class='jm'>{@link org.apache.juneau.BeanContext.Builder#beanInterceptor(Class,Class)}
 		</ul>
diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt b/juneau-doc/src/main/javadoc/resources/docs.txt
index 1240101..2c9bc5d 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -1,4 +1,4 @@
-AutoPojoSwaps = #juneau-marshall.Transforms.AutoPojoSwaps, Overview > juneau-marshall > Transforms > Auto-detected POJO swaps
+AutoPojoSwaps = #juneau-marshall.Swaps.AutoPojoSwaps, Overview > juneau-marshall > Swaps > Auto-detected POJO swaps
 BasicHtmlDocTemplate = #juneau-marshall.HtmlDetails.BasicHtmlDocTemplate, Overview > juneau-marshall > HTML Details > BasicHtmlDocTemplate
 BasicRest = #juneau-rest-server.RestInstantiation.BasicRest, Overview > juneau-rest-server > Instantiation > BasicRest
 BasicRestGroup = #juneau-rest-server.RestInstantiation.BasicRestGroup, Overview > juneau-rest-server > Instantiation > BasicRestGroup
@@ -41,12 +41,11 @@ ConfigStores = #juneau-config.ConfigStores, Overview > juneau-config > Config St
 ConfigVariables = #juneau-config.ConfigVariables, Overview > juneau-config > Variables
 ContextAnnotations = #juneau-marshall.ContextAnnotations, Overview > juneau-marshall > Context Annotations
 ContextSettings = #juneau-marshall.ContextSettings, Overview > juneau-marshall > Context Settings
-ContextsBuildersSessionsPropertyStores = #juneau-marshall.ContextsBuildersSessionsPropertyStores, Overview > juneau-marshall > Contexts, Builders, Sessions, and ContextProperties
 CoreExamples = #juneau-examples-core.CoreExamples, Overview > juneau-examples-core > Examples
 CoreExamplesInstalling = #juneau-examples-core.CoreExamplesInstalling, Overview > juneau-examples-core > Installing in Eclipse
 CoreOverview = #Overview.CoreOverview, Overview > Overview > Core Overview
 CustomConfigStores = #juneau-config.ConfigStores.CustomConfigStores, Overview > juneau-config > Config Stores > Custom ConfigStores
-DefaultPojoSwaps = #juneau-marshall.Transforms.DefaultPojoSwaps, Overview > juneau-marshall > Transforms > Default PojoSwaps
+DefaultPojoSwaps = #juneau-marshall.Swaps.DefaultPojoSwaps, Overview > juneau-marshall > Swaps > Default PojoSwaps
 DefaultVarResolver = #juneau-marshall.SimpleVariableLanguage.DefaultVarResolver, Overview > juneau-marshall > Simple Variable Language > VarResolver.DEFAULT
 DtoAtom = #juneau-dto.DtoAtom, Overview > juneau-dto > Atom
 DtoHtml5 = #juneau-dto.DtoHtml5, Overview > juneau-dto > HTML5
@@ -104,7 +103,6 @@ GeneralDesign = #Overview.GeneralDesign, Overview > Overview > General Design
 Glossaries = #Glossaries, Overview > Glossaries
 GlossaryAnnotations = #Glossaries.GlossaryAnnotations, Overview > Glossaries > Annotations
 GlossaryLanguageSupport = #Glossaries.GlossaryLanguageSupport, Overview > Glossaries > Language Support
-Groups = #juneau-marshall.Groups, Overview > juneau-marshall > SerializerGroups and ParserGroups
 HtmlAnnotation = #juneau-marshall.HtmlDetails.HtmlAnnotation, Overview > juneau-marshall > HTML Details > @Html Annotation
 HtmlCustomTemplates = #juneau-marshall.HtmlDetails.HtmlCustomTemplates, Overview > juneau-marshall > HTML Details > Custom Templates
 HtmlDetails = #juneau-marshall.HtmlDetails, Overview > juneau-marshall > HTML Details
@@ -156,7 +154,7 @@ MySpringBootMicroserviceInstalling = #my-springboot-microservice.MySpringBootMic
 MySpringBootMicroserviceRunning = #my-springboot-microservice.MySpringBootMicroserviceRunning, Overview > my-springboot-microservice > Running in Eclipse
 NamePropertyAnnotation = #juneau-marshall.JavaBeansSupport.NamePropertyAnnotation, Overview > juneau-marshall > Java Beans Support > @NameProperty Annotation
 OMap = #juneau-marshall.OMap, Overview > juneau-marshall > OMap and OList
-OneWayPojoSwaps = #juneau-marshall.Transforms.OneWayPojoSwaps, Overview > juneau-marshall > Transforms > One-way Swaps
+OneWayPojoSwaps = #juneau-marshall.Swaps.OneWayPojoSwaps, Overview > juneau-marshall > Swaps > One-way Swaps
 OpenApiDetails = #juneau-marshall.OpenApiDetails, Overview > juneau-marshall > OpenAPI Details
 OpenApiMethodology = #juneau-marshall.OpenApiDetails.OpenApiMethodology, Overview > juneau-marshall > OpenAPI Details > OpenAPI Methodology
 OpenApiParsers = #juneau-marshall.OpenApiDetails.OpenApiParsers, Overview > juneau-marshall > OpenAPI Details > OpenAPI Parsers
@@ -164,14 +162,13 @@ OpenApiSerializers = #juneau-marshall.OpenApiDetails.OpenApiSerializers, Overvie
 Overview = #Overview, Overview > Overview
 ParentPropertyAnnotation = #juneau-marshall.JavaBeansSupport.ParentPropertyAnnotation, Overview > juneau-marshall > Java Beans Support > @ParentProperty Annotation
 ParsingIntoGenericModels = #juneau-marshall.ParsingIntoGenericModels, Overview > juneau-marshall > Parsing into Generic Models
-PerMediaTypePojoSwaps = #juneau-marshall.Transforms.PerMediaTypePojoSwaps, Overview > juneau-marshall > Transforms > Per-media-type Swaps
+PerMediaTypePojoSwaps = #juneau-marshall.Swaps.PerMediaTypePojoSwaps, Overview > juneau-marshall > Swaps > Per-media-type Swaps
 PetStoreBuilding = #juneau-petstore.PetStoreBuilding, Overview > juneau-pestore > Building and Running from Command-Line (Using Dockerfiles)
 PetStoreInstalling = #juneau-petstore.PetStoreInstalling, Overview > juneau-pestore > Installing in Eclipse
 PetStoreRunning = #juneau-petstore.PetStoreRunning, Overview > juneau-pestore > Running Petstore manually
 PetstoreApp = #juneau-petstore.PetstoreApp, Overview > juneau-pestore > About Petstore App
 PojoBuilders = #juneau-marshall.JavaBeansSupport.PojoBuilders, Overview > juneau-marshall > Java Beans Support > POJO Builders
 PojoCategories = #juneau-marshall.PojoCategories, Overview > juneau-marshall > POJO Categories
-PojoSwaps = #juneau-marshall.Transforms.PojoSwaps, Overview > juneau-marshall > Transforms > Swaps
 RdfAnnotation = #juneau-marshall-rdf.RdfDetails.RdfAnnotation, Overview > juneau-marshall-rdf > RDF Details > @Rdf Annotation
 RdfDetails = #juneau-marshall-rdf.RdfDetails, Overview > juneau-marshall-rdf > RDF Details
 RdfNamespaces = #juneau-marshall-rdf.RdfDetails.RdfNamespaces, Overview > juneau-marshall-rdf > RDF Details > Namespaces
@@ -317,6 +314,7 @@ Security = #Security, Overview > Security Best-Practices
 SecurityMarshall = #Security.SecurityMarshall, Overview > Security Best-Practices > juneau-marshall
 SecurityRest = #Security.SecurityRest, Overview > Security Best-Practices > juneau-rest-server
 SecuritySvl = #Security.SecuritySvl, Overview > Security Best-Practices > juneau-svl
+SerializerSetsParserSets = #juneau-marshall.SerializerSetsParserSets, Overview > juneau-marshall > SerializerSets and ParserSets
 SerializersParsers = #juneau-marshall.SerializersParsers, Overview > juneau-marshall > Serializers and Parsers
 SimpleVariableLanguage = #juneau-marshall.SimpleVariableLanguage, Overview > juneau-marshall > Simple Variable Language
 SimplifiedJson = #juneau-marshall.JsonDetails.SimplifiedJson, Overview > juneau-marshall > JSON Details > Simplified JSON
@@ -328,13 +326,13 @@ Source.juneau-marshall = https://github.com/apache/juneau/blob/master/juneau-cor
 Source.juneau-marshall-rdf = https://github.com/apache/juneau/blob/master/juneau-core/juneau-dto, Source
 SpringBootChildResources = #juneau-rest-server-springboot.SpringBootChildResources, Overview > juneau-rest-server-springboot > Child Resources
 SpringBootOverview = #juneau-rest-server-springboot.SpringBootOverview, Overview > juneau-rest-server-springboot > Overview
-SurrogateClasses = #juneau-marshall.Transforms.SurrogateClasses, Overview > juneau-marshall > Transforms > Surrogate Classes
+SurrogateClasses = #juneau-marshall.Swaps.SurrogateClasses, Overview > juneau-marshall > Swaps > Surrogate Classes
 SvlOtherNotes = #juneau-marshall.SimpleVariableLanguage.SvlOtherNotes, Overview > juneau-marshall > Simple Variable Language > Other Notes
 SvlVariables = #juneau-marshall.SimpleVariableLanguage.SvlVariables, Overview > juneau-marshall > Simple Variable Language > SVL Variables
-SwapAnnotation = #juneau-marshall.Transforms.SwapAnnotation, Overview > juneau-marshall > Transforms > @Swap Annotation
+SwapAnnotation = #juneau-marshall.Swaps.SwapAnnotation, Overview > juneau-marshall > Swaps > @Swap Annotation
+Swaps = #juneau-marshall.Swaps, Overview > juneau-marshall > Swaps
 SystemDefaultConfig = #juneau-config.SystemDefaultConfig, Overview > juneau-config > System Default Config
-TemplatedSwaps = #juneau-marshall.Transforms.TemplatedSwaps, Overview > juneau-marshall > Transforms > Templated Swaps
-Transforms = #juneau-marshall.Transforms, Overview > juneau-marshall > Transforms
+TemplatedSwaps = #juneau-marshall.Swaps.TemplatedSwaps, Overview > juneau-marshall > Swaps > Templated Swaps
 UonDetails = #juneau-marshall.UonDetails, Overview > juneau-marshall > UON Details
 UonMethodology = #juneau-marshall.UonDetails.UonMethodology, Overview > juneau-marshall > UON Details > UON Methodology
 UonParsers = #juneau-marshall.UonDetails.UonParsers, Overview > juneau-marshall > UON Details > UON Parsers
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index 6b32ea1..615856e 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -44,18 +44,16 @@
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ContextAnnotations'>Context Annotations</a><span class='update'>created: 8.1.0, updated: 8.1.3,8.2.0,<b>9.0.0</b></span></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.OMap'>OMap and OList</a><span class='update'>updated: 8.2.0</span></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ComplexDataTypes'>Complex Data Types</a><span class='update'>created: <b>9.0.0</b></span></p>
-		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Groups'>SerializerGroups and ParserGroups</a><span class='update'>updated: <b>9.0.0</b></span></p>
-		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ContextsBuildersSessionsPropertyStores'>Contexts, Builders, Sessions, and ContextProperties</a><span class='update'>updated: <b>9.0.0</b>, <b><red>review</red></b></span></p>
-		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms'>Transforms</a><span class='update'><b><red>todo</red></b></span></p>
+		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.SerializerSetsParserSets'>SerializerSets and ParserSets</a><span class='update'>updated: <b>9.0.0</b></span></p>
+		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Swaps'>Swaps</a><span class='update'>updated: <b>9.0.0</b></span></p>
 		<ol>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.PojoSwaps'>Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.DefaultPojoSwaps'>Default PojoSwaps</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.AutoPojoSwaps'>Auto-detected POJO swaps</a><span class='update'>created: 8.1.0</span></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.PerMediaTypePojoSwaps'>Per-media-type Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.OneWayPojoSwaps'>One-way Swaps</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.SwapAnnotation'>@Swap Annotation</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.TemplatedSwaps'>Templated Swaps</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms.SurrogateClasses'>Surrogate Classes</a></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Swaps.DefaultPojoSwaps'>Default PojoSwaps</a></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Swaps.AutoPojoSwaps'>Auto-detected POJO swaps</a><span class='update'>created: 8.1.0</span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Swaps.PerMediaTypePojoSwaps'>Per-media-type Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Swaps.OneWayPojoSwaps'>One-way Swaps</a></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Swaps.SwapAnnotation'>@Swap Annotation</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Swaps.TemplatedSwaps'>Templated Swaps</a></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Swaps.SurrogateClasses'>Surrogate Classes</a></p>
 		</ol>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.DynamicallyAppliedAnnotations'>Dynamically Applied Annotations</a><span class='update'>created: 8.1.3</span></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a></p>
diff --git a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
index 33691fc..2f74cd5 100644
--- a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
+++ b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
@@ -26,7 +26,7 @@ import javax.xml.transform.stream.*;
 
 import org.apache.juneau.json.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swaps.*;
 import org.apache.juneau.xml.*;
 import org.junit.*;
 import org.w3c.dom.*;
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
index 8f787b1..990a988 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
@@ -24,7 +24,7 @@ import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
 import org.apache.juneau.rest.widget.*;
 import org.apache.juneau.serializer.annotation.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swaps.*;
 
 /**
  * Sample REST resource for echoing HttpServletRequests back to the browser.
diff --git a/juneau-microservice/juneau-microservice-ftest/pom.xml b/juneau-microservice/juneau-microservice-ftest/pom.xml
index 80ade29..d6094b7 100644
--- a/juneau-microservice/juneau-microservice-ftest/pom.xml
+++ b/juneau-microservice/juneau-microservice-ftest/pom.xml
@@ -84,15 +84,8 @@
 		</dependency>
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-core-utest</artifactId>
+			<artifactId>juneau-utest-utils</artifactId>
 			<version>${project.version}</version>
-			<type>test-jar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-mock-utest</artifactId>
-			<version>${project.version}</version>
-			<type>test-jar</type>
 		</dependency>
 	</dependencies>
 	
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyResource.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyResource.java
index febb3bb..a4f45ae 100644
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyResource.java
+++ b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyResource.java
@@ -221,12 +221,12 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		return "OK";
 	}
 
-	@RestGet(path="/swappedPojoHeaders")
-	public String swappedPojoHeaders(
-			@Header(n="a",cf="uon") SwappedPojo a,
-			@Header(n="b",cf="uon") SwappedPojo[][][] b,
-			@Header(n="c",cf="uon") Map<SwappedPojo,SwappedPojo> c,
-			@Header(n="d",cf="uon") Map<SwappedPojo,SwappedPojo[][][]> d
+	@RestGet(path="/swappedObjectHeaders")
+	public String swappedObjectHeaders(
+			@Header(n="a",cf="uon") SwappedObject a,
+			@Header(n="b",cf="uon") SwappedObject[][][] b,
+			@Header(n="c",cf="uon") Map<SwappedObject,SwappedObject> c,
+			@Header(n="d",cf="uon") Map<SwappedObject,SwappedObject[][][]> d
 		) throws Exception {
 
 		assertObject(a).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
@@ -234,22 +234,22 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		assertObject(c).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
 		assertObject(d).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
 
-		assertObject(a).isType(SwappedPojo.class);
-		assertObject(b[0][0][0]).isType(SwappedPojo.class);
-		assertObject(c.keySet().iterator().next()).isType(SwappedPojo.class);
-		assertObject(c.values().iterator().next()).isType(SwappedPojo.class);
-		assertObject(d.keySet().iterator().next()).isType(SwappedPojo.class);
-		assertObject(d.values().iterator().next()[0][0][0]).isType(SwappedPojo.class);
+		assertObject(a).isType(SwappedObject.class);
+		assertObject(b[0][0][0]).isType(SwappedObject.class);
+		assertObject(c.keySet().iterator().next()).isType(SwappedObject.class);
+		assertObject(c.values().iterator().next()).isType(SwappedObject.class);
+		assertObject(d.keySet().iterator().next()).isType(SwappedObject.class);
+		assertObject(d.values().iterator().next()[0][0][0]).isType(SwappedObject.class);
 
 		return "OK";
 	}
 
-	@RestGet(path="/implicitSwappedPojoHeaders")
-	public String implicitSwappedPojoHeaders(
-			@Header(n="a",cf="uon") ImplicitSwappedPojo a,
-			@Header(n="b",cf="uon") ImplicitSwappedPojo[][][] b,
-			@Header(n="c",cf="uon") Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-			@Header(n="d",cf="uon") Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+	@RestGet(path="/implicitSwappedObjectHeaders")
+	public String implicitSwappedObjectHeaders(
+			@Header(n="a",cf="uon") ImplicitSwappedObject a,
+			@Header(n="b",cf="uon") ImplicitSwappedObject[][][] b,
+			@Header(n="c",cf="uon") Map<ImplicitSwappedObject,ImplicitSwappedObject> c,
+			@Header(n="d",cf="uon") Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> d
 		) throws Exception {
 
 		assertObject(a).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
@@ -257,12 +257,12 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		assertObject(c).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
 		assertObject(d).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
 
-		assertObject(a).isType(ImplicitSwappedPojo.class);
-		assertObject(b[0][0][0]).isType(ImplicitSwappedPojo.class);
-		assertObject(c.keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(c.values().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(d.keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(d.values().iterator().next()[0][0][0]).isType(ImplicitSwappedPojo.class);
+		assertObject(a).isType(ImplicitSwappedObject.class);
+		assertObject(b[0][0][0]).isType(ImplicitSwappedObject.class);
+		assertObject(c.keySet().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(c.values().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(d.keySet().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(d.values().iterator().next()[0][0][0]).isType(ImplicitSwappedObject.class);
 
 		return "OK";
 	}
@@ -533,12 +533,12 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		return "OK";
 	}
 
-	@RestGet(path="/swappedPojoQueries")
-	public String swappedPojoQueries(
-			@Query(n="a",cf="uon") SwappedPojo a,
-			@Query(n="b",cf="uon") SwappedPojo[][][] b,
-			@Query(n="c",cf="uon") Map<SwappedPojo,SwappedPojo> c,
-			@Query(n="d",cf="uon") Map<SwappedPojo,SwappedPojo[][][]> d
+	@RestGet(path="/swappedObjectQueries")
+	public String swappedObjectQueries(
+			@Query(n="a",cf="uon") SwappedObject a,
+			@Query(n="b",cf="uon") SwappedObject[][][] b,
+			@Query(n="c",cf="uon") Map<SwappedObject,SwappedObject> c,
+			@Query(n="d",cf="uon") Map<SwappedObject,SwappedObject[][][]> d
 		) throws Exception {
 
 		assertObject(a).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
@@ -546,22 +546,22 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		assertObject(c).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
 		assertObject(d).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
 
-		assertObject(a).isType(SwappedPojo.class);
-		assertObject(b[0][0][0]).isType(SwappedPojo.class);
-		assertObject(c.keySet().iterator().next()).isType(SwappedPojo.class);
-		assertObject(c.values().iterator().next()).isType(SwappedPojo.class);
-		assertObject(d.keySet().iterator().next()).isType(SwappedPojo.class);
-		assertObject(d.values().iterator().next()[0][0][0]).isType(SwappedPojo.class);
+		assertObject(a).isType(SwappedObject.class);
+		assertObject(b[0][0][0]).isType(SwappedObject.class);
+		assertObject(c.keySet().iterator().next()).isType(SwappedObject.class);
+		assertObject(c.values().iterator().next()).isType(SwappedObject.class);
+		assertObject(d.keySet().iterator().next()).isType(SwappedObject.class);
+		assertObject(d.values().iterator().next()[0][0][0]).isType(SwappedObject.class);
 
 		return "OK";
 	}
 
-	@RestGet(path="/implicitSwappedPojoQueries")
-	public String implicitSwappedPojoQueries(
-			@Query(n="a",cf="uon") ImplicitSwappedPojo a,
-			@Query(n="b",cf="uon") ImplicitSwappedPojo[][][] b,
-			@Query(n="c",cf="uon") Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-			@Query(n="d",cf="uon") Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+	@RestGet(path="/implicitSwappedObjectQueries")
+	public String implicitSwappedObjectQueries(
+			@Query(n="a",cf="uon") ImplicitSwappedObject a,
+			@Query(n="b",cf="uon") ImplicitSwappedObject[][][] b,
+			@Query(n="c",cf="uon") Map<ImplicitSwappedObject,ImplicitSwappedObject> c,
+			@Query(n="d",cf="uon") Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> d
 		) throws Exception {
 
 		assertObject(a).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
@@ -569,12 +569,12 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		assertObject(c).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
 		assertObject(d).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
 
-		assertObject(a).isType(ImplicitSwappedPojo.class);
-		assertObject(b[0][0][0]).isType(ImplicitSwappedPojo.class);
-		assertObject(c.keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(c.values().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(d.keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(d.values().iterator().next()[0][0][0]).isType(ImplicitSwappedPojo.class);
+		assertObject(a).isType(ImplicitSwappedObject.class);
+		assertObject(b[0][0][0]).isType(ImplicitSwappedObject.class);
+		assertObject(c.keySet().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(c.values().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(d.keySet().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(d.values().iterator().next()[0][0][0]).isType(ImplicitSwappedObject.class);
 
 		return "OK";
 	}
@@ -867,12 +867,12 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		return "OK";
 	}
 
-	@RestPost(path="/swappedPojoFormData")
-	public String swappedPojoFormData(
-			@FormData(n="a",cf="uon") SwappedPojo a,
-			@FormData(n="b",cf="uon") SwappedPojo[][][] b,
-			@FormData(n="c",cf="uon") Map<SwappedPojo,SwappedPojo> c,
-			@FormData(n="d",cf="uon") Map<SwappedPojo,SwappedPojo[][][]> d
+	@RestPost(path="/swappedObjectFormData")
+	public String swappedObjectFormData(
+			@FormData(n="a",cf="uon") SwappedObject a,
+			@FormData(n="b",cf="uon") SwappedObject[][][] b,
+			@FormData(n="c",cf="uon") Map<SwappedObject,SwappedObject> c,
+			@FormData(n="d",cf="uon") Map<SwappedObject,SwappedObject[][][]> d
 		) throws Exception {
 
 		assertObject(a).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
@@ -880,22 +880,22 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		assertObject(c).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
 		assertObject(d).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
 
-		assertObject(a).isType(SwappedPojo.class);
-		assertObject(b[0][0][0]).isType(SwappedPojo.class);
-		assertObject(c.keySet().iterator().next()).isType(SwappedPojo.class);
-		assertObject(c.values().iterator().next()).isType(SwappedPojo.class);
-		assertObject(d.keySet().iterator().next()).isType(SwappedPojo.class);
-		assertObject(d.values().iterator().next()[0][0][0]).isType(SwappedPojo.class);
+		assertObject(a).isType(SwappedObject.class);
+		assertObject(b[0][0][0]).isType(SwappedObject.class);
+		assertObject(c.keySet().iterator().next()).isType(SwappedObject.class);
+		assertObject(c.values().iterator().next()).isType(SwappedObject.class);
+		assertObject(d.keySet().iterator().next()).isType(SwappedObject.class);
+		assertObject(d.values().iterator().next()[0][0][0]).isType(SwappedObject.class);
 
 		return "OK";
 	}
 
-	@RestPost(path="/implicitSwappedPojoFormData")
-	public String implicitSwappedPojoFormData(
-			@FormData(n="a",cf="uon") ImplicitSwappedPojo a,
-			@FormData(n="b",cf="uon") ImplicitSwappedPojo[][][] b,
-			@FormData(n="c",cf="uon") Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-			@FormData(n="d",cf="uon") Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+	@RestPost(path="/implicitSwappedObjectFormData")
+	public String implicitSwappedObjectFormData(
+			@FormData(n="a",cf="uon") ImplicitSwappedObject a,
+			@FormData(n="b",cf="uon") ImplicitSwappedObject[][][] b,
+			@FormData(n="c",cf="uon") Map<ImplicitSwappedObject,ImplicitSwappedObject> c,
+			@FormData(n="d",cf="uon") Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> d
 		) throws Exception {
 
 		assertObject(a).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
@@ -903,12 +903,12 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 		assertObject(c).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
 		assertObject(d).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
 
-		assertObject(a).isType(ImplicitSwappedPojo.class);
-		assertObject(b[0][0][0]).isType(ImplicitSwappedPojo.class);
-		assertObject(c.keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(c.values().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(d.keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(d.values().iterator().next()[0][0][0]).isType(ImplicitSwappedPojo.class);
+		assertObject(a).isType(ImplicitSwappedObject.class);
+		assertObject(b[0][0][0]).isType(ImplicitSwappedObject.class);
+		assertObject(c.keySet().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(c.values().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(d.keySet().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(d.values().iterator().next()[0][0][0]).isType(ImplicitSwappedObject.class);
 
 		return "OK";
 	}
@@ -1359,46 +1359,46 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 
 	// Swapped POJOs
 
-	@RestGet(path="/returnSwappedPojo")
-	public SwappedPojo returnSwappedPojo() {
-		return new SwappedPojo();
+	@RestGet(path="/returnSwappedObject")
+	public SwappedObject returnSwappedObject() {
+		return new SwappedObject();
 	}
 
-	@RestGet(path="/returnSwappedPojo3dArray")
-	public SwappedPojo[][][] returnSwappedPojo3dArray() {
-		return new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null};
+	@RestGet(path="/returnSwappedObject3dArray")
+	public SwappedObject[][][] returnSwappedObject3dArray() {
+		return new SwappedObject[][][]{{{new SwappedObject(),null},null},null};
 	}
 
-	@RestGet(path="/returnSwappedPojoMap")
-	public Map<SwappedPojo,SwappedPojo> returnSwappedPojoMap() {
-		return AMap.of(new SwappedPojo(),new SwappedPojo());
+	@RestGet(path="/returnSwappedObjectMap")
+	public Map<SwappedObject,SwappedObject> returnSwappedObjectMap() {
+		return AMap.of(new SwappedObject(),new SwappedObject());
 	}
 
-	@RestGet(path="/returnSwappedPojo3dMap")
-	public Map<SwappedPojo,SwappedPojo[][][]> returnSwappedPojo3dMap() {
-		return AMap.of(new SwappedPojo(),new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null});
+	@RestGet(path="/returnSwappedObject3dMap")
+	public Map<SwappedObject,SwappedObject[][][]> returnSwappedObject3dMap() {
+		return AMap.of(new SwappedObject(),new SwappedObject[][][]{{{new SwappedObject(),null},null},null});
 	}
 
 	// Implicit swapped POJOs
 
-	@RestGet(path="/returnImplicitSwappedPojo")
-	public ImplicitSwappedPojo returnImplicitSwappedPojo() {
-		return new ImplicitSwappedPojo();
+	@RestGet(path="/returnImplicitSwappedObject")
+	public ImplicitSwappedObject returnImplicitSwappedObject() {
+		return new ImplicitSwappedObject();
 	}
 
-	@RestGet(path="/returnImplicitSwappedPojo3dArray")
-	public ImplicitSwappedPojo[][][] returnImplicitSwappedPojo3dArray() {
-		return new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null};
+	@RestGet(path="/returnImplicitSwappedObject3dArray")
+	public ImplicitSwappedObject[][][] returnImplicitSwappedObject3dArray() {
+		return new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null};
 	}
 
-	@RestGet(path="/returnImplicitSwappedPojoMap")
-	public Map<ImplicitSwappedPojo,ImplicitSwappedPojo> returnImplicitSwappedPojoMap() {
-		return AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo());
+	@RestGet(path="/returnImplicitSwappedObjectMap")
+	public Map<ImplicitSwappedObject,ImplicitSwappedObject> returnImplicitSwappedObjectMap() {
+		return AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject());
 	}
 
-	@RestGet(path="/returnImplicitSwappedPojo3dMap")
-	public Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> returnImplicitSwappedPojo3dMap() {
-		return AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null});
+	@RestGet(path="/returnImplicitSwappedObject3dMap")
+	public Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> returnImplicitSwappedObject3dMap() {
+		return AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null});
 	}
 
 	// Enums
@@ -1624,58 +1624,58 @@ public class ThirdPartyProxyResource extends BasicRestServletJena {
 
 	// Swapped POJOs
 
-	@RestPost(path="/setSwappedPojo")
-	public void setSwappedPojo(@Body SwappedPojo x) {
+	@RestPost(path="/setSwappedObject")
+	public void setSwappedObject(@Body SwappedObject x) {
 		assertTrue(x.wasUnswapped);
 	}
 
-	@RestPost(path="/setSwappedPojo3dArray")
-	public void setSwappedPojo3dArray(@Body SwappedPojo[][][] x) {
+	@RestPost(path="/setSwappedObject3dArray")
+	public void setSwappedObject3dArray(@Body SwappedObject[][][] x) {
 		assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 		assertTrue(x[0][0][0].wasUnswapped);
 	}
 
-	@RestPost(path="/setSwappedPojoMap")
-	public void setSwappedPojoMap(@Body Map<SwappedPojo,SwappedPojo> x) {
+	@RestPost(path="/setSwappedObjectMap")
+	public void setSwappedObjectMap(@Body Map<SwappedObject,SwappedObject> x) {
 		assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
-		Map.Entry<SwappedPojo,SwappedPojo> e = x.entrySet().iterator().next();
+		Map.Entry<SwappedObject,SwappedObject> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue().wasUnswapped);
 	}
 
-	@RestPost(path="/setSwappedPojo3dMap")
-	public void setSwappedPojo3dMap(@Body Map<SwappedPojo,SwappedPojo[][][]> x) {
+	@RestPost(path="/setSwappedObject3dMap")
+	public void setSwappedObject3dMap(@Body Map<SwappedObject,SwappedObject[][][]> x) {
 		assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
-		Map.Entry<SwappedPojo,SwappedPojo[][][]> e = x.entrySet().iterator().next();
+		Map.Entry<SwappedObject,SwappedObject[][][]> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue()[0][0][0].wasUnswapped);
 	}
 
 	// Implicit swapped POJOs
 
-	@RestPost(path="/setImplicitSwappedPojo")
-	public void setImplicitSwappedPojo(@Body ImplicitSwappedPojo x) {
+	@RestPost(path="/setImplicitSwappedObject")
+	public void setImplicitSwappedObject(@Body ImplicitSwappedObject x) {
 		assertTrue(x.wasUnswapped);
 	}
 
-	@RestPost(path="/setImplicitSwappedPojo3dArray")
-	public void setImplicitSwappedPojo3dArray(@Body ImplicitSwappedPojo[][][] x) {
+	@RestPost(path="/setImplicitSwappedObject3dArray")
+	public void setImplicitSwappedObject3dArray(@Body ImplicitSwappedObject[][][] x) {
 		assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 		assertTrue(x[0][0][0].wasUnswapped);
 	}
 
-	@RestPost(path="/setImplicitSwappedPojoMap")
-	public void setImplicitSwappedPojoMap(@Body Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x) {
+	@RestPost(path="/setImplicitSwappedObjectMap")
+	public void setImplicitSwappedObjectMap(@Body Map<ImplicitSwappedObject,ImplicitSwappedObject> x) {
 		assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
-		Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo> e = x.entrySet().iterator().next();
+		Map.Entry<ImplicitSwappedObject,ImplicitSwappedObject> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue().wasUnswapped);
 	}
 
-	@RestPost(path="/setImplicitSwappedPojo3dMap")
-	public void setImplicitSwappedPojo3dMap(@Body Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> x) {
+	@RestPost(path="/setImplicitSwappedObject3dMap")
+	public void setImplicitSwappedObject3dMap(@Body Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> x) {
 		assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
-		Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> e = x.entrySet().iterator().next();
+		Map.Entry<ImplicitSwappedObject,ImplicitSwappedObject[][][]> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue()[0][0][0].wasUnswapped);
 	}
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyTest.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyTest.java
index edc27b0..953a216 100644
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyTest.java
+++ b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyTest.java
@@ -181,23 +181,23 @@ public class ThirdPartyProxyTest extends RestTestcase {
 	}
 
 	@Test
-	public void a05_swappedPojoHeaders() throws Exception {
-		String r = proxy.swappedPojoHeaders(
-			new SwappedPojo(),
-			new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null},
-			AMap.of(new SwappedPojo(),new SwappedPojo()),
-			AMap.of(new SwappedPojo(),new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null})
+	public void a05_swappedObjectHeaders() throws Exception {
+		String r = proxy.swappedObjectHeaders(
+			new SwappedObject(),
+			new SwappedObject[][][]{{{new SwappedObject(),null},null},null},
+			AMap.of(new SwappedObject(),new SwappedObject()),
+			AMap.of(new SwappedObject(),new SwappedObject[][][]{{{new SwappedObject(),null},null},null})
 		);
 		assertEquals("OK", r);
 	}
 
 	@Test
-	public void a06_implicitSwappedPojoHeaders() throws Exception {
-		String r = proxy.implicitSwappedPojoHeaders(
-			new ImplicitSwappedPojo(),
-			new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null},
-			AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo()),
-			AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null})
+	public void a06_implicitSwappedObjectHeaders() throws Exception {
+		String r = proxy.implicitSwappedObjectHeaders(
+			new ImplicitSwappedObject(),
+			new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null},
+			AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject()),
+			AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null})
 		);
 		assertEquals("OK", r);
 	}
@@ -310,23 +310,23 @@ public class ThirdPartyProxyTest extends RestTestcase {
 	}
 
 	@Test
-	public void b05_swappedPojoQueries() throws Exception {
-		String r = proxy.swappedPojoQueries(
-			new SwappedPojo(),
-			new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null},
-			AMap.of(new SwappedPojo(),new SwappedPojo()),
-			AMap.of(new SwappedPojo(),new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null})
+	public void b05_swappedObjectQueries() throws Exception {
+		String r = proxy.swappedObjectQueries(
+			new SwappedObject(),
+			new SwappedObject[][][]{{{new SwappedObject(),null},null},null},
+			AMap.of(new SwappedObject(),new SwappedObject()),
+			AMap.of(new SwappedObject(),new SwappedObject[][][]{{{new SwappedObject(),null},null},null})
 		);
 		assertEquals("OK", r);
 	}
 
 	@Test
-	public void b06_implicitSwappedPojoQueries() throws Exception {
-		String r = proxy.implicitSwappedPojoQueries(
-			new ImplicitSwappedPojo(),
-			new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null},
-			AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo()),
-			AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null})
+	public void b06_implicitSwappedObjectQueries() throws Exception {
+		String r = proxy.implicitSwappedObjectQueries(
+			new ImplicitSwappedObject(),
+			new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null},
+			AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject()),
+			AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null})
 		);
 		assertEquals("OK", r);
 	}
@@ -451,23 +451,23 @@ public class ThirdPartyProxyTest extends RestTestcase {
 	}
 
 	@Test
-	public void c05_swappedPojoFormData() throws Exception {
-		String r = proxy.swappedPojoFormData(
-			new SwappedPojo(),
-			new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null},
-			AMap.of(new SwappedPojo(),new SwappedPojo()),
-			AMap.of(new SwappedPojo(),new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null})
+	public void c05_swappedObjectFormData() throws Exception {
+		String r = proxy.swappedObjectFormData(
+			new SwappedObject(),
+			new SwappedObject[][][]{{{new SwappedObject(),null},null},null},
+			AMap.of(new SwappedObject(),new SwappedObject()),
+			AMap.of(new SwappedObject(),new SwappedObject[][][]{{{new SwappedObject(),null},null},null})
 		);
 		assertEquals("OK", r);
 	}
 
 	@Test
-	public void c06_implicitSwappedPojoFormData() throws Exception {
-		String r = proxy.implicitSwappedPojoFormData(
-			new ImplicitSwappedPojo(),
-			new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null},
-			AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo()),
-			AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null})
+	public void c06_implicitSwappedObjectFormData() throws Exception {
+		String r = proxy.implicitSwappedObjectFormData(
+			new ImplicitSwappedObject(),
+			new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null},
+			AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject()),
+			AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null})
 		);
 		assertEquals("OK", r);
 	}
@@ -726,33 +726,33 @@ public class ThirdPartyProxyTest extends RestTestcase {
 	// Swapped POJOs
 
 	@Test
-	public void dd01_returnSwappedPojo() {
-		SwappedPojo x = proxy.returnSwappedPojo();
+	public void dd01_returnSwappedObject() {
+		SwappedObject x = proxy.returnSwappedObject();
 		assertObject(x).asJson().is("'"+SWAP+"'");
 		assertTrue(x.wasUnswapped);
 	}
 
 	@Test
-	public void dd02_returnSwappedPojo3dArray() {
-		SwappedPojo[][][] x = proxy.returnSwappedPojo3dArray();
+	public void dd02_returnSwappedObject3dArray() {
+		SwappedObject[][][] x = proxy.returnSwappedObject3dArray();
 		assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 		assertTrue(x[0][0][0].wasUnswapped);
 	}
 
 	@Test
-	public void dd03_returnSwappedPojoMap() {
-		Map<SwappedPojo,SwappedPojo> x = proxy.returnSwappedPojoMap();
+	public void dd03_returnSwappedObjectMap() {
+		Map<SwappedObject,SwappedObject> x = proxy.returnSwappedObjectMap();
 		assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
-		Map.Entry<SwappedPojo,SwappedPojo> e = x.entrySet().iterator().next();
+		Map.Entry<SwappedObject,SwappedObject> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue().wasUnswapped);
 	}
 
 	@Test
-	public void dd04_returnSwappedPojo3dMap() {
-		Map<SwappedPojo,SwappedPojo[][][]> x = proxy.returnSwappedPojo3dMap();
+	public void dd04_returnSwappedObject3dMap() {
+		Map<SwappedObject,SwappedObject[][][]> x = proxy.returnSwappedObject3dMap();
 		assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
-		Map.Entry<SwappedPojo,SwappedPojo[][][]> e = x.entrySet().iterator().next();
+		Map.Entry<SwappedObject,SwappedObject[][][]> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue()[0][0][0].wasUnswapped);
 	}
@@ -760,33 +760,33 @@ public class ThirdPartyProxyTest extends RestTestcase {
 	// Implicit swapped POJOs
 
 	@Test
-	public void de01_returnImplicitSwappedPojo() {
-		ImplicitSwappedPojo x = proxy.returnImplicitSwappedPojo();
+	public void de01_returnImplicitSwappedObject() {
+		ImplicitSwappedObject x = proxy.returnImplicitSwappedObject();
 		assertObject(x).asJson().is("'"+SWAP+"'");
 		assertTrue(x.wasUnswapped);
 	}
 
 	@Test
-	public void de02_returnImplicitSwappedPojo3dArray() {
-		ImplicitSwappedPojo[][][] x = proxy.returnImplicitSwappedPojo3dArray();
+	public void de02_returnImplicitSwappedObject3dArray() {
+		ImplicitSwappedObject[][][] x = proxy.returnImplicitSwappedObject3dArray();
 		assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 		assertTrue(x[0][0][0].wasUnswapped);
 	}
 
 	@Test
-	public void de03_returnImplicitSwappedPojoMap() {
-		Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x = proxy.returnImplicitSwappedPojoMap();
+	public void de03_returnImplicitSwappedObjectMap() {
+		Map<ImplicitSwappedObject,ImplicitSwappedObject> x = proxy.returnImplicitSwappedObjectMap();
 		assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
-		Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo> e = x.entrySet().iterator().next();
+		Map.Entry<ImplicitSwappedObject,ImplicitSwappedObject> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue().wasUnswapped);
 	}
 
 	@Test
-	public void de04_returnImplicitSwappedPojo3dMap() {
-		Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> x = proxy.returnImplicitSwappedPojo3dMap();
+	public void de04_returnImplicitSwappedObject3dMap() {
+		Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> x = proxy.returnImplicitSwappedObject3dMap();
 		assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
-		Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> e = x.entrySet().iterator().next();
+		Map.Entry<ImplicitSwappedObject,ImplicitSwappedObject[][][]> e = x.entrySet().iterator().next();
 		assertTrue(e.getKey().wasUnswapped);
 		assertTrue(e.getValue()[0][0][0].wasUnswapped);
 	}
@@ -1029,44 +1029,44 @@ public class ThirdPartyProxyTest extends RestTestcase {
 	// Swapped POJOs
 
 	@Test
-	public void ed01_setSwappedPojo() {
-		proxy.setSwappedPojo(new SwappedPojo());
+	public void ed01_setSwappedObject() {
+		proxy.setSwappedObject(new SwappedObject());
 	}
 
 	@Test
-	public void ed02_setSwappedPojo3dArray() {
-		proxy.setSwappedPojo3dArray(new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null});
+	public void ed02_setSwappedObject3dArray() {
+		proxy.setSwappedObject3dArray(new SwappedObject[][][]{{{new SwappedObject(),null},null},null});
 	}
 
 	@Test
-	public void ed03_setSwappedPojoMap() {
-		proxy.setSwappedPojoMap(AMap.of(new SwappedPojo(),new SwappedPojo()));
+	public void ed03_setSwappedObjectMap() {
+		proxy.setSwappedObjectMap(AMap.of(new SwappedObject(),new SwappedObject()));
 	}
 
 	@Test
-	public void ed04_setSwappedPojo3dMap() {
-		proxy.setSwappedPojo3dMap(AMap.of(new SwappedPojo(),new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null}));
+	public void ed04_setSwappedObject3dMap() {
+		proxy.setSwappedObject3dMap(AMap.of(new SwappedObject(),new SwappedObject[][][]{{{new SwappedObject(),null},null},null}));
 	}
 
 	// Implicit swapped POJOs
 	@Test
-	public void ee01_setImplicitSwappedPojo() {
-		proxy.setImplicitSwappedPojo(new ImplicitSwappedPojo());
+	public void ee01_setImplicitSwappedObject() {
+		proxy.setImplicitSwappedObject(new ImplicitSwappedObject());
 	}
 
 	@Test
-	public void ee02_setImplicitSwappedPojo3dArray() {
-		proxy.setImplicitSwappedPojo3dArray(new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null});
+	public void ee02_setImplicitSwappedObject3dArray() {
+		proxy.setImplicitSwappedObject3dArray(new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null});
 	}
 
 	@Test
-	public void ee03_setImplicitSwappedPojoMap() {
-		proxy.setImplicitSwappedPojoMap(AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo()));
+	public void ee03_setImplicitSwappedObjectMap() {
+		proxy.setImplicitSwappedObjectMap(AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject()));
 	}
 
 	@Test
-	public void ee04_setImplicitSwappedPojo3dMap() {
-		proxy.setImplicitSwappedPojo3dMap(AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null}));
+	public void ee04_setImplicitSwappedObject3dMap() {
+		proxy.setImplicitSwappedObject3dMap(AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null}));
 	}
 
 	// Enums
@@ -1581,20 +1581,20 @@ public class ThirdPartyProxyTest extends RestTestcase {
 			@Header("h") Map<Integer,List<TypedBean>> h
 		);
 
-		@RemoteOp(method="GET", path="/swappedPojoHeaders")
-		String swappedPojoHeaders(
-			@Header("a") SwappedPojo a,
-			@Header("b") SwappedPojo[][][] b,
-			@Header("c") Map<SwappedPojo,SwappedPojo> c,
-			@Header("d") Map<SwappedPojo,SwappedPojo[][][]> d
+		@RemoteOp(method="GET", path="/swappedObjectHeaders")
+		String swappedObjectHeaders(
+			@Header("a") SwappedObject a,
+			@Header("b") SwappedObject[][][] b,
+			@Header("c") Map<SwappedObject,SwappedObject> c,
+			@Header("d") Map<SwappedObject,SwappedObject[][][]> d
 		);
 
-		@RemoteOp(method="GET", path="/implicitSwappedPojoHeaders")
-		String implicitSwappedPojoHeaders(
-			@Header("a") ImplicitSwappedPojo a,
-			@Header("b") ImplicitSwappedPojo[][][] b,
-			@Header("c") Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-			@Header("d") Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+		@RemoteOp(method="GET", path="/implicitSwappedObjectHeaders")
+		String implicitSwappedObjectHeaders(
+			@Header("a") ImplicitSwappedObject a,
+			@Header("b") ImplicitSwappedObject[][][] b,
+			@Header("c") Map<ImplicitSwappedObject,ImplicitSwappedObject> c,
+			@Header("d") Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> d
 		);
 
 		@RemoteOp(method="GET", path="/enumHeaders")
@@ -1679,20 +1679,20 @@ public class ThirdPartyProxyTest extends RestTestcase {
 			@Query("h") Map<Integer,List<TypedBean>> h
 		);
 
-		@RemoteOp(method="GET", path="/swappedPojoQueries")
-		String swappedPojoQueries(
-			@Query("a") SwappedPojo a,
-			@Query("b") SwappedPojo[][][] b,
-			@Query("c") Map<SwappedPojo,SwappedPojo> c,
-			@Query("d") Map<SwappedPojo,SwappedPojo[][][]> d
+		@RemoteOp(method="GET", path="/swappedObjectQueries")
+		String swappedObjectQueries(
+			@Query("a") SwappedObject a,
+			@Query("b") SwappedObject[][][] b,
+			@Query("c") Map<SwappedObject,SwappedObject> c,
+			@Query("d") Map<SwappedObject,SwappedObject[][][]> d
 		);
 
-		@RemoteOp(method="GET", path="/implicitSwappedPojoQueries")
-		String implicitSwappedPojoQueries(
-			@Query("a") ImplicitSwappedPojo a,
-			@Query("b") ImplicitSwappedPojo[][][] b,
-			@Query("c") Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-			@Query("d") Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+		@RemoteOp(method="GET", path="/implicitSwappedObjectQueries")
+		String implicitSwappedObjectQueries(
+			@Query("a") ImplicitSwappedObject a,
+			@Query("b") ImplicitSwappedObject[][][] b,
+			@Query("c") Map<ImplicitSwappedObject,ImplicitSwappedObject> c,
+			@Query("d") Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> d
 		);
 
 		@RemoteOp(method="GET", path="/enumQueries")
@@ -1787,20 +1787,20 @@ public class ThirdPartyProxyTest extends RestTestcase {
 			@FormData("h") Map<Integer,List<TypedBean>> h
 		);
 
-		@RemoteOp(method="POST", path="/swappedPojoFormData")
-		String swappedPojoFormData(
-			@FormData("a") SwappedPojo a,
-			@FormData("b") SwappedPojo[][][] b,
-			@FormData("c") Map<SwappedPojo,SwappedPojo> c,
-			@FormData("d") Map<SwappedPojo,SwappedPojo[][][]> d
+		@RemoteOp(method="POST", path="/swappedObjectFormData")
+		String swappedObjectFormData(
+			@FormData("a") SwappedObject a,
+			@FormData("b") SwappedObject[][][] b,
+			@FormData("c") Map<SwappedObject,SwappedObject> c,
+			@FormData("d") Map<SwappedObject,SwappedObject[][][]> d
 		);
 
-		@RemoteOp(method="POST", path="/implicitSwappedPojoFormData")
-		String implicitSwappedPojoFormData(
-			@FormData("a") ImplicitSwappedPojo a,
-			@FormData("b") ImplicitSwappedPojo[][][] b,
-			@FormData("c") Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-			@FormData("d") Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+		@RemoteOp(method="POST", path="/implicitSwappedObjectFormData")
+		String implicitSwappedObjectFormData(
+			@FormData("a") ImplicitSwappedObject a,
+			@FormData("b") ImplicitSwappedObject[][][] b,
+			@FormData("c") Map<ImplicitSwappedObject,ImplicitSwappedObject> c,
+			@FormData("d") Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> d
 		);
 
 		@RemoteOp(method="POST", path="/enumFormData")
@@ -2287,31 +2287,31 @@ public class ThirdPartyProxyTest extends RestTestcase {
 
 		// Swapped POJOs
 
-		@RemoteOp(method="GET", path="/returnSwappedPojo")
-		SwappedPojo returnSwappedPojo();
+		@RemoteOp(method="GET", path="/returnSwappedObject")
+		SwappedObject returnSwappedObject();
 
-		@RemoteOp(method="GET", path="/returnSwappedPojo3dArray")
-		SwappedPojo[][][] returnSwappedPojo3dArray();
+		@RemoteOp(method="GET", path="/returnSwappedObject3dArray")
+		SwappedObject[][][] returnSwappedObject3dArray();
 
-		@RemoteOp(method="GET", path="/returnSwappedPojoMap")
-		Map<SwappedPojo,SwappedPojo> returnSwappedPojoMap();
+		@RemoteOp(method="GET", path="/returnSwappedObjectMap")
+		Map<SwappedObject,SwappedObject> returnSwappedObjectMap();
 
-		@RemoteOp(method="GET", path="/returnSwappedPojo3dMap")
-		Map<SwappedPojo,SwappedPojo[][][]> returnSwappedPojo3dMap();
+		@RemoteOp(method="GET", path="/returnSwappedObject3dMap")
+		Map<SwappedObject,SwappedObject[][][]> returnSwappedObject3dMap();
 
 		// Implicit swapped POJOs
 
-		@RemoteOp(method="GET", path="/returnImplicitSwappedPojo")
-		ImplicitSwappedPojo returnImplicitSwappedPojo();
+		@RemoteOp(method="GET", path="/returnImplicitSwappedObject")
+		ImplicitSwappedObject returnImplicitSwappedObject();
 
-		@RemoteOp(method="GET", path="/returnImplicitSwappedPojo3dArray")
-		ImplicitSwappedPojo[][][] returnImplicitSwappedPojo3dArray();
+		@RemoteOp(method="GET", path="/returnImplicitSwappedObject3dArray")
+		ImplicitSwappedObject[][][] returnImplicitSwappedObject3dArray();
 
-		@RemoteOp(method="GET", path="/returnImplicitSwappedPojoMap")
-		Map<ImplicitSwappedPojo,ImplicitSwappedPojo> returnImplicitSwappedPojoMap();
+		@RemoteOp(method="GET", path="/returnImplicitSwappedObjectMap")
+		Map<ImplicitSwappedObject,ImplicitSwappedObject> returnImplicitSwappedObjectMap();
 
-		@RemoteOp(method="GET", path="/returnImplicitSwappedPojo3dMap")
-		Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> returnImplicitSwappedPojo3dMap();
+		@RemoteOp(method="GET", path="/returnImplicitSwappedObject3dMap")
+		Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> returnImplicitSwappedObject3dMap();
 
 		// Enums
 
@@ -2444,31 +2444,31 @@ public class ThirdPartyProxyTest extends RestTestcase {
 
 		// Swapped POJOs
 
-		@RemoteOp(method="POST", path="/setSwappedPojo")
-		void setSwappedPojo(@Body SwappedPojo x);
+		@RemoteOp(method="POST", path="/setSwappedObject")
+		void setSwappedObject(@Body SwappedObject x);
 
-		@RemoteOp(method="POST", path="/setSwappedPojo3dArray")
-		void setSwappedPojo3dArray(@Body SwappedPojo[][][] x);
+		@RemoteOp(method="POST", path="/setSwappedObject3dArray")
+		void setSwappedObject3dArray(@Body SwappedObject[][][] x);
 
-		@RemoteOp(method="POST", path="/setSwappedPojoMap")
-		void setSwappedPojoMap(@Body Map<SwappedPojo,SwappedPojo> x);
+		@RemoteOp(method="POST", path="/setSwappedObjectMap")
+		void setSwappedObjectMap(@Body Map<SwappedObject,SwappedObject> x);
 
-		@RemoteOp(method="POST", path="/setSwappedPojo3dMap")
-		void setSwappedPojo3dMap(@Body Map<SwappedPojo,SwappedPojo[][][]> x);
+		@RemoteOp(method="POST", path="/setSwappedObject3dMap")
+		void setSwappedObject3dMap(@Body Map<SwappedObject,SwappedObject[][][]> x);
 
 		// Implicit swapped POJOs
 
-		@RemoteOp(method="POST", path="/setImplicitSwappedPojo")
-		void setImplicitSwappedPojo(@Body ImplicitSwappedPojo x);
+		@RemoteOp(method="POST", path="/setImplicitSwappedObject")
+		void setImplicitSwappedObject(@Body ImplicitSwappedObject x);
 
-		@RemoteOp(method="POST", path="/setImplicitSwappedPojo3dArray")
-		void setImplicitSwappedPojo3dArray(@Body ImplicitSwappedPojo[][][] x);
+		@RemoteOp(method="POST", path="/setImplicitSwappedObject3dArray")
+		void setImplicitSwappedObject3dArray(@Body ImplicitSwappedObject[][][] x);
 
-		@RemoteOp(method="POST", path="/setImplicitSwappedPojoMap")
-		void setImplicitSwappedPojoMap(@Body Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x);
+		@RemoteOp(method="POST", path="/setImplicitSwappedObjectMap")
+		void setImplicitSwappedObjectMap(@Body Map<ImplicitSwappedObject,ImplicitSwappedObject> x);
 
-		@RemoteOp(method="POST", path="/setImplicitSwappedPojo3dMap")
-		void setImplicitSwappedPojo3dMap(@Body Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> x);
+		@RemoteOp(method="POST", path="/setImplicitSwappedObject3dMap")
+		void setImplicitSwappedObject3dMap(@Body Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> x);
 
 		// Enums
 
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 3277a2e..4c45366 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -5777,7 +5777,7 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index 4df22eb..4d9ee8d 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -663,7 +663,7 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 		}
 
 		@Override /* GENERATED - org.apache.juneau.BeanContextable.Builder */
-		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.transform.BeanInterceptor<?>> value) {
+		public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
 			super.beanInterceptor(on, value);
 			return this;
 		}
diff --git a/juneau-rest/juneau-rest-server-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java b/juneau-rest/juneau-rest-server-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java
index 8352f74..8cc18c4 100644
--- a/juneau-rest/juneau-rest-server-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java
+++ b/juneau-rest/juneau-rest-server-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java
@@ -19,7 +19,7 @@ import java.lang.annotation.*;
 
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
 /**
  * Annotations applicable to subclasses of {@link BaseProvider}.
@@ -45,7 +45,7 @@ public @interface JuneauProvider {
 	 * These POJO swaps are applied to all serializers and parsers being used by the provider.
 	 *
 	 * <p>
-	 * If the specified class is an instance of {@link PojoSwap}, then that swap is added.
+	 * If the specified class is an instance of {@link ObjectSwap}, then that swap is added.
 	 * Any other classes are wrapped in a {@link SurrogateSwap}.
 	 */
 	Class<?>[] swaps() default {};
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextStats.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextStats.java
index a1148f9..68e3de5 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextStats.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextStats.java
@@ -17,7 +17,7 @@ import java.util.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.mstat.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swaps.*;
 
 /**
  * A snapshot of execution statistics for REST resource classes.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index bacc85c..1c29ea1 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -1728,7 +1728,8 @@ public class RestOpContext extends Context implements Comparable<RestOpContext>
 		 * 	<jk>public</jk> NewPojo newMethod()  {...}
 		 *
 		 * 	<jc>// Call this method if Client-Version is at least 1.1, but less than 2.0.</jc>
-		 * 	<ja>@RestGet</ja>(path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>, transforms={NewToOldPojoSwap.<jk>class</jk>})
+		 * 	<ja>@RestGet</ja>(path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>)
+		 * 	<ja>@BeanConfig(swaps=NewToOldSwap.<jk>class</jk>)
 		 * 	<jk>public</jk> NewPojo oldMethod() {
 		 * 		<jk>return</jk> newMethod();
 		 * 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
index 90daca5..ba867b4 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
@@ -83,7 +83,8 @@ public @interface RestGet {
 	 * 	<jk>public</jk> NewPojo newMethod()  {...}
 	 *
 	 * 	<jc>// Call this method if Client-Version is at least 1.1, but less than 2.0.</jc>
-	 * 	<ja>@RestGet</ja>(path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>, transforms={NewToOldPojoSwap.<jk>class</jk>})
+	 * 	<ja>@RestGet</ja>(path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>)
+	 * 	<ja>@BeanConfig(swaps=NewToOldSwap.<jk>class</jk>)
 	 * 	<jk>public</jk> NewPojo oldMethod() {
 	 * 		<jk>return</jk> newMethod();
 	 * 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
index 00eb21f..724e38d 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
@@ -82,7 +82,8 @@ public @interface RestOp {
 	 * 	<jk>public</jk> NewPojo newMethod()  {...}
 	 *
 	 * 	<jc>// Call this method if X-Client-Version is at least 1.1, but less than 2.0.</jc>
-	 * 	<ja>@RestOp</ja>(method=<jsf>GET</jsf>, path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>, transforms={NewToOldPojoSwap.<jk>class</jk>})
+	 * 	<ja>@RestOp</ja>(method=<jsf>GET</jsf>, path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>)
+	 * 	<ja>@BeanConfig(swaps=NewToOldSwap.<jk>class</jk>)
 	 * 	<jk>public</jk> NewPojo oldMethod() {
 	 * 		<jk>return</jk> newMethod();
 	 * 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
index e9eab03..36bfe77 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
@@ -84,7 +84,8 @@ public @interface RestPost {
 	 * 	<jk>public</jk> NewPojo newMethod()  {...}
 	 *
 	 * 	<jc>// Call this method if X-Client-Version is at least 1.1, but less than 2.0.</jc>
-	 * 	<ja>@RestPost</ja>(path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>, transforms={NewToOldPojoSwap.<jk>class</jk>})
+	 * 	<ja>@RestPost</ja>(path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>)
+	 * 	<ja>@BeanConfig</ja>(swaps=NewToOldSwap.<jk>class</jk>)
 	 * 	<jk>public</jk> NewPojo oldMethod() {
 	 * 		<jk>return</jk> newMethod();
 	 * 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
index 5a176bd..755041b 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
@@ -84,7 +84,8 @@ public @interface RestPut {
 	 * 	<jk>public</jk> NewPojo newMethod()  {...}
 	 *
 	 * 	<jc>// Call this method if X-Client-Version is at least 1.1, but less than 2.0.</jc>
-	 * 	<ja>@RestPut</ja>(path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>, transforms={NewToOldPojoSwap.<jk>class</jk>})
+	 * 	<ja>@RestPut</ja>(path=<js>"/foobar"</js>, clientVersion=<js>"[1.1,2.0)"</js>)
+	 * 	<ja>@BeanConfig</ja>(swaps=NewToOldSwap.<jk>class</jk>)
 	 * 	<jk>public</jk> NewPojo oldMethod() {
 	 * 		<jk>return</jk> newMethod();
 	 * 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Introspectable.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Introspectable.java
index 6fe7bd9..990a85e 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Introspectable.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Introspectable.java
@@ -15,8 +15,8 @@ package org.apache.juneau.rest.converters;
 import org.apache.juneau.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.rest.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.http.response.*;
-import org.apache.juneau.transform.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -66,7 +66,7 @@ public final class Introspectable implements RestConverter {
 			return o;
 		try {
 			BeanSession bs = req.getBeanSession();
-			PojoSwap swap = bs.getClassMetaForObject(o).getSwap(bs);
+			ObjectSwap swap = bs.getClassMetaForObject(o).getSwap(bs);
 			if (swap != null)
 				o = swap.swap(bs, o);
 			return new PojoIntrospector(o, JsonParser.DEFAULT).invokeMethod(method, args);
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
index 5692973..551bfb1 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
@@ -16,8 +16,8 @@ import static org.apache.juneau.rest.HttpRuntimeException.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.rest.*;
+import org.apache.juneau.swap.*;
 import org.apache.juneau.http.response.*;
-import org.apache.juneau.transform.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -54,7 +54,7 @@ public final class Traversable implements RestConverter {
 		if (pathRemainder != null) {
 			try {
 				BeanSession bs = req.getBeanSession();
-				PojoSwap swap = bs.getClassMetaForObject(o).getSwap(bs);
+				ObjectSwap swap = bs.getClassMetaForObject(o).getSwap(bs);
 				if (swap != null)
 					o = swap.swap(bs, o);
 				PojoRest p = new PojoRest(o, req.getBody().getReaderParser());
diff --git a/juneau-utest-utils/.gitignore b/juneau-utest-utils/.gitignore
new file mode 100644
index 0000000..34acf88
--- /dev/null
+++ b/juneau-utest-utils/.gitignore
@@ -0,0 +1,6 @@
+/target/
+**/.DS_Store
+.classpath
+.project
+/.settings/
+/bin/
diff --git a/juneau-utest/pom.xml b/juneau-utest-utils/pom.xml
similarity index 61%
copy from juneau-utest/pom.xml
copy to juneau-utest-utils/pom.xml
index c4a3841..88633d3 100644
--- a/juneau-utest/pom.xml
+++ b/juneau-utest-utils/pom.xml
@@ -23,9 +23,9 @@
 		<version>9.0.0-SNAPSHOT</version>
 	</parent>
 
-	<artifactId>juneau-utest</artifactId>
-	<name>juneau/utest</name>
-	<description>Apache Juneau Core API Unit Tests</description>
+	<artifactId>juneau-utest-utils</artifactId>
+	<name>juneau/utest-utils</name>
+	<description>Apache Juneau Core API Unit Test Utils</description>
 	<packaging>bundle</packaging>
 
 	<dependencies>
@@ -40,48 +40,9 @@
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-config</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-dto</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-mock</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-server-rdf</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.jena</groupId>
-			<artifactId>jena-core</artifactId>
-			<optional>false</optional>
-		</dependency>
-		<dependency>
 			<groupId>javax.xml.bind</groupId>
 			<artifactId>jaxb-api</artifactId>
 		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>javax.servlet-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.carrotsearch</groupId>
-			<artifactId>junit-benchmarks</artifactId>
-			<version>0.7.2</version>
-			<scope>test</scope>
-		</dependency>
 	</dependencies>
 
 	<properties>
@@ -101,7 +62,7 @@
 				<extensions>true</extensions>
 				<configuration>
 					<instructions>
-						<Automatic-Module-Name>org.apache.juneau.core.test</Automatic-Module-Name>
+						<Automatic-Module-Name>org.apache.juneau.core.test.utils</Automatic-Module-Name>
 					</instructions>
 				</configuration>
 			</plugin>
@@ -129,38 +90,6 @@
 					</execution>
 				</executions>
 			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<configuration>
-					<includes>
-						<include>**/*Test.class</include>
-					</includes>
-					<systemPropertyVariables>
-						<java.locale.providers>JRE,COMPAT,SPI,CLDR</java.locale.providers>
-					</systemPropertyVariables>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.jacoco</groupId>
-				<artifactId>jacoco-maven-plugin</artifactId>
-				<version>0.8.2</version>
-				<executions>
-					<execution>
-						<id>default-prepare-agent</id>
-						<goals>
-							<goal>prepare-agent</goal>
-						</goals>
-					</execution>
-					<execution>
-						<id>default-report</id>
-						<phase>prepare-package</phase>
-						<goals>
-							<goal>report</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/CalendarUtils.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/CalendarUtils.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/CalendarUtils.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/CalendarUtils.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/Constants.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/Constants.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/Constants.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/Constants.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParser.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockReaderParser.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParser.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockReaderParser.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParserFunction.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockReaderParserFunction.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParserFunction.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockReaderParserFunction.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParserPartFunction.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockReaderParserPartFunction.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockReaderParserPartFunction.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockReaderParserPartFunction.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamParser.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockStreamParser.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamParser.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockStreamParser.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamParserFunction.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockStreamParserFunction.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamParserFunction.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockStreamParserFunction.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamSerializer.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockStreamSerializer.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamSerializer.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockStreamSerializer.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamSerializerFunction.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockStreamSerializerFunction.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockStreamSerializerFunction.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockStreamSerializerFunction.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializer.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockWriterSerializer.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializer.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockWriterSerializer.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializerFunction.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockWriterSerializerFunction.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializerFunction.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockWriterSerializerFunction.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializerPartFunction.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockWriterSerializerPartFunction.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/MockWriterSerializerPartFunction.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/MockWriterSerializerPartFunction.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/StreamUtils.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/StreamUtils.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/StreamUtils.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/StreamUtils.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/TestSupplier.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/TestSupplier.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/TestSupplier.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/TestSupplier.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/TestUtils.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/TestUtils.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/TestUtils.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/TestUtils.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/XmlUtils.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/XmlUtils.java
similarity index 98%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/XmlUtils.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/XmlUtils.java
index a499c62..8d0d26e 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/testutils/XmlUtils.java
+++ b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/XmlUtils.java
@@ -19,9 +19,9 @@ import java.util.regex.*;
 
 import javax.xml.parsers.*;
 
+import org.apache.juneau.assertions.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.xml.*;
-import org.junit.*;
 import org.w3c.dom.*;
 import org.xml.sax.*;
 
@@ -204,7 +204,7 @@ public class XmlUtils {
 	 * 	then a simple string comparison is performed.
 	 */
 	public static final void assertXmlEquals(String expected, String actual) throws Exception {
-		Assert.assertEquals(sortXml(expected), sortXml(actual));
+		Assertions.assertString(sortXml(expected)).is(sortXml(actual));
 	}
 
 	private static StringBuilder indent(int depth, StringBuilder sb) {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/ABean.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/ABean.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/ABean.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/ABean.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/Constants.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/Constants.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/Constants.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/Constants.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/ImplicitSwappedPojo.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/ImplicitSwappedObject.java
similarity index 93%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/ImplicitSwappedPojo.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/ImplicitSwappedObject.java
index 18d0036..958f783 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/ImplicitSwappedPojo.java
+++ b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/ImplicitSwappedObject.java
@@ -17,7 +17,7 @@ import static org.apache.juneau.testutils.pojos.Constants.*;
 import org.apache.juneau.annotation.*;
 
 @BeanIgnore
-public class ImplicitSwappedPojo {
+public class ImplicitSwappedObject {
 	public boolean wasUnswapped;
 
 	@Override
@@ -25,10 +25,10 @@ public class ImplicitSwappedPojo {
 		return SWAP;
 	}
 
-	public ImplicitSwappedPojo() {}
+	public ImplicitSwappedObject() {}
 
 
-	public ImplicitSwappedPojo(String fromString) {
+	public ImplicitSwappedObject(String fromString) {
 		if (fromString.equals(SWAP))
 			wasUnswapped = true;
 	}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/LargePojo.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/LargePojo.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/LargePojo.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/LargePojo.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/PrimitiveAtomicObjectsBean.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/PrimitiveAtomicObjectsBean.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/PrimitiveAtomicObjectsBean.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/PrimitiveAtomicObjectsBean.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/PrimitiveObjectsBean.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/PrimitiveObjectsBean.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/PrimitiveObjectsBean.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/PrimitiveObjectsBean.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedPojo.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/SwappedObject.java
similarity index 96%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedPojo.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/SwappedObject.java
index 859e655..5662262 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedPojo.java
+++ b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/SwappedObject.java
@@ -14,7 +14,7 @@ package org.apache.juneau.testutils.pojos;
 
 import org.apache.juneau.annotation.*;
 
-@Swap(SwappedPojoSwap.class)
-public class SwappedPojo {
+@Swap(SwappedObjectSwap.class)
+public class SwappedObject {
 	public boolean wasUnswapped;
 }
\ No newline at end of file
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedPojoSwap.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/SwappedObjectSwap.java
similarity index 84%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedPojoSwap.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/SwappedObjectSwap.java
index 7d698c3..241c4f4 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedPojoSwap.java
+++ b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/SwappedObjectSwap.java
@@ -17,17 +17,17 @@ import static org.apache.juneau.testutils.pojos.Constants.*;
 import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 
-public class SwappedPojoSwap extends PojoSwap<SwappedPojo,String> {
+public class SwappedObjectSwap extends ObjectSwap<SwappedObject,String> {
 	@Override
-	public String swap(BeanSession session, SwappedPojo c) throws SerializeException {
+	public String swap(BeanSession session, SwappedObject c) throws SerializeException {
 		return SWAP;
 	}
 
 	@Override
-	public SwappedPojo unswap(BeanSession session, String f, ClassMeta<?> hint) throws ParseException {
-		SwappedPojo c = new SwappedPojo();
+	public SwappedObject unswap(BeanSession session, String f, ClassMeta<?> hint) throws ParseException {
+		SwappedObject c = new SwappedObject();
 		if (f.equals(SWAP))
 			c.wasUnswapped = true;
 		return c;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TestEnum.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TestEnum.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TestEnum.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TestEnum.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TestEnumToString.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TestEnumToString.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TestEnumToString.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TestEnumToString.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TestURI.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TestURI.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TestURI.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TestURI.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TypedBean.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TypedBean.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TypedBean.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TypedBean.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TypedBeanImpl.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TypedBeanImpl.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TypedBeanImpl.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/TypedBeanImpl.java
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/XBeans.java b/juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/XBeans.java
similarity index 100%
rename from juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/XBeans.java
rename to juneau-utest-utils/src/main/java/org/apache/juneau/testutils/pojos/XBeans.java
diff --git a/juneau-utest/pom.xml b/juneau-utest/pom.xml
index c4a3841..cb2cf06 100644
--- a/juneau-utest/pom.xml
+++ b/juneau-utest/pom.xml
@@ -31,6 +31,11 @@
 	<dependencies>
 		<dependency>
 			<groupId>org.apache.juneau</groupId>
+			<artifactId>juneau-utest-utils</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.juneau</groupId>
 			<artifactId>juneau-marshall</artifactId>
 			<version>${project.version}</version>
 		</dependency>
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java b/juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java
index 4319b9d..5805909 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java
@@ -24,7 +24,7 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.junit.*;
 
 @SuppressWarnings({"unchecked","rawtypes"})
diff --git a/juneau-utest/src/test/java/org/apache/juneau/ClassMetaTest.java b/juneau-utest/src/test/java/org/apache/juneau/ClassMetaTest.java
index ae88e83..d6bb88a 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/ClassMetaTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ClassMetaTest.java
@@ -17,7 +17,7 @@ import static org.junit.runners.MethodSorters.*;
 
 import java.util.*;
 
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.junit.*;
 
 @SuppressWarnings({"rawtypes","serial"})
@@ -125,11 +125,11 @@ public class ClassMetaTest {
 		hc1 = bc.getClassMeta(HC1.class);
 		hi2 = bc.getClassMeta(HI2.class);
 		hc2 = bc.getClassMeta(HC2.class);
-		assertFalse(ooo.hasChildPojoSwaps());
-		assertFalse(hi1.hasChildPojoSwaps());
-		assertFalse(hc1.hasChildPojoSwaps());
-		assertFalse(hi2.hasChildPojoSwaps());
-		assertFalse(hc2.hasChildPojoSwaps());
+		assertFalse(ooo.hasChildSwaps());
+		assertFalse(hi1.hasChildSwaps());
+		assertFalse(hc1.hasChildSwaps());
+		assertFalse(hi2.hasChildSwaps());
+		assertFalse(hc2.hasChildSwaps());
 		assertNull(ooo.getSwap(bs));
 		assertNull(hi1.getSwap(bs));
 		assertNull(hc1.getSwap(bs));
@@ -148,11 +148,11 @@ public class ClassMetaTest {
 		hc1 = bc.getClassMeta(HC1.class);
 		hi2 = bc.getClassMeta(HI2.class);
 		hc2 = bc.getClassMeta(HC2.class);
-		assertTrue(ooo.hasChildPojoSwaps());
-		assertTrue(hi1.hasChildPojoSwaps());
-		assertFalse(hc1.hasChildPojoSwaps());
-		assertFalse(hi2.hasChildPojoSwaps());
-		assertFalse(hc2.hasChildPojoSwaps());
+		assertTrue(ooo.hasChildSwaps());
+		assertTrue(hi1.hasChildSwaps());
+		assertFalse(hc1.hasChildSwaps());
+		assertFalse(hi2.hasChildSwaps());
+		assertFalse(hc2.hasChildSwaps());
 		assertNull(ooo.getSwap(bs));
 		assertEquals(hi1.getSwap(bs).getClass(), HI1Swap.class);
 		assertEquals(hc1.getSwap(bs).getClass(), HI1Swap.class);
@@ -171,11 +171,11 @@ public class ClassMetaTest {
 		hc1 = bc.getClassMeta(HC1.class);
 		hi2 = bc.getClassMeta(HI2.class);
 		hc2 = bc.getClassMeta(HC2.class);
-		assertTrue(ooo.hasChildPojoSwaps());
-		assertTrue(hi1.hasChildPojoSwaps());
-		assertTrue(hc1.hasChildPojoSwaps());
-		assertFalse(hi2.hasChildPojoSwaps());
-		assertFalse(hc2.hasChildPojoSwaps());
+		assertTrue(ooo.hasChildSwaps());
+		assertTrue(hi1.hasChildSwaps());
+		assertTrue(hc1.hasChildSwaps());
+		assertFalse(hi2.hasChildSwaps());
+		assertFalse(hc2.hasChildSwaps());
 		assertNull(ooo.getSwap(bs));
 		assertNull(hi1.getSwap(bs));
 		assertEquals(hc1.getSwap(bs).getClass(), HC1Swap.class);
@@ -194,11 +194,11 @@ public class ClassMetaTest {
 		hc1 = bc.getClassMeta(HC1.class);
 		hi2 = bc.getClassMeta(HI2.class);
 		hc2 = bc.getClassMeta(HC2.class);
-		assertTrue(ooo.hasChildPojoSwaps());
-		assertTrue(hi1.hasChildPojoSwaps());
-		assertFalse(hc1.hasChildPojoSwaps());
-		assertTrue(hi2.hasChildPojoSwaps());
-		assertFalse(hc2.hasChildPojoSwaps());
+		assertTrue(ooo.hasChildSwaps());
+		assertTrue(hi1.hasChildSwaps());
+		assertFalse(hc1.hasChildSwaps());
+		assertTrue(hi2.hasChildSwaps());
+		assertFalse(hc2.hasChildSwaps());
 		assertNull(ooo.getSwap(bs));
 		assertNull(hi1.getSwap(bs));
 		assertNull(hc1.getSwap(bs));
@@ -217,11 +217,11 @@ public class ClassMetaTest {
 		hc1 = bc.getClassMeta(HC1.class);
 		hi2 = bc.getClassMeta(HI2.class);
 		hc2 = bc.getClassMeta(HC2.class);
-		assertTrue(ooo.hasChildPojoSwaps());
-		assertTrue(hi1.hasChildPojoSwaps());
-		assertTrue(hc1.hasChildPojoSwaps());
-		assertTrue(hi2.hasChildPojoSwaps());
-		assertTrue(hc2.hasChildPojoSwaps());
+		assertTrue(ooo.hasChildSwaps());
+		assertTrue(hi1.hasChildSwaps());
+		assertTrue(hc1.hasChildSwaps());
+		assertTrue(hi2.hasChildSwaps());
+		assertTrue(hc2.hasChildSwaps());
 		assertNull(ooo.getSwap(bs));
 		assertNull(hi1.getSwap(bs));
 		assertNull(hc1.getSwap(bs));
@@ -240,11 +240,11 @@ public class ClassMetaTest {
 		hc1 = bc.getClassMeta(HC1.class);
 		hi2 = bc.getClassMeta(HI2.class);
 		hc2 = bc.getClassMeta(HC2.class);
-		assertTrue(ooo.hasChildPojoSwaps());
-		assertTrue(hi1.hasChildPojoSwaps());
-		assertTrue(hc1.hasChildPojoSwaps());
-		assertTrue(hi2.hasChildPojoSwaps());
-		assertTrue(hc2.hasChildPojoSwaps());
+		assertTrue(ooo.hasChildSwaps());
+		assertTrue(hi1.hasChildSwaps());
+		assertTrue(hc1.hasChildSwaps());
+		assertTrue(hi2.hasChildSwaps());
+		assertTrue(hc2.hasChildSwaps());
 		assertNull(ooo.getSwap(bs));
 		assertEquals(hi1.getSwap(bs).getClass(), HI1Swap.class);
 		assertEquals(hc1.getSwap(bs).getClass(), HI1Swap.class);
@@ -263,11 +263,11 @@ public class ClassMetaTest {
 		hc1 = bc.getClassMeta(HC1.class);
 		hi2 = bc.getClassMeta(HI2.class);
 		hc2 = bc.getClassMeta(HC2.class);
-		assertTrue(ooo.hasChildPojoSwaps());
-		assertTrue(hi1.hasChildPojoSwaps());
-		assertTrue(hc1.hasChildPojoSwaps());
-		assertTrue(hi2.hasChildPojoSwaps());
-		assertTrue(hc2.hasChildPojoSwaps());
+		assertTrue(ooo.hasChildSwaps());
+		assertTrue(hi1.hasChildSwaps());
+		assertTrue(hc1.hasChildSwaps());
+		assertTrue(hi2.hasChildSwaps());
+		assertTrue(hc2.hasChildSwaps());
 		assertNull(ooo.getSwap(bs));
 		assertEquals(hi1.getSwap(bs).getClass(), HI1Swap.class);
 		assertEquals(hc1.getSwap(bs).getClass(), HC1Swap.class);
@@ -284,8 +284,8 @@ public class ClassMetaTest {
 	public class HC1 implements HI1 {}
 	public interface HI2 extends HI1 {}
 	public class HC2 extends HC1 implements HI2 {}
-	public static class HC1Swap extends PojoSwap<HC1,Map> {}
-	public static class HI1Swap extends PojoSwap<HI1,Map> {}
-	public static class HC2Swap extends PojoSwap<HC2,Map> {}
-	public static class HI2Swap extends PojoSwap<HI2,Map> {}
+	public static class HC1Swap extends ObjectSwap<HC1,Map> {}
+	public static class HI1Swap extends ObjectSwap<HI1,Map> {}
+	public static class HC2Swap extends ObjectSwap<HC2,Map> {}
+	public static class HI2Swap extends ObjectSwap<HI2,Map> {}
 }
diff --git a/juneau-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java b/juneau-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
index d1bf7a2..a1968fb 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
@@ -20,7 +20,7 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swaps.*;
 import org.junit.runner.*;
 import org.junit.runners.*;
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/PojoSwapTest.java b/juneau-utest/src/test/java/org/apache/juneau/ObjectSwapTest.java
similarity index 92%
rename from juneau-utest/src/test/java/org/apache/juneau/PojoSwapTest.java
rename to juneau-utest/src/test/java/org/apache/juneau/ObjectSwapTest.java
index 088c9a0..d976460 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/PojoSwapTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ObjectSwapTest.java
@@ -19,15 +19,15 @@ import org.apache.juneau.collections.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class PojoSwapTest {
+public class ObjectSwapTest {
 
 	//====================================================================================================
 	// Test same type
-	// If you define a PojoSwap<String,String> filter, then it should be invoked on all strings.
+	// If you define a ObjectSwap<String,String> filter, then it should be invoked on all strings.
 	//====================================================================================================
 	@Test
 	public void testSameType() throws Exception {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
index 743ef46..751f8c4 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
@@ -22,7 +22,7 @@ import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swaps.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.xml.*;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
index 19047ea..608a8a3 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
@@ -29,8 +29,8 @@ import org.apache.juneau.collections.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.transform.*;
-import org.apache.juneau.transforms.*;
+import org.apache.juneau.swap.*;
+import org.apache.juneau.swaps.*;
 import org.junit.*;
 
 /**
@@ -218,11 +218,11 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 	}
 
 	public static class BSwap extends StringSwap<B> {
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public String swap(BeanSession session, B o) throws SerializeException {
 			return o.f1;
 		}
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public B unswap(BeanSession session, String f, ClassMeta<?> hint) throws ParseException {
 			B b1 = new B();
 			b1.f1 = f;
@@ -249,11 +249,11 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 	}
 
 	public static class BcSwap extends StringSwap<Bc> {
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public String swap(BeanSession session, Bc o) throws SerializeException {
 			return o.f1;
 		}
-		@Override /* PojoSwap */
+		@Override /* ObjectSwap */
 		public Bc unswap(BeanSession session, String f, ClassMeta<?> hint) throws ParseException {
 			Bc b1 = new Bc();
 			b1.f1 = f;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanAnnotation_Test.java b/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanAnnotation_Test.java
index f05de4d..0c157c9 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanAnnotation_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanAnnotation_Test.java
@@ -17,7 +17,7 @@ import static org.junit.Assert.*;
 import static org.junit.runners.MethodSorters.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
diff --git a/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanConfigAnnotation_Test.java b/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanConfigAnnotation_Test.java
index 0c2f399..cc3ffe5 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanConfigAnnotation_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanConfigAnnotation_Test.java
@@ -26,7 +26,7 @@ import org.apache.juneau.json.*;
 import org.apache.juneau.marshall.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.transform.*;
+import org.apache.juneau.swap.*;
 import org.junit.*;
 
 /**
@@ -98,11 +98,11 @@ public class BeanConfigAnnotation_Test {
 	public static class A3 {
 		public int foo;
 	}
-	public static class AB1 extends PojoSwap<String,Integer> {
+	public static class AB1 extends ObjectSwap<String,Integer> {
 	}
-	public static class AB2 extends PojoSwap<String,Integer> {
+	public static class AB2 extends ObjectSwap<String,Integer> {
 	}
-	public static class AB3 extends PojoSwap<String,Integer> {
+	public static class AB3 extends ObjectSwap<String,Integer> {
 	}
 
 	@BeanConfig(
diff --git a/juneau-utest/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java b/juneau-utest/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
index 2b11cd5..6fb6e5f 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/config/ConfigInterfaceTest.java
@@ -288,73 +288,73 @@ public class ConfigInterfaceTest {
 	// Swapped POJOs
 
 	@Test
-	public void testSwappedPojo() throws Exception {
-		proxy.setSwappedPojo(new SwappedPojo());
-		assertObject(proxy.getSwappedPojo()).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
-		assertEquals("swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/", cf.get("A/swappedPojo"));
-		assertObject(proxy.getSwappedPojo()).isType(SwappedPojo.class);
+	public void testSwappedObject() throws Exception {
+		proxy.setSwappedObject(new SwappedObject());
+		assertObject(proxy.getSwappedObject()).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
+		assertEquals("swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/", cf.get("A/swappedObject"));
+		assertObject(proxy.getSwappedObject()).isType(SwappedObject.class);
 	}
 
 	@Test
-	public void testSwappedPojo3dArray() throws Exception {
-		proxy.setSwappedPojo3dArray(new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null});
-		assertObject(proxy.getSwappedPojo3dArray()).asJson().is("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]");
-		assertEquals("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]", cf.get("A/swappedPojo3dArray"));
-		assertObject(proxy.getSwappedPojo3dArray()[0][0][0]).isType(SwappedPojo.class);
+	public void testSwappedObject3dArray() throws Exception {
+		proxy.setSwappedObject3dArray(new SwappedObject[][][]{{{new SwappedObject(),null},null},null});
+		assertObject(proxy.getSwappedObject3dArray()).asJson().is("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]");
+		assertEquals("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]", cf.get("A/swappedObject3dArray"));
+		assertObject(proxy.getSwappedObject3dArray()[0][0][0]).isType(SwappedObject.class);
 	}
 
 	@Test
-	public void testSwappedPojoMap() throws Exception {
-		proxy.setSwappedPojoMap(AMap.of(new SwappedPojo(), new SwappedPojo()));
-		assertObject(proxy.getSwappedPojoMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
-		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}", cf.get("A/swappedPojoMap"));
-		assertObject(proxy.getSwappedPojoMap().keySet().iterator().next()).isType(SwappedPojo.class);
-		assertObject(proxy.getSwappedPojoMap().values().iterator().next()).isType(SwappedPojo.class);
+	public void testSwappedObjectMap() throws Exception {
+		proxy.setSwappedObjectMap(AMap.of(new SwappedObject(), new SwappedObject()));
+		assertObject(proxy.getSwappedObjectMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
+		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}", cf.get("A/swappedObjectMap"));
+		assertObject(proxy.getSwappedObjectMap().keySet().iterator().next()).isType(SwappedObject.class);
+		assertObject(proxy.getSwappedObjectMap().values().iterator().next()).isType(SwappedObject.class);
 	}
 
 	@Test
-	public void testSwappedPojo3dMap() throws Exception {
-		proxy.setSwappedPojo3dMap(AMap.of(new SwappedPojo(), new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null}));
-		assertObject(proxy.getSwappedPojo3dMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
-		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}", cf.get("A/swappedPojo3dMap"));
-		assertObject(proxy.getSwappedPojo3dMap().keySet().iterator().next()).isType(SwappedPojo.class);
-		assertObject(proxy.getSwappedPojo3dMap().values().iterator().next()[0][0][0]).isType(SwappedPojo.class);
+	public void testSwappedObject3dMap() throws Exception {
+		proxy.setSwappedObject3dMap(AMap.of(new SwappedObject(), new SwappedObject[][][]{{{new SwappedObject(),null},null},null}));
+		assertObject(proxy.getSwappedObject3dMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
+		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}", cf.get("A/swappedObject3dMap"));
+		assertObject(proxy.getSwappedObject3dMap().keySet().iterator().next()).isType(SwappedObject.class);
+		assertObject(proxy.getSwappedObject3dMap().values().iterator().next()[0][0][0]).isType(SwappedObject.class);
 	}
 
 	// Implicit swapped POJOs
 
 	@Test
-	public void testImplicitSwappedPojo() throws Exception {
-		proxy.setImplicitSwappedPojo(new ImplicitSwappedPojo());
-		assertObject(proxy.getImplicitSwappedPojo()).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
-		assertEquals("swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/", cf.get("A/implicitSwappedPojo"));
-		assertObject(proxy.getImplicitSwappedPojo()).isType(ImplicitSwappedPojo.class);
+	public void testImplicitSwappedObject() throws Exception {
+		proxy.setImplicitSwappedObject(new ImplicitSwappedObject());
+		assertObject(proxy.getImplicitSwappedObject()).asJson().is("'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'");
+		assertEquals("swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/", cf.get("A/implicitSwappedObject"));
+		assertObject(proxy.getImplicitSwappedObject()).isType(ImplicitSwappedObject.class);
 	}
 
 	@Test
-	public void testImplicitSwappedPojo3dArray() throws Exception {
-		proxy.setImplicitSwappedPojo3dArray(new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null});
-		assertObject(proxy.getImplicitSwappedPojo3dArray()).asJson().is("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]");
-		assertEquals("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]", cf.get("A/implicitSwappedPojo3dArray"));
-		assertObject(proxy.getImplicitSwappedPojo3dArray()[0][0][0]).isType(ImplicitSwappedPojo.class);
+	public void testImplicitSwappedObject3dArray() throws Exception {
+		proxy.setImplicitSwappedObject3dArray(new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null});
+		assertObject(proxy.getImplicitSwappedObject3dArray()).asJson().is("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]");
+		assertEquals("[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]", cf.get("A/implicitSwappedObject3dArray"));
+		assertObject(proxy.getImplicitSwappedObject3dArray()[0][0][0]).isType(ImplicitSwappedObject.class);
 	}
 
 	@Test
-	public void testImplicitSwappedPojoMap() throws Exception {
-		proxy.setImplicitSwappedPojoMap(AMap.of(new ImplicitSwappedPojo(), new ImplicitSwappedPojo()));
-		assertObject(proxy.getImplicitSwappedPojoMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
-		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}", cf.get("A/implicitSwappedPojoMap"));
-		assertObject(proxy.getImplicitSwappedPojoMap().keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(proxy.getImplicitSwappedPojoMap().values().iterator().next()).isType(ImplicitSwappedPojo.class);
+	public void testImplicitSwappedObjectMap() throws Exception {
+		proxy.setImplicitSwappedObjectMap(AMap.of(new ImplicitSwappedObject(), new ImplicitSwappedObject()));
+		assertObject(proxy.getImplicitSwappedObjectMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}");
+		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/'}", cf.get("A/implicitSwappedObjectMap"));
+		assertObject(proxy.getImplicitSwappedObjectMap().keySet().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(proxy.getImplicitSwappedObjectMap().values().iterator().next()).isType(ImplicitSwappedObject.class);
 	}
 
 	@Test
-	public void testImplicitSwappedPojo3dMap() throws Exception {
-		proxy.setImplicitSwappedPojo3dMap(AMap.of(new ImplicitSwappedPojo(), new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null}));
-		assertObject(proxy.getImplicitSwappedPojo3dMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
-		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}", cf.get("A/implicitSwappedPojo3dMap"));
-		assertObject(proxy.getImplicitSwappedPojo3dMap().keySet().iterator().next()).isType(ImplicitSwappedPojo.class);
-		assertObject(proxy.getImplicitSwappedPojo3dMap().values().iterator().next()[0][0][0]).isType(ImplicitSwappedPojo.class);
+	public void testImplicitSwappedObject3dMap() throws Exception {
+		proxy.setImplicitSwappedObject3dMap(AMap.of(new ImplicitSwappedObject(), new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null}));
+		assertObject(proxy.getImplicitSwappedObject3dMap()).asJson().is("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}");
+		assertEquals("{'swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/':[[['swap-~!@#$%^&*()_+`-={}[]|:;\"<,>.?/',null],null],null]}", cf.get("A/implicitSwappedObject3dMap"));
+		assertObject(proxy.getImplicitSwappedObject3dMap().keySet().iterator().next()).isType(ImplicitSwappedObject.class);
+		assertObject(proxy.getImplicitSwappedObject3dMap().values().iterator().next()[0][0][0]).isType(ImplicitSwappedObject.class);
 	}
 
 	// Enums
@@ -529,31 +529,31 @@ public class ConfigInterfaceTest {
 
 		// Swapped POJOs
 
-		public SwappedPojo getSwappedPojo();
-		public void setSwappedPojo(SwappedPojo x);
+		public SwappedObject getSwappedObject();
+		public void setSwappedObject(SwappedObject x);
 
-		public SwappedPojo[][][] getSwappedPojo3dArray();
-		public void setSwappedPojo3dArray(SwappedPojo[][][] x);
+		public SwappedObject[][][] getSwappedObject3dArray();
+		public void setSwappedObject3dArray(SwappedObject[][][] x);
 
-		public Map<SwappedPojo,SwappedPojo> getSwappedPojoMap();
-		public void setSwappedPojoMap(Map<SwappedPojo,SwappedPojo> x);
+		public Map<SwappedObject,SwappedObject> getSwappedObjectMap();
+		public void setSwappedObjectMap(Map<SwappedObject,SwappedObject> x);
 
-		public Map<SwappedPojo,SwappedPojo[][][]> getSwappedPojo3dMap();
-		public void setSwappedPojo3dMap(Map<SwappedPojo,SwappedPojo[][][]> x);
+		public Map<SwappedObject,SwappedObject[][][]> getSwappedObject3dMap();
+		public void setSwappedObject3dMap(Map<SwappedObject,SwappedObject[][][]> x);
 
 		// Implicit swapped POJOs
 
-		public ImplicitSwappedPojo getImplicitSwappedPojo();
-		public void setImplicitSwappedPojo(ImplicitSwappedPojo x);
+		public ImplicitSwappedObject getImplicitSwappedObject();
+		public void setImplicitSwappedObject(ImplicitSwappedObject x);
 
-		public ImplicitSwappedPojo[][][] getImplicitSwappedPojo3dArray();
-		public void setImplicitSwappedPojo3dArray(ImplicitSwappedPojo[][][] x);
+		public ImplicitSwappedObject[][][] getImplicitSwappedObject3dArray();
+		public void setImplicitSwappedObject3dArray(ImplicitSwappedObject[][][] x);
 
-		public Map<ImplicitSwappedPojo,ImplicitSwappedPojo> getImplicitSwappedPojoMap();
-		public void setImplicitSwappedPojoMap(Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x);
+		public Map<ImplicitSwappedObject,ImplicitSwappedObject> getImplicitSwappedObjectMap();
+		public void setImplicitSwappedObjectMap(Map<ImplicitSwappedObject,ImplicitSwappedObject> x);
 
-		public Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> getImplicitSwappedPojo3dMap();
-		public void setImplicitSwappedPojo3dMap(Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> x);
+		public Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> getImplicitSwappedObject3dMap();
+		public void setImplicitSwappedObject3dMap(Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> x);
 
 		// Enums
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java b/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
index 4b2a7f7..f82db07 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
@@ -107,16 +107,16 @@ public class RrpcInterfaceTest {
 		Map<Integer,List<TypedBean>> returnTypedBeanListMapIntegerKeys();
 
 		// Swapped POJOs
-		SwappedPojo returnSwappedPojo();
-		SwappedPojo[][][] returnSwappedPojo3dArray();
-		Map<SwappedPojo,SwappedPojo> returnSwappedPojoMap();
-		Map<SwappedPojo,SwappedPojo[][][]> returnSwappedPojo3dMap();
+		SwappedObject returnSwappedObject();
+		SwappedObject[][][] returnSwappedObject3dArray();
+		Map<SwappedObject,SwappedObject> returnSwappedObjectMap();
+		Map<SwappedObject,SwappedObject[][][]> returnSwappedObject3dMap();
 
 		// Implicit swapped POJOs
-		ImplicitSwappedPojo returnImplicitSwappedPojo();
-		ImplicitSwappedPojo[][][] returnImplicitSwappedPojo3dArray();
-		Map<ImplicitSwappedPojo,ImplicitSwappedPojo> returnImplicitSwappedPojoMap();
-		Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> returnImplicitSwappedPojo3dMap();
+		ImplicitSwappedObject returnImplicitSwappedObject();
+		ImplicitSwappedObject[][][] returnImplicitSwappedObject3dArray();
+		Map<ImplicitSwappedObject,ImplicitSwappedObject> returnImplicitSwappedObjectMap();
+		Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> returnImplicitSwappedObject3dMap();
 
 		// Enums
 		TestEnum returnEnum();
@@ -178,16 +178,16 @@ public class RrpcInterfaceTest {
 		void setTypedBeanListMapIntegerKeys(Map<Integer,List<TypedBean>> x);
 
 		// Swapped POJOs
-		void setSwappedPojo(SwappedPojo x);
-		void setSwappedPojo3dArray(SwappedPojo[][][] x);
-		void setSwappedPojoMap(Map<SwappedPojo,SwappedPojo> x);
-		void setSwappedPojo3dMap(Map<SwappedPojo,SwappedPojo[][][]> x);
+		void setSwappedObject(SwappedObject x);
+		void setSwappedObject3dArray(SwappedObject[][][] x);
+		void setSwappedObjectMap(Map<SwappedObject,SwappedObject> x);
+		void setSwappedObject3dMap(Map<SwappedObject,SwappedObject[][][]> x);
 
 		// Implicit swapped POJOs
-		void setImplicitSwappedPojo(ImplicitSwappedPojo x);
-		void setImplicitSwappedPojo3dArray(ImplicitSwappedPojo[][][] x);
-		void setImplicitSwappedPojoMap(Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x);
-		void setImplicitSwappedPojo3dMap(Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> x);
+		void setImplicitSwappedObject(ImplicitSwappedObject x);
+		void setImplicitSwappedObject3dArray(ImplicitSwappedObject[][][] x);
+		void setImplicitSwappedObjectMap(Map<ImplicitSwappedObject,ImplicitSwappedObject> x);
+		void setImplicitSwappedObject3dMap(Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> x);
 
 		// Enums
 		void setEnum(TestEnum x);
@@ -209,8 +209,8 @@ public class RrpcInterfaceTest {
 		void setMultiParamsFloatObject(Float x1,Float x1n,Float[][][] x2,Float[][][] x2n,List<Float[][][]> x3,List<Float[][][]> x3n);
 		void setMultiParamsString(String x1,String[][][] x2,String[][][] x2n,List<String[][][]> x3,List<String[][][]> x3n);
 		void setMultiParamsBean(ABean x1,ABean[][][] x2,ABean[][][] x2n,List<ABean[][][]> x3,List<ABean[][][]> x3n,Map<String,ABean> x4,Map<String,ABean> x4n,Map<String,List<ABean[][][]>> x5,Map<String,List<ABean[][][]>> x5n);
-		void setMultiParamsSwappedPojo(SwappedPojo x1,SwappedPojo[][][] x2,SwappedPojo[][][] x2n,List<SwappedPojo[][][]> x3,List<SwappedPojo[][][]> x3n,Map<SwappedPojo,SwappedPojo> x4,Map<SwappedPojo,SwappedPojo> x4n,Map<SwappedPojo,List<SwappedPojo[][][]>> x5,Map<SwappedPojo,List<SwappedPojo[][][]>> x5n);
-		void setMultiParamsImplicitSwappedPojo(ImplicitSwappedPojo x1,ImplicitSwappedPojo[][][] x2,ImplicitSwappedPojo[][][] x2n,List<ImplicitSwappedPojo[][][]> x3,List<ImplicitSwappedPojo[][][]> x3n,Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x4,Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x4n,Map<ImplicitSwappedPojo,List<ImplicitSwappedPojo[][][]>> x5,Map<ImplicitSwappedPojo,List<ImplicitSwappedPojo[][][]>> x5n);
+		void setMultiParamsSwappedObject(SwappedObject x1,SwappedObject[][][] x2,SwappedObject[][][] x2n,List<SwappedObject[][][]> x3,List<SwappedObject[][][]> x3n,Map<SwappedObject,SwappedObject> x4,Map<SwappedObject,SwappedObject> x4n,Map<SwappedObject,List<SwappedObject[][][]>> x5,Map<SwappedObject,List<SwappedObject[][][]>> x5n);
+		void setMultiParamsImplicitSwappedObject(ImplicitSwappedObject x1,ImplicitSwappedObject[][][] x2,ImplicitSwappedObject[][][] x2n,List<ImplicitSwappedObject[][][]> x3,List<ImplicitSwappedObject[][][]> x3n,Map<ImplicitSwappedObject,ImplicitSwappedObject> x4,Map<ImplicitSwappedObject,ImplicitSwappedObject> x4n,Map<ImplicitSwappedObject,List<ImplicitSwappedObject[][][]>> x5,Map<ImplicitSwappedObject,List<ImplicitSwappedObject[][][]>> x5n);
 		void setMultiParamsEnum(TestEnum x1,TestEnum[][][] x2,TestEnum[][][] x2n,List<TestEnum[][][]> x3,List<TestEnum[][][]> x3n,Map<TestEnum,TestEnum> x4,Map<TestEnum,TestEnum> x4n,Map<TestEnum,List<TestEnum[][][]>> x5,Map<TestEnum,List<TestEnum[][][]>> x5n);
 
 		//-------------------------------------------------------------------------------------------------------------
@@ -413,45 +413,45 @@ public class RrpcInterfaceTest {
 				// Swapped POJOs
 
 				@Override
-				public SwappedPojo returnSwappedPojo() {
-					return new SwappedPojo();
+				public SwappedObject returnSwappedObject() {
+					return new SwappedObject();
 				}
 
 				@Override
-				public SwappedPojo[][][] returnSwappedPojo3dArray() {
-					return new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null};
+				public SwappedObject[][][] returnSwappedObject3dArray() {
+					return new SwappedObject[][][]{{{new SwappedObject(),null},null},null};
 				}
 
 				@Override
-				public Map<SwappedPojo,SwappedPojo> returnSwappedPojoMap() {
-					return AMap.of(new SwappedPojo(),new SwappedPojo());
+				public Map<SwappedObject,SwappedObject> returnSwappedObjectMap() {
+					return AMap.of(new SwappedObject(),new SwappedObject());
 				}
 
 				@Override
-				public Map<SwappedPojo,SwappedPojo[][][]> returnSwappedPojo3dMap() {
-					return AMap.of(new SwappedPojo(),new SwappedPojo[][][]{{{new SwappedPojo(),null},null},null});
+				public Map<SwappedObject,SwappedObject[][][]> returnSwappedObject3dMap() {
+					return AMap.of(new SwappedObject(),new SwappedObject[][][]{{{new SwappedObject(),null},null},null});
 				}
 
 				// Implicit swapped POJOs
 
 				@Override
-				public ImplicitSwappedPojo returnImplicitSwappedPojo() {
-					return new ImplicitSwappedPojo();
+				public ImplicitSwappedObject returnImplicitSwappedObject() {
+					return new ImplicitSwappedObject();
 				}
 
 				@Override
-				public ImplicitSwappedPojo[][][] returnImplicitSwappedPojo3dArray() {
-					return new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null};
+				public ImplicitSwappedObject[][][] returnImplicitSwappedObject3dArray() {
+					return new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null};
 				}
 
 				@Override
-				public Map<ImplicitSwappedPojo,ImplicitSwappedPojo> returnImplicitSwappedPojoMap() {
-					return AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo());
+				public Map<ImplicitSwappedObject,ImplicitSwappedObject> returnImplicitSwappedObjectMap() {
+					return AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject());
 				}
 
 				@Override
-				public Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> returnImplicitSwappedPojo3dMap() {
-					return AMap.of(new ImplicitSwappedPojo(),new ImplicitSwappedPojo[][][]{{{new ImplicitSwappedPojo(),null},null},null});
+				public Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> returnImplicitSwappedObject3dMap() {
+					return AMap.of(new ImplicitSwappedObject(),new ImplicitSwappedObject[][][]{{{new ImplicitSwappedObject(),null},null},null});
 				}
 
 				// Enums
@@ -696,28 +696,28 @@ public class RrpcInterfaceTest {
 				// Swapped POJOs
 
 				@Override
-				public void setSwappedPojo(SwappedPojo x) {
+				public void setSwappedObject(SwappedObject x) {
 					assertTrue(x.wasUnswapped);
 				}
 
 				@Override
-				public void setSwappedPojo3dArray(SwappedPojo[][][] x) {
+				public void setSwappedObject3dArray(SwappedObject[][][] x) {
 					assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 					assertTrue(x[0][0][0].wasUnswapped);
 				}
 
 				@Override
-				public void setSwappedPojoMap(Map<SwappedPojo,SwappedPojo> x) {
+				public void setSwappedObjectMap(Map<SwappedObject,SwappedObject> x) {
 					assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
-					Map.Entry<SwappedPojo,SwappedPojo> e = x.entrySet().iterator().next();
+					Map.Entry<SwappedObject,SwappedObject> e = x.entrySet().iterator().next();
 					assertTrue(e.getKey().wasUnswapped);
 					assertTrue(e.getValue().wasUnswapped);
 				}
 
 				@Override
-				public void setSwappedPojo3dMap(Map<SwappedPojo,SwappedPojo[][][]> x) {
+				public void setSwappedObject3dMap(Map<SwappedObject,SwappedObject[][][]> x) {
 					assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
-					Map.Entry<SwappedPojo,SwappedPojo[][][]> e = x.entrySet().iterator().next();
+					Map.Entry<SwappedObject,SwappedObject[][][]> e = x.entrySet().iterator().next();
 					assertTrue(e.getKey().wasUnswapped);
 					assertTrue(e.getValue()[0][0][0].wasUnswapped);
 				}
@@ -725,28 +725,28 @@ public class RrpcInterfaceTest {
 				// Implicit swapped POJOs
 
 				@Override
-				public void setImplicitSwappedPojo(ImplicitSwappedPojo x) {
+				public void setImplicitSwappedObject(ImplicitSwappedObject x) {
 					assertTrue(x.wasUnswapped);
 				}
 
 				@Override
-				public void setImplicitSwappedPojo3dArray(ImplicitSwappedPojo[][][] x) {
+				public void setImplicitSwappedObject3dArray(ImplicitSwappedObject[][][] x) {
 					assertObject(x).asJson().is("[[['"+SWAP+"',null],null],null]");
 					assertTrue(x[0][0][0].wasUnswapped);
 				}
 
 				@Override
-				public void setImplicitSwappedPojoMap(Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x) {
+				public void setImplicitSwappedObjectMap(Map<ImplicitSwappedObject,ImplicitSwappedObject> x) {
 					assertObject(x).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
-					Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo> e = x.entrySet().iterator().next();
+					Map.Entry<ImplicitSwappedObject,ImplicitSwappedObject> e = x.entrySet().iterator().next();
 					assertTrue(e.getKey().wasUnswapped);
 					assertTrue(e.getValue().wasUnswapped);
 				}
 
 				@Override
-				public void setImplicitSwappedPojo3dMap(Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> x) {
+				public void setImplicitSwappedObject3dMap(Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> x) {
 					assertObject(x).asJson().is("{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}");
-					Map.Entry<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> e = x.entrySet().iterator().next();
+					Map.Entry<ImplicitSwappedObject,ImplicitSwappedObject[][][]> e = x.entrySet().iterator().next();
 					assertTrue(e.getKey().wasUnswapped);
 					assertTrue(e.getValue()[0][0][0].wasUnswapped);
 				}
@@ -874,12 +874,12 @@ public class RrpcInterfaceTest {
 				}
 
 				@Override
-				public void setMultiParamsSwappedPojo(SwappedPojo x1,SwappedPojo[][][] x2,SwappedPojo[][][] x2n,List<SwappedPojo[][][]> x3,List<SwappedPojo[][][]> x3n,Map<SwappedPojo,SwappedPojo> x4,Map<SwappedPojo,SwappedPojo> x4n,Map<SwappedPojo,List<SwappedPojo[][][]>> x5,Map<SwappedPojo,List<SwappedPojo[][][]>> x5n) {
+				public void setMultiParamsSwappedObject(SwappedObject x1,SwappedObject[][][] x2,SwappedObject[][][] x2n,List<SwappedObject[][][]> x3,List<SwappedObject[][][]> x3n,Map<SwappedObject,SwappedObject> x4,Map<SwappedObject,SwappedObject> x4n,Map<SwappedObject,List<SwappedObject[][][]>> x5,Map<SwappedObject,List<SwappedObject[][][]>> x5n) {
 					assertObject(x1).asJson().is("'"+SWAP+"'");
 					assertObject(x2).asJson().is("[[['"+SWAP+"',null],null],null]");
 					assertNull(x2n);
 					assertObject(x3).asJson().is("[[[['"+SWAP+"',null],null],null],null]");
-					assertObject(x3.get(0)).isType(SwappedPojo[][][].class);
+					assertObject(x3.get(0)).isType(SwappedObject[][][].class);
 					assertNull(x3n);
 					assertObject(x4).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
 					assertNull(x4n);
@@ -888,12 +888,12 @@ public class RrpcInterfaceTest {
 				}
 
 				@Override
-				public void setMultiParamsImplicitSwappedPojo(ImplicitSwappedPojo x1,ImplicitSwappedPojo[][][] x2,ImplicitSwappedPojo[][][] x2n,List<ImplicitSwappedPojo[][][]> x3,List<ImplicitSwappedPojo[][][]> x3n,Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x4,Map<ImplicitSwappedPojo,ImplicitSwappedPojo> x4n,Map<ImplicitSwappedPojo,List<ImplicitSwappedPojo[][][]>> x5,Map<ImplicitSwappedPojo,List<ImplicitSwappedPojo[][][]>> x5n) {
+				public void setMultiParamsImplicitSwappedObject(ImplicitSwappedObject x1,ImplicitSwappedObject[][][] x2,ImplicitSwappedObject[][][] x2n,List<ImplicitSwappedObject[][][]> x3,List<ImplicitSwappedObject[][][]> x3n,Map<ImplicitSwappedObject,ImplicitSwappedObject> x4,Map<ImplicitSwappedObject,ImplicitSwappedObject> x4n,Map<ImplicitSwappedObject,List<ImplicitSwappedObject[][][]>> x5,Map<ImplicitSwappedObject,List<ImplicitSwappedObject[][][]>> x5n) {
 					assertObject(x1).asJson().is("'"+SWAP+"'");
 					assertObject(x2).asJson().is("[[['"+SWAP+"',null],null],null]");
 					assertNull(x2n);
 					assertObject(x3).asJson().is("[[[['"+SWAP+"',null],null],null],null]");
-					assertObject(x3.get(0)).isType(ImplicitSwappedPojo[][][].class);
+					assertObject(x3.get(0)).isType(ImplicitSwappedObject[][][].class);
 					assertNull(x3n);
 					assertObject(x4).asJson().is("{'"+SWAP+"':'"+SWAP+"'}");
 					assertNull(x4n);
@@ -1144,33 +1144,33 @@ public class RrpcInterfaceTest {
 	// Swapped POJOs
... 1158 lines suppressed ...