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/03/08 17:55:35 UTC

[juneau] branch master updated: Standardize builder-based copy constructors.

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 f92adc7  Standardize builder-based copy constructors.
f92adc7 is described below

commit f92adc791d652f4d4c14d544762dc3f940b53b07
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Mon Mar 8 12:55:14 2021 -0500

    Standardize builder-based copy constructors.
---
 .../main/java/org/apache/juneau/config/Config.java |   6 +-
 .../org/apache/juneau/config/ConfigBuilder.java    |   8 +-
 .../juneau/config/store/ConfigClasspathStore.java  |   4 +-
 .../config/store/ConfigClasspathStoreBuilder.java  |   8 +-
 .../juneau/config/store/ConfigFileStore.java       |   4 +-
 .../config/store/ConfigFileStoreBuilder.java       |   8 +-
 .../juneau/config/store/ConfigMemoryStore.java     |   4 +-
 .../config/store/ConfigMemoryStoreBuilder.java     |   8 +-
 .../juneau/config/store/ConfigStoreBuilder.java    |   8 +-
 .../main/java/org/apache/juneau/jena/N3Parser.java |   4 +-
 .../java/org/apache/juneau/jena/N3Serializer.java  |   4 +-
 .../java/org/apache/juneau/jena/NTripleParser.java |   4 +-
 .../org/apache/juneau/jena/NTripleSerializer.java  |   4 +-
 .../java/org/apache/juneau/jena/RdfParser.java     |   6 +-
 .../org/apache/juneau/jena/RdfParserBuilder.java   |   8 +-
 .../java/org/apache/juneau/jena/RdfSerializer.java |   6 +-
 .../apache/juneau/jena/RdfSerializerBuilder.java   |   8 +-
 .../apache/juneau/jena/RdfXmlAbbrevSerializer.java |   4 +-
 .../java/org/apache/juneau/jena/RdfXmlParser.java  |   4 +-
 .../org/apache/juneau/jena/RdfXmlSerializer.java   |   4 +-
 .../java/org/apache/juneau/jena/TurtleParser.java  |   4 +-
 .../org/apache/juneau/jena/TurtleSerializer.java   |   4 +-
 .../juneau/BasicRuntimeExceptionBuilder.java       |  19 +-
 .../main/java/org/apache/juneau/BeanContext.java   |   4 +-
 .../java/org/apache/juneau/BeanContextBuilder.java |   8 +-
 .../org/apache/juneau/BeanTraverseBuilder.java     |   8 +-
 .../org/apache/juneau/BeanTraverseContext.java     |   4 +-
 .../src/main/java/org/apache/juneau/Context.java   |   6 +-
 .../java/org/apache/juneau/ContextBuilder.java     |  35 +---
 .../java/org/apache/juneau/ContextProperties.java  |   4 +-
 .../apache/juneau/ContextPropertiesBuilder.java    |  10 +-
 .../java/org/apache/juneau/annotation/Beanc.java   |   2 +-
 .../main/java/org/apache/juneau/csv/CsvParser.java |   8 +-
 .../org/apache/juneau/csv/CsvParserBuilder.java    |   8 +-
 .../java/org/apache/juneau/csv/CsvSerializer.java  |   8 +-
 .../apache/juneau/csv/CsvSerializerBuilder.java    |   8 +-
 .../org/apache/juneau/encoders/EncoderGroup.java   |   2 +-
 .../org/apache/juneau/html/HtmlDocSerializer.java  |   8 +-
 .../juneau/html/HtmlDocSerializerBuilder.java      |   8 +-
 .../java/org/apache/juneau/html/HtmlParser.java    |   6 +-
 .../org/apache/juneau/html/HtmlParserBuilder.java  |   8 +-
 .../juneau/html/HtmlSchemaDocSerializer.java       |   2 +-
 .../apache/juneau/html/HtmlSchemaSerializer.java   |  12 +-
 .../juneau/html/HtmlSchemaSerializerBuilder.java   |   8 +-
 .../org/apache/juneau/html/HtmlSerializer.java     |  14 +-
 .../apache/juneau/html/HtmlSerializerBuilder.java  |   8 +-
 .../juneau/html/HtmlStrippedDocSerializer.java     |   6 +-
 .../html/HtmlStrippedDocSerializerBuilder.java     |   8 +-
 .../org/apache/juneau/http/BasicStatusLine.java    |  12 +-
 .../apache/juneau/http/BasicStatusLineBuilder.java |  12 ++
 .../org/apache/juneau/http/header/HeaderList.java  |  18 +-
 .../juneau/http/header/HeaderListBuilder.java      |  17 +-
 .../java/org/apache/juneau/http/part/PartList.java |  18 +-
 .../apache/juneau/http/part/PartListBuilder.java   |  16 +-
 .../juneau/http/resource/HttpResourceBuilder.java  |   2 +-
 .../org/apache/juneau/http/response/Accepted.java  |  10 +
 .../juneau/http/response/AlreadyReported.java      |  10 +
 .../apache/juneau/http/response/BadRequest.java    |   5 +-
 .../juneau/http/response/BasicHttpException.java   |  11 +-
 .../juneau/http/response/BasicHttpResponse.java    |   9 +-
 .../org/apache/juneau/http/response/Conflict.java  |   5 +-
 .../org/apache/juneau/http/response/Continue.java  |  10 +
 .../org/apache/juneau/http/response/Created.java   |  10 +
 .../apache/juneau/http/response/EarlyHints.java    |  15 +-
 .../juneau/http/response/ExpectationFailed.java    |   5 +-
 .../juneau/http/response/FailedDependency.java     |   5 +-
 .../org/apache/juneau/http/response/Forbidden.java |   5 +-
 .../org/apache/juneau/http/response/Found.java     |  10 +
 .../java/org/apache/juneau/http/response/Gone.java |   5 +-
 .../juneau/http/response/HttpExceptionBuilder.java |  37 ++--
 .../juneau/http/response/HttpResponseBuilder.java  |  29 ++-
 .../http/response/HttpVersionNotSupported.java     |   5 +-
 .../org/apache/juneau/http/response/IMUsed.java    |  10 +
 .../juneau/http/response/InsufficientStorage.java  |   5 +-
 .../juneau/http/response/InternalServerError.java  |   5 +-
 .../juneau/http/response/LengthRequired.java       |   5 +-
 .../org/apache/juneau/http/response/Locked.java    |   5 +-
 .../apache/juneau/http/response/LoopDetected.java  |   5 +-
 .../juneau/http/response/MethodNotAllowed.java     |   5 +-
 .../juneau/http/response/MisdirectedRequest.java   |   5 +-
 .../juneau/http/response/MovedPermanently.java     |  10 +
 .../apache/juneau/http/response/MultiStatus.java   |  10 +
 .../juneau/http/response/MultipleChoices.java      |  10 +
 .../response/NetworkAuthenticationRequired.java    |   5 +-
 .../org/apache/juneau/http/response/NoContent.java |  10 +
 .../http/response/NonAuthoritiveInformation.java   |  10 +
 .../apache/juneau/http/response/NotAcceptable.java |   5 +-
 .../apache/juneau/http/response/NotExtended.java   |   5 +-
 .../org/apache/juneau/http/response/NotFound.java  |   5 +-
 .../juneau/http/response/NotImplemented.java       |   5 +-
 .../apache/juneau/http/response/NotModified.java   |  10 +
 .../java/org/apache/juneau/http/response/Ok.java   |  10 +
 .../juneau/http/response/PartialContent.java       |  10 +
 .../juneau/http/response/PayloadTooLarge.java      |   5 +-
 .../juneau/http/response/PermanentRedirect.java    |  10 +
 .../juneau/http/response/PreconditionFailed.java   |   5 +-
 .../juneau/http/response/PreconditionRequired.java |   5 +-
 .../apache/juneau/http/response/Processing.java    |  10 +
 .../juneau/http/response/RangeNotSatisfiable.java  |   5 +-
 .../http/response/RequestHeaderFieldsTooLarge.java |   5 +-
 .../apache/juneau/http/response/ResetContent.java  |  10 +
 .../org/apache/juneau/http/response/SeeOther.java  |  10 +
 .../juneau/http/response/ServiceUnavailable.java   |   5 +-
 .../juneau/http/response/SwitchingProtocols.java   |  10 +
 .../juneau/http/response/TemporaryRedirect.java    |  10 +
 .../juneau/http/response/TooManyRequests.java      |   5 +-
 .../apache/juneau/http/response/Unauthorized.java  |   5 +-
 .../http/response/UnavailableForLegalReasons.java  |   5 +-
 .../juneau/http/response/UnprocessableEntity.java  |   5 +-
 .../juneau/http/response/UnsupportedMediaType.java |   5 +-
 .../juneau/http/response/UpgradeRequired.java      |   5 +-
 .../apache/juneau/http/response/UriTooLong.java    |   5 +-
 .../org/apache/juneau/http/response/UseProxy.java  |  10 +
 .../http/response/VariantAlsoNegotiates.java       |   5 +-
 .../main/java/org/apache/juneau/jso/JsoParser.java |   6 +-
 .../org/apache/juneau/jso/JsoParserBuilder.java    |   8 +-
 .../java/org/apache/juneau/jso/JsoSerializer.java  |   6 +-
 .../apache/juneau/jso/JsoSerializerBuilder.java    |   8 +-
 .../java/org/apache/juneau/json/JsonParser.java    |   8 +-
 .../org/apache/juneau/json/JsonParserBuilder.java  |   8 +-
 .../apache/juneau/json/JsonSchemaSerializer.java   |  12 +-
 .../juneau/json/JsonSchemaSerializerBuilder.java   |   8 +-
 .../org/apache/juneau/json/JsonSerializer.java     |  14 +-
 .../apache/juneau/json/JsonSerializerBuilder.java  |   8 +-
 .../org/apache/juneau/json/SimpleJsonParser.java   |   6 +-
 .../juneau/json/SimpleJsonParserBuilder.java       |   8 +-
 .../apache/juneau/json/SimpleJsonSerializer.java   |   8 +-
 .../juneau/json/SimpleJsonSerializerBuilder.java   |   8 +-
 .../juneau/jsonschema/JsonSchemaGenerator.java     |   6 +-
 .../jsonschema/JsonSchemaGeneratorBuilder.java     |   8 +-
 .../org/apache/juneau/msgpack/MsgPackParser.java   |  10 +-
 .../juneau/msgpack/MsgPackParserBuilder.java       |   8 +-
 .../apache/juneau/msgpack/MsgPackSerializer.java   |  10 +-
 .../juneau/msgpack/MsgPackSerializerBuilder.java   |   8 +-
 .../java/org/apache/juneau/oapi/OpenApiParser.java |   6 +-
 .../apache/juneau/oapi/OpenApiParserBuilder.java   |   8 +-
 .../org/apache/juneau/oapi/OpenApiSerializer.java  |   8 +-
 .../juneau/oapi/OpenApiSerializerBuilder.java      |   8 +-
 .../juneau/parser/InputStreamParserBuilder.java    |   8 +-
 .../main/java/org/apache/juneau/parser/Parser.java |   8 +-
 .../org/apache/juneau/parser/ParserBuilder.java    |   8 +-
 .../java/org/apache/juneau/parser/ParserGroup.java |   2 +-
 .../apache/juneau/parser/ParserGroupBuilder.java   |   6 +-
 .../apache/juneau/parser/ReaderParserBuilder.java  |   8 +-
 .../apache/juneau/plaintext/PlainTextParser.java   |   6 +-
 .../juneau/plaintext/PlainTextParserBuilder.java   |   8 +-
 .../juneau/plaintext/PlainTextSerializer.java      |   6 +-
 .../plaintext/PlainTextSerializerBuilder.java      |   8 +-
 .../serializer/OutputStreamSerializerBuilder.java  |   8 +-
 .../org/apache/juneau/serializer/Serializer.java   |   4 +-
 .../juneau/serializer/SerializerBuilder.java       |   8 +-
 .../apache/juneau/serializer/SerializerGroup.java  |   2 +-
 .../juneau/serializer/SerializerGroupBuilder.java  |   2 +-
 .../juneau/serializer/WriterSerializerBuilder.java |   8 +-
 .../org/apache/juneau/soap/SoapXmlSerializer.java  |   6 +-
 .../juneau/soap/SoapXmlSerializerBuilder.java      |   8 +-
 .../java/org/apache/juneau/svl/VarResolver.java    |   6 +-
 .../org/apache/juneau/svl/VarResolverBuilder.java  |  20 +-
 .../org/apache/juneau/svl/VarResolverContext.java  |   2 +-
 .../main/java/org/apache/juneau/uon/UonParser.java |   8 +-
 .../org/apache/juneau/uon/UonParserBuilder.java    |   8 +-
 .../java/org/apache/juneau/uon/UonSerializer.java  |  10 +-
 .../apache/juneau/uon/UonSerializerBuilder.java    |   8 +-
 .../juneau/urlencoding/UrlEncodingParser.java      |   8 +-
 .../urlencoding/UrlEncodingParserBuilder.java      |   8 +-
 .../juneau/urlencoding/UrlEncodingSerializer.java  |  14 +-
 .../urlencoding/UrlEncodingSerializerBuilder.java  |   8 +-
 .../java/org/apache/juneau/utils/SearchArgs.java   |   4 +-
 .../org/apache/juneau/xml/XmlDocSerializer.java    |   2 +-
 .../main/java/org/apache/juneau/xml/XmlParser.java |   6 +-
 .../org/apache/juneau/xml/XmlParserBuilder.java    |   8 +-
 .../java/org/apache/juneau/xml/XmlSerializer.java  |  16 +-
 .../apache/juneau/xml/XmlSerializerBuilder.java    |   8 +-
 .../Topics/02.juneau-marshall/01.Serializers.html  |   2 +-
 .../07.MarshallConfigurableProperties.html         |   4 +-
 .../Topics/02.juneau-marshall/16.Recursion.html    |   2 +-
 .../29.SimpleVariableLanguage/01.SvlVariables.html |   2 +-
 .../29.SimpleVariableLanguage/02.VarResolvers.html |   4 +-
 .../juneau/examples/rest/ContentComboTestBase.java |   2 +-
 .../org/apache/juneau/examples/rest/TestUtils.java |   2 +-
 .../rest/test/client/ThirdPartyProxyTest.java      |  18 +-
 .../org/apache/juneau/rest/client/RestClient.java  |   8 +-
 .../juneau/rest/client/RestClientBuilder.java      |  12 +-
 .../apache/juneau/rest/mock/MockRestClient.java    |   2 +-
 .../juneau/rest/mock/MockRestClientBuilder.java    |   9 +-
 .../java/org/apache/juneau/AnnotationsTest.java    |   2 +-
 .../java/org/apache/juneau/BasicBeanTests.java     |   4 +-
 .../java/org/apache/juneau/BeanConfigTest.java     |   2 +-
 .../java/org/apache/juneau/BeanFilterTest.java     |   4 +-
 .../test/java/org/apache/juneau/BeanMapTest.java   |   8 +-
 .../java/org/apache/juneau/ComboRoundTripTest.java |  44 ++--
 .../java/org/apache/juneau/ComboSerializeTest.java |   2 +-
 .../java/org/apache/juneau/ContextCacheTest.java   |   4 +-
 .../org/apache/juneau/ContextPropertiesTest.java   |   4 +-
 .../java/org/apache/juneau/DynaBeanComboTest.java  |   4 +-
 .../test/java/org/apache/juneau/MaxIndentTest.java |  10 +-
 .../apache/juneau/ReadWriteOnlyPropertiesTest.java |  30 +--
 .../apache/juneau/XmlValidatorParserBuilder.java   |   4 -
 .../juneau/a/rttests/RoundTripBeanMapsTest.java    |  20 +-
 .../org/apache/juneau/a/rttests/RoundTripTest.java |  12 +-
 .../a/rttests/RoundTripTransformBeansTest.java     |  14 +-
 .../juneau/a/rttests/RoundTripTrimStringsTest.java |   4 +-
 .../apache/juneau/annotation/BeanIgnore_Test.java  |   4 +-
 .../apache/juneau/config/ConfigInterfaceTest.java  |   2 +-
 .../java/org/apache/juneau/config/ConfigTest.java  |   6 +-
 .../apache/juneau/encoders/EncoderGroupTest.java   |   4 +-
 .../org/apache/juneau/html/BasicHtml_Test.java     |   8 +-
 .../java/org/apache/juneau/html/Html_Test.java     |   6 +-
 .../juneau/http/remote/RrpcInterfaceTest.java      |  16 +-
 .../juneau/json/JsonParserEdgeCasesTest.java       |   8 +-
 .../org/apache/juneau/json/JsonParserTest.java     |   2 +-
 .../test/java/org/apache/juneau/json/JsonTest.java |   8 +-
 .../juneau/jsonschema/JsonSchemaGeneratorTest.java | 224 ++++++++++-----------
 .../apache/juneau/msgpack/MsgPackParserTest.java   |   2 +-
 .../org/apache/juneau/parser/ParserGroupTest.java  |   4 +-
 .../apache/juneau/rest/annotation/Body_Test.java   |   8 +-
 .../apache/juneau/rest/client/RestClient_Test.java |   4 +-
 .../juneau/serializer/ReaderObjectComboTest.java   |   2 +-
 .../juneau/serializer/SerializerGroupTest.java     |   4 +-
 .../juneau/serializer/UriResolutionTest.java       |  12 +-
 .../java/org/apache/juneau/testutils/XmlUtils.java |   2 +-
 .../apache/juneau/transform/AutoListSwapTest.java  |   4 +-
 .../apache/juneau/transform/AutoMapSwapTest.java   |   2 +-
 .../juneau/transform/AutoNumberSwapTest.java       |   2 +-
 .../juneau/transform/AutoObjectSwapTest.java       |   2 +-
 .../juneau/transforms/BeanDictionaryComboTest.java |   4 +-
 .../apache/juneau/transforms/BuilderComboTest.java |   4 +-
 .../transforms/ByteArrayBase64SwapComboTest.java   |   4 +-
 .../apache/juneau/transforms/DefaultSwapsTest.java |   6 +-
 .../transforms/SwapsAnnotationComboTest.java       |   2 +-
 .../java/org/apache/juneau/uon/UonParserTest.java  |   2 +-
 .../juneau/urlencoding/UrlEncodingParserTest.java  |   2 +-
 .../urlencoding/UrlEncodingSerializerTest.java     |  10 +-
 .../org/apache/juneau/utils/PojoQueryTest.java     |  82 ++++----
 .../java/org/apache/juneau/utils/PojoRestTest.java |   2 +-
 .../java/org/apache/juneau/xml/XmlContentTest.java |   4 +-
 236 files changed, 1146 insertions(+), 920 deletions(-)

diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
index 7fae5fe..5664d42 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
@@ -432,8 +432,8 @@ public final class Config extends Context implements ConfigEventListener, Writab
 	}
 
 	@Override /* Context */
-	public ConfigBuilder builder() {
-		return new ConfigBuilder(getContextProperties());
+	public ConfigBuilder copy() {
+		return new ConfigBuilder(this);
 	}
 
 	/**
@@ -455,7 +455,7 @@ public final class Config extends Context implements ConfigEventListener, Writab
 		beanSession = parser.createBeanSession();
 		encoder = cp.getInstance(CONFIG_encoder, ConfigEncoder.class).orElse(ConfigXorEncoder.INSTANCE);
 		varSession = cp.getInstance(CONFIG_varResolver, VarResolver.class).orElse(VarResolver.DEFAULT)
-			.builder()
+			.copy()
 			.vars(ConfigVar.class)
 			.bean(Config.class, this)
 			.build()
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
index 171994f..c119d22 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
@@ -52,12 +52,12 @@ public class ConfigBuilder extends ContextBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public ConfigBuilder(ContextProperties cp) {
-		super(cp);
+	public ConfigBuilder(Config copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
index b3eae66..73eceb9 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
@@ -62,8 +62,8 @@ public class ConfigClasspathStore extends ConfigStore {
 	}
 
 	@Override /* Context */
-	public ConfigClasspathStoreBuilder builder() {
-		return new ConfigClasspathStoreBuilder(getContextProperties());
+	public ConfigClasspathStoreBuilder copy() {
+		return new ConfigClasspathStoreBuilder(this);
 	}
 
 	private final ConcurrentHashMap<String,String> cache = new ConcurrentHashMap<>();
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
index ac84008..9a7704c 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
@@ -35,12 +35,12 @@ public class ConfigClasspathStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public ConfigClasspathStoreBuilder(ContextProperties cp) {
-		super(cp);
+	public ConfigClasspathStoreBuilder(ConfigClasspathStore copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
index 2c98934..bad1445 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
@@ -218,8 +218,8 @@ public class ConfigFileStore extends ConfigStore {
 	}
 
 	@Override /* Context */
-	public ConfigFileStoreBuilder builder() {
-		return new ConfigFileStoreBuilder(getContextProperties());
+	public ConfigFileStoreBuilder copy() {
+		return new ConfigFileStoreBuilder(this);
 	}
 
 	private final File dir;
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
index 350b721..c856479 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
@@ -39,12 +39,12 @@ public class ConfigFileStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public ConfigFileStoreBuilder(ContextProperties cp) {
-		super(cp);
+	public ConfigFileStoreBuilder(ConfigFileStore copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
index aa92bb4..7dcf7c0 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
@@ -58,8 +58,8 @@ public class ConfigMemoryStore extends ConfigStore {
 	}
 
 	@Override /* Context */
-	public ConfigMemoryStoreBuilder builder() {
-		return new ConfigMemoryStoreBuilder(getContextProperties());
+	public ConfigMemoryStoreBuilder copy() {
+		return new ConfigMemoryStoreBuilder(this);
 	}
 
 	private final ConcurrentHashMap<String,String> cache = new ConcurrentHashMap<>();
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
index 6b5657c..876b899 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
@@ -35,12 +35,12 @@ public class ConfigMemoryStoreBuilder extends ConfigStoreBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public ConfigMemoryStoreBuilder(ContextProperties cp) {
-		super(cp);
+	public ConfigMemoryStoreBuilder(ConfigMemoryStore copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
index 3e0b1ac..f4a08a7 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
@@ -35,12 +35,12 @@ public abstract class ConfigStoreBuilder extends ContextBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public ConfigStoreBuilder(ContextProperties cp) {
-		super(cp);
+	public ConfigStoreBuilder(ConfigStore copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/N3Parser.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/N3Parser.java
index d8a3fcd..33273b0 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/N3Parser.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/N3Parser.java
@@ -36,7 +36,7 @@ public class N3Parser extends RdfParser {
 	 * Instantiates a new clean-slate {@link RdfParserBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfParserBuilder} object.
@@ -52,7 +52,7 @@ public class N3Parser extends RdfParser {
 	 */
 	public N3Parser(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_N3)
 				.build(),
 			"text/n3"
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/N3Serializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/N3Serializer.java
index 6cb81fc..8a14b20 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/N3Serializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/N3Serializer.java
@@ -36,7 +36,7 @@ public class N3Serializer extends RdfSerializer {
 	 * Instantiates a new clean-slate {@link RdfSerializerBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfSerializerBuilder} object.
@@ -52,7 +52,7 @@ public class N3Serializer extends RdfSerializer {
 	 */
 	public N3Serializer(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_N3)
 				.build(),
 			"text/n3", (String)null
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/NTripleParser.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/NTripleParser.java
index 98f9180..e5a955d 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/NTripleParser.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/NTripleParser.java
@@ -36,7 +36,7 @@ public class NTripleParser extends RdfParser {
 	 * Instantiates a new clean-slate {@link RdfParserBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfParserBuilder} object.
@@ -52,7 +52,7 @@ public class NTripleParser extends RdfParser {
 	 */
 	public NTripleParser(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_NTRIPLE)
 				.build(),
 			"text/n-triple"
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/NTripleSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/NTripleSerializer.java
index ee21e56..7303afb 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/NTripleSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/NTripleSerializer.java
@@ -36,7 +36,7 @@ public class NTripleSerializer extends RdfSerializer {
 	 * Instantiates a new clean-slate {@link RdfSerializerBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfSerializerBuilder} object.
@@ -52,7 +52,7 @@ public class NTripleSerializer extends RdfSerializer {
 	 */
 	public NTripleSerializer(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_NTRIPLE)
 				.build(),
 			"text/n-triple", (String)null
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 6a8edf8..142d3a0 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
@@ -167,8 +167,8 @@ public class RdfParser extends ReaderParser implements RdfCommon, RdfMetaProvide
 	}
 
 	@Override /* Context */
-	public RdfParserBuilder builder() {
-		return new RdfParserBuilder(getContextProperties());
+	public RdfParserBuilder copy() {
+		return new RdfParserBuilder(this);
 	}
 
 	/**
@@ -178,7 +178,7 @@ public class RdfParser extends ReaderParser implements RdfCommon, RdfMetaProvide
 	 * This is equivalent to simply calling <code><jk>new</jk> RdfParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfParserBuilder} object.
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
index 2f883d9..1b1b212 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
@@ -42,12 +42,12 @@ public class RdfParserBuilder extends ReaderParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public RdfParserBuilder(ContextProperties cp) {
-		super(cp);
+	public RdfParserBuilder(RdfParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 a45bfb2..3f42b98 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
@@ -335,8 +335,8 @@ public class RdfSerializer extends WriterSerializer implements RdfCommon, RdfMet
 	}
 
 	@Override /* Context */
-	public RdfSerializerBuilder builder() {
-		return new RdfSerializerBuilder(getContextProperties());
+	public RdfSerializerBuilder copy() {
+		return new RdfSerializerBuilder(this);
 	}
 
 	/**
@@ -346,7 +346,7 @@ public class RdfSerializer extends WriterSerializer implements RdfCommon, RdfMet
 	 * This is equivalent to simply calling <code><jk>new</jk> RdfSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
index 24c96b2..ef311ba 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
@@ -44,12 +44,12 @@ public class RdfSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public RdfSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public RdfSerializerBuilder(RdfSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlAbbrevSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlAbbrevSerializer.java
index e5f7982..55b8386 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlAbbrevSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlAbbrevSerializer.java
@@ -36,7 +36,7 @@ public class RdfXmlAbbrevSerializer extends RdfSerializer {
 	 * Instantiates a new clean-slate {@link RdfSerializerBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfSerializerBuilder} object.
@@ -52,7 +52,7 @@ public class RdfXmlAbbrevSerializer extends RdfSerializer {
 	 */
 	public RdfXmlAbbrevSerializer(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_RDF_XML_ABBREV)
 				.build(),
 			"text/xml+rdf", "text/xml+rdf+abbrev,text/xml+rdf;q=0.9"
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlParser.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlParser.java
index 6c7b523..3129d05 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlParser.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlParser.java
@@ -36,7 +36,7 @@ public class RdfXmlParser extends RdfParser {
 	 * Instantiates a new clean-slate {@link RdfParserBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfParserBuilder} object.
@@ -52,7 +52,7 @@ public class RdfXmlParser extends RdfParser {
 	 */
 	public RdfXmlParser(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_RDF_XML)
 				.build(),
 			"text/xml+rdf"
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlSerializer.java
index 0effac3..183d628 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfXmlSerializer.java
@@ -36,7 +36,7 @@ public class RdfXmlSerializer extends RdfSerializer {
 	 * Instantiates a new clean-slate {@link RdfSerializerBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfSerializerBuilder} object.
@@ -52,7 +52,7 @@ public class RdfXmlSerializer extends RdfSerializer {
 	 */
 	public RdfXmlSerializer(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_RDF_XML)
 				.build(),
 			"text/xml+rdf", "text/xml+rdf,text/xml+rdf+abbrev;q=0.9"
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/TurtleParser.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/TurtleParser.java
index dcb64a7..41e04c6 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/TurtleParser.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/TurtleParser.java
@@ -36,7 +36,7 @@ public class TurtleParser extends RdfParser {
 	 * Instantiates a new clean-slate {@link RdfParserBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfParserBuilder} object.
@@ -52,7 +52,7 @@ public class TurtleParser extends RdfParser {
 	 */
 	public TurtleParser(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_TURTLE)
 				.build(),
 			"text/turtle"
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/TurtleSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/TurtleSerializer.java
index ceea11a..df76778 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/TurtleSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/TurtleSerializer.java
@@ -36,7 +36,7 @@ public class TurtleSerializer extends RdfSerializer {
 	 * Instantiates a new clean-slate {@link RdfSerializerBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link RdfSerializerBuilder} object.
@@ -52,7 +52,7 @@ public class TurtleSerializer extends RdfSerializer {
 	 */
 	public TurtleSerializer(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.set(RDF_language, LANG_TURTLE)
 				.build(),
 			"text/turtle", (String)null
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicRuntimeExceptionBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicRuntimeExceptionBuilder.java
index 3d50adc..6933aa6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicRuntimeExceptionBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BasicRuntimeExceptionBuilder.java
@@ -27,16 +27,19 @@ public class BasicRuntimeExceptionBuilder {
 	boolean unmodifiable;
 
 	/**
-	 * Copies the values from the specified exception.
+	 * Default constructor.
+	 */
+	public BasicRuntimeExceptionBuilder() {}
+
+	/**
+	 * Copy constructor.
 	 *
-	 * @param value The exception to copy from.
-	 * @return This object (for method chaining).
+	 * @param copyFrom The bean to copy from.
 	 */
-	public BasicRuntimeExceptionBuilder copyFrom(BasicRuntimeException value) {
-		message = value.getMessage();
-		causedBy = value.getCause();
-		unmodifiable = value.unmodifiable;
-		return this;
+	public BasicRuntimeExceptionBuilder(BasicRuntimeException copyFrom) {
+		message = copyFrom.getMessage();
+		causedBy = copyFrom.getCause();
+		unmodifiable = copyFrom.unmodifiable;
 	}
 
 	/**
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 ba253e2..f018f1d 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
@@ -2180,8 +2180,8 @@ public class BeanContext extends Context implements MetaProvider {
 	}
 
 	@Override /* Context */
-	public BeanContextBuilder builder() {
-		return new BeanContextBuilder(getContextProperties());
+	public BeanContextBuilder copy() {
+		return new BeanContextBuilder(this);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index fd7f355..da3eb15 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -76,12 +76,12 @@ public class BeanContextBuilder extends ContextBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public BeanContextBuilder(ContextProperties cp) {
-		super(cp);
+	public BeanContextBuilder(BeanContext copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
index c30c047..e18f0ea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
@@ -37,12 +37,12 @@ public class BeanTraverseBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public BeanTraverseBuilder(ContextProperties cp) {
-		super(cp);
+	public BeanTraverseBuilder(BeanTraverseContext copyFrom) {
+		super(copyFrom);
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
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 0021ed8..0159f4b 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
@@ -278,8 +278,8 @@ public abstract class BeanTraverseContext extends BeanContext {
 	}
 
 	@Override /* Context */
-	public BeanTraverseBuilder builder() {
-		return null;
+	public BeanTraverseBuilder copy() {
+		return new BeanTraverseBuilder(this);
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index aadaf42..151b0dd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -320,7 +320,7 @@ public abstract class Context {
 	public static final String CONTEXT_timeZone = PREFIX + ".timeZone.s";
 
 
-	private final ContextProperties properties;
+	final ContextProperties properties;
 	private final int identityCode;
 
 	private final boolean debug;
@@ -377,8 +377,8 @@ public abstract class Context {
 	 *
 	 * @return A new ContextBuilder object.
 	 */
-	public ContextBuilder builder() {
-		return null;
+	public ContextBuilder copy() {
+		throw new UnsupportedOperationException();  // Can't copy an abstract class.
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
index 1dcad42..465d8ea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
@@ -58,39 +58,12 @@ public abstract class ContextBuilder {
 	}
 
 	/**
-	 * Constructor that takes in an initial set of configuration properties.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public ContextBuilder(ContextProperties cp) {
-		if (cp == null)
-			cp = ContextProperties.DEFAULT;
-		this.cpb = cp.builder();
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * <p>
-	 * Used in cases where multiple context builder are sharing the same property store builder.
-	 * <br>(e.g. <c>HtmlDocBuilder</c>)
-	 *
-	 * @param cpb The property store builder to use.
-	 */
-	protected ContextBuilder(ContextPropertiesBuilder cpb) {
-		this.cpb = cpb;
-	}
-
-	/**
-	 * Returns access to the inner property store builder.
-	 *
-	 * <p>
-	 * Used in conjunction with {@link #ContextBuilder(ContextPropertiesBuilder)} when builders share property store builders.
-	 *
-	 * @return The inner property store builder.
-	 */
-	protected ContextPropertiesBuilder getContextPropertiesBuilder() {
-		return cpb;
+	public ContextBuilder(Context copyFrom) {
+		this.cpb = copyFrom == null ? ContextProperties.DEFAULT.copy() : copyFrom.properties.copy();
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextProperties.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextProperties.java
index 5a1cea2..c97dce6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextProperties.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextProperties.java
@@ -246,7 +246,7 @@ public final class ContextProperties {
 	 *
 	 * @return A new property store builder.
 	 */
-	public ContextPropertiesBuilder builder() {
+	public ContextPropertiesBuilder copy() {
 		return new ContextPropertiesBuilder(this);
 	}
 
@@ -614,7 +614,7 @@ public final class ContextProperties {
 			this.hashCode = this.properties.hashCode();
 		}
 
-		PropertyGroupBuilder builder() {
+		PropertyGroupBuilder copy() {
 			return new PropertyGroupBuilder(properties);
 		}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextPropertiesBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextPropertiesBuilder.java
index 7f49ad8..b4d3dde 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextPropertiesBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextPropertiesBuilder.java
@@ -50,14 +50,14 @@ public class ContextPropertiesBuilder {
 	// Previously-created property store.
 	private volatile ContextProperties properties;
 
-	// Called by ContextProperties.builder()
+	/** Default Constructor */
+	ContextPropertiesBuilder() {}
+
+	/** Copy Constructor */
 	ContextPropertiesBuilder(ContextProperties cp) {
 		apply(cp);
 	}
 
-	// Called by ContextProperties.create()
-	ContextPropertiesBuilder() {}
-
 	/**
 	 * Creates a new {@link ContextProperties} based on the values in this builder.
 	 *
@@ -95,7 +95,7 @@ public class ContextPropertiesBuilder {
 				PropertyGroupBuilder g1 = this.groups.get(gName);
 				PropertyGroup g2 = e.getValue();
 				if (g1 == null)
-					this.groups.put(gName, g2.builder());
+					this.groups.put(gName, g2.copy());
 				else
 					g1.apply(g2);
 			}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Beanc.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Beanc.java
index 725e04f..4f83b5b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Beanc.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Beanc.java
@@ -100,7 +100,7 @@ public @interface Beanc {
 	 * <p class='bpcode w800'>
 	 *		<jc>// Parsing into a read-only bean.</jc>
 	 *		String <jv>json</jv> = <js>"{name:'John Smith',age:45}"</js>;
-	 *		Person <jv>person</jv> = JsonParser.<jsf>DEFAULT</jsf>.builder().applyAnnotations(MyConfig.<jk>class</jk>).build().parse(<jv>json</jv>);
+	 *		Person <jv>person</jv> = JsonParser.<jsf>DEFAULT</jsf>.copy().applyAnnotations(MyConfig.<jk>class</jk>).build().parse(<jv>json</jv>);
 	 *		String <jv>name</jv> = <jv>person</jv>.getName();  <jc>// "John Smith"</jc>
 	 *		<jk>int</jk> <jv>age</jv> = <jv>person</jv>.getAge();   <jc>// 45</jc>
 	 * </p>
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 fd5db08..f743113 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
@@ -57,15 +57,15 @@ public class CsvParser extends ReaderParser implements CsvMetaProvider, CsvCommo
 	}
 
 	@Override /* Context */
-	public CsvParserBuilder builder() {
-		return new CsvParserBuilder(getContextProperties());
+	public CsvParserBuilder copy() {
+		return new CsvParserBuilder(this);
 	}
 
 	/**
 	 * Instantiates a new clean-slate {@link CsvParserBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link CsvParserBuilder} object.
@@ -118,7 +118,7 @@ public class CsvParser extends ReaderParser implements CsvMetaProvider, CsvCommo
 	public OMap toMap() {
 		return super.toMap()
 			.a(
-				"CsvParser", 
+				"CsvParser",
 				OMap
 					.create()
 					.filtered()
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
index b9ef523..011f404 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
@@ -38,12 +38,12 @@ public class CsvParserBuilder extends ReaderParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public CsvParserBuilder(ContextProperties cp) {
-		super(cp);
+	public CsvParserBuilder(CsvParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 8624bb5..ae8d7ae 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
@@ -57,8 +57,8 @@ public final class CsvSerializer extends WriterSerializer implements CsvMetaProv
 	}
 
 	@Override /* Context */
-	public CsvSerializerBuilder builder() {
-		return new CsvSerializerBuilder(getContextProperties());
+	public CsvSerializerBuilder copy() {
+		return new CsvSerializerBuilder(this);
 	}
 
 	/**
@@ -68,7 +68,7 @@ public final class CsvSerializer extends WriterSerializer implements CsvMetaProv
 	 * This is equivalent to simply calling <code><jk>new</jk> CsvSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link CsvSerializerBuilder} object.
@@ -121,7 +121,7 @@ public final class CsvSerializer extends WriterSerializer implements CsvMetaProv
 	public OMap toMap() {
 		return super.toMap()
 			.a(
-				"CsvSerializer", 
+				"CsvSerializer",
 				OMap
 					.create()
 					.filtered()
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
index 0cf29d6..57f6e19 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
@@ -38,12 +38,12 @@ public class CsvSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public CsvSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public CsvSerializerBuilder(CsvSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
index 24f9500..690a162 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderGroup.java
@@ -86,7 +86,7 @@ public final class EncoderGroup {
 	 *
 	 * @return A new {@link EncoderGroupBuilder} initialized to this group.
 	 */
-	public EncoderGroupBuilder builder() {
+	public EncoderGroupBuilder copy() {
 		return new EncoderGroupBuilder(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 d5aefcf..3deaea9 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
@@ -782,8 +782,8 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	}
 
 	@Override /* Context */
-	public HtmlDocSerializerBuilder builder() {
-		return new HtmlDocSerializerBuilder(getContextProperties());
+	public HtmlDocSerializerBuilder copy() {
+		return new HtmlDocSerializerBuilder(this);
 	}
 
 	/**
@@ -793,7 +793,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 * This is equivalent to simply calling <code><jk>new</jk> HtmlDocSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link HtmlDocSerializerBuilder} object.
@@ -815,7 +815,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	@Override /* XmlSerializer */
 	public HtmlSerializer getSchemaSerializer() {
 		if (schemaSerializer == null)
-			schemaSerializer = builder().build(HtmlSchemaDocSerializer.class);
+			schemaSerializer = copy().build(HtmlSchemaDocSerializer.class);
 		return schemaSerializer;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
index bb6f618..97940c6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
@@ -40,12 +40,12 @@ public class HtmlDocSerializerBuilder extends HtmlStrippedDocSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public HtmlDocSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public HtmlDocSerializerBuilder(HtmlDocSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 fc31a87..2814732 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
@@ -68,8 +68,8 @@ public class HtmlParser extends XmlParser implements HtmlMetaProvider, HtmlCommo
 	}
 
 	@Override /* Context */
-	public HtmlParserBuilder builder() {
-		return new HtmlParserBuilder(getContextProperties());
+	public HtmlParserBuilder copy() {
+		return new HtmlParserBuilder(this);
 	}
 
 	/**
@@ -79,7 +79,7 @@ public class HtmlParser extends XmlParser implements HtmlMetaProvider, HtmlCommo
 	 * This is equivalent to simply calling <code><jk>new</jk> HtmlParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link HtmlParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
index 139aa41..3fcb57c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
@@ -41,12 +41,12 @@ public class HtmlParserBuilder extends XmlParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public HtmlParserBuilder(ContextProperties cp) {
-		super(cp);
+	public HtmlParserBuilder(HtmlParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 adf4412..af96c2f 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
@@ -80,7 +80,7 @@ public final class HtmlSchemaDocSerializer extends HtmlDocSerializer {
 	 */
 	public HtmlSchemaDocSerializer(ContextProperties cp, String produces, String accept) {
 		super(
-			cp.builder()
+			cp.copy()
 				.setDefault(BEANTRAVERSE_detectRecursions, true)
 				.setDefault(BEANTRAVERSE_ignoreRecursions, true)
 				.build(),
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 54b1db2..2d87142 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
@@ -77,7 +77,7 @@ public class HtmlSchemaSerializer extends HtmlSerializer {
 		 */
 		public Readable(ContextProperties cp) {
 			super(
-				cp.builder().setDefault(WSERIALIZER_useWhitespace, true).build()
+				cp.copy().setDefault(WSERIALIZER_useWhitespace, true).build()
 			);
 		}
 	}
@@ -92,7 +92,7 @@ public class HtmlSchemaSerializer extends HtmlSerializer {
 		 */
 		public Simple(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.build()
 				);
@@ -109,7 +109,7 @@ public class HtmlSchemaSerializer extends HtmlSerializer {
 		 */
 		public SimpleReadable(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.setDefault(WSERIALIZER_useWhitespace, true)
 					.build()
@@ -131,7 +131,7 @@ public class HtmlSchemaSerializer extends HtmlSerializer {
 	 */
 	public HtmlSchemaSerializer(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.setDefault(BEANTRAVERSE_detectRecursions, true)
 				.setDefault(BEANTRAVERSE_ignoreRecursions, true)
 				.build(),
@@ -142,8 +142,8 @@ public class HtmlSchemaSerializer extends HtmlSerializer {
 	}
 
 	@Override /* Context */
-	public HtmlSchemaSerializerBuilder builder() {
-		return new HtmlSchemaSerializerBuilder(getContextProperties());
+	public HtmlSchemaSerializerBuilder copy() {
+		return new HtmlSchemaSerializerBuilder(this);
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
index 7ee4028..12f9826 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
@@ -44,12 +44,12 @@ public class HtmlSchemaSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public HtmlSchemaSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public HtmlSchemaSerializerBuilder(HtmlSchemaSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 3358576..5403086 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
@@ -74,7 +74,7 @@ import org.apache.juneau.xml.*;
  * 	HtmlSerializer serializer = <jk>new</jk> HtmlSerializerBuider().ws().build();
  *
  * 	<jc>// Same as above, except uses cloning</jc>
- * 	HtmlSerializer serializer = HtmlSerializer.<jsf>DEFAULT</jsf>.builder().ws().build();
+ * 	HtmlSerializer serializer = HtmlSerializer.<jsf>DEFAULT</jsf>.copy().ws().build();
  *
  * 	<jc>// Serialize POJOs to HTML</jc>
  *
@@ -634,7 +634,7 @@ public class HtmlSerializer extends XmlSerializer implements HtmlMetaProvider, H
 		 */
 		public Sq(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.build()
 			);
@@ -651,7 +651,7 @@ public class HtmlSerializer extends XmlSerializer implements HtmlMetaProvider, H
 		 */
 		public SqReadable(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.setDefault(WSERIALIZER_useWhitespace, true)
 					.build()
@@ -724,8 +724,8 @@ public class HtmlSerializer extends XmlSerializer implements HtmlMetaProvider, H
 	}
 
 	@Override /* Context */
-	public HtmlSerializerBuilder builder() {
-		return new HtmlSerializerBuilder(getContextProperties());
+	public HtmlSerializerBuilder copy() {
+		return new HtmlSerializerBuilder(this);
 	}
 
 	/**
@@ -735,7 +735,7 @@ public class HtmlSerializer extends XmlSerializer implements HtmlMetaProvider, H
 	 * This is equivalent to simply calling <code><jk>new</jk> HtmlSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link HtmlSerializerBuilder} object.
@@ -761,7 +761,7 @@ public class HtmlSerializer extends XmlSerializer implements HtmlMetaProvider, H
 	 */
 	public HtmlSerializer getSchemaSerializer() {
 		if (schemaSerializer == null)
-			schemaSerializer = builder().build(HtmlSchemaSerializer.class);
+			schemaSerializer = copy().build(HtmlSchemaSerializer.class);
 		return schemaSerializer;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
index 267dea4..b1d569e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
@@ -40,12 +40,12 @@ public class HtmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public HtmlSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public HtmlSerializerBuilder(HtmlSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 7788b3c..1bc1dbf 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
@@ -89,8 +89,8 @@ public class HtmlStrippedDocSerializer extends HtmlSerializer {
 	}
 
 	@Override /* Context */
-	public HtmlStrippedDocSerializerBuilder builder() {
-		return new HtmlStrippedDocSerializerBuilder(getContextProperties());
+	public HtmlStrippedDocSerializerBuilder copy() {
+		return new HtmlStrippedDocSerializerBuilder(this);
 	}
 
 	/**
@@ -100,7 +100,7 @@ public class HtmlStrippedDocSerializer extends HtmlSerializer {
 	 * This is equivalent to simply calling <code><jk>new</jk> HtmlStrippedDocSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link HtmlStrippedDocSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
index 3907e87..174f379 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
@@ -38,12 +38,12 @@ public class HtmlStrippedDocSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public HtmlStrippedDocSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public HtmlStrippedDocSerializerBuilder(HtmlStrippedDocSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicStatusLine.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicStatusLine.java
index c9fda7a..56cdaa9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicStatusLine.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicStatusLine.java
@@ -27,10 +27,10 @@ public class BasicStatusLine implements StatusLine {
 
 	private ProtocolVersion DEFAULT_PROTOCOL_VERSION = new ProtocolVersion("HTTP", 1, 1);
 
-	private final ProtocolVersion protocolVersion;
-	private final int statusCode;
-	private final String reasonPhrase;
-	private final Locale locale;
+	final ProtocolVersion protocolVersion;
+	final int statusCode;
+	final String reasonPhrase;
+	final Locale locale;
 
 	/**
 	 * Instantiates a new builder for this bean.
@@ -64,8 +64,8 @@ public class BasicStatusLine implements StatusLine {
 	 *
 	 * @return A new builder object.
 	 */
-	public BasicStatusLineBuilder builder() {
-		return create().protocolVersion(protocolVersion).statusCode(statusCode).reasonPhrase(reasonPhrase);
+	public BasicStatusLineBuilder copy() {
+		return new BasicStatusLineBuilder(this);
 	}
 
 	@Override /* StatusLine */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicStatusLineBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicStatusLineBuilder.java
index 702178e..3747e1e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicStatusLineBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicStatusLineBuilder.java
@@ -36,6 +36,18 @@ public class BasicStatusLineBuilder {
 	public BasicStatusLineBuilder() {}
 
 	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The bean to copy from.
+	 */
+	public BasicStatusLineBuilder(BasicStatusLine copyFrom) {
+		protocolVersion = copyFrom.protocolVersion;
+		statusCode = copyFrom.statusCode;
+		reasonPhrase = copyFrom.reasonPhrase;
+		locale = copyFrom.locale;
+	}
+
+	/**
 	 * Creates a new {@link BasicStatusLine} bean based on the contents of this builder.
 	 *
 	 * @return A new {@link BasicStatusLine} bean.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
index 00baa8f..43db16a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
@@ -38,7 +38,7 @@ public class HeaderList implements Iterable<Header> {
 	/** Predefined instance. */
 	public static final HeaderList EMPTY = new HeaderList();
 
-	private final List<Header> headers;
+	final List<Header> headers;
 
 	/**
 	 * Instantiates a new builder for this bean.
@@ -129,8 +129,8 @@ public class HeaderList implements Iterable<Header> {
 	 *
 	 * @return A new builder object.
 	 */
-	public HeaderListBuilder builder() {
-		return create().add(headers);
+	public HeaderListBuilder copy() {
+		return new HeaderListBuilder(this);
 	}
 
 	/**
@@ -273,18 +273,6 @@ public class HeaderList implements Iterable<Header> {
 		return new BasicListHeaderIterator(headers, name);
 	}
 
-	/**
-	 * Returns a copy of this object.
-	 *
-	 * <p>
-	 * Individual header values are not cloned.
-	 *
-	 * @return A copy of this object.
-	 */
-	public HeaderList copy() {
-		return builder().build();
-	}
-
 	@Override /* Iterable */
 	public Iterator<Header> iterator() {
 		return getAll().iterator();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderListBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderListBuilder.java
index bb42e7e..7145c09 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderListBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderListBuilder.java
@@ -29,7 +29,7 @@ import org.apache.juneau.svl.*;
 @FluentSetters
 public class HeaderListBuilder {
 
-	final List<Header> headers = new ArrayList<>();
+	final List<Header> headers;
 	private volatile VarResolver varResolver;
 
 	/** Predefined instance. */
@@ -38,7 +38,18 @@ public class HeaderListBuilder {
 	/**
 	 * Constructor.
 	 */
-	public HeaderListBuilder() {}
+	public HeaderListBuilder() {
+		headers = new ArrayList<>();
+	}
+
+	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The bean to copy from.
+	 */
+	public HeaderListBuilder(HeaderList copyFrom) {
+		headers = new ArrayList<>(copyFrom.headers);
+	}
 
 	/**
 	 * Creates a new {@link HeaderList} bean based on the contents of this builder.
@@ -427,7 +438,7 @@ public class HeaderListBuilder {
 			o = ((Supplier<?>)o).get();
 		return o;
 	}
-	
+
 	// <FluentSetters>
 
 	// </FluentSetters>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
index 342d4e6..75dde84 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
@@ -31,7 +31,7 @@ public class PartList implements Iterable<Part> {
 	/** Predefined instance. */
 	public static final PartList EMPTY = create().build();
 
-	private final List<Part> parts;
+	final List<Part> parts;
 
 	/**
 	 * Instantiates a new builder for this bean.
@@ -122,8 +122,8 @@ public class PartList implements Iterable<Part> {
 	 *
 	 * @return A new builder object.
 	 */
-	public PartListBuilder builder() {
-		return create().add(parts);
+	public PartListBuilder copy() {
+		return new PartListBuilder(this);
 	}
 
 	/**
@@ -215,18 +215,6 @@ public class PartList implements Iterable<Part> {
 		return false;
 	}
 
-	/**
-	 * Returns a copy of this object.
-	 *
-	 * <p>
-	 * Individual header values are not cloned.
-	 *
-	 * @return A copy of this object.
-	 */
-	public PartList copy() {
-		return builder().build();
-	}
-
 	@Override /* Iterable */
 	public Iterator<Part> iterator() {
 		return getAll().iterator();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartListBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartListBuilder.java
index be5c175..f37513f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartListBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartListBuilder.java
@@ -28,7 +28,7 @@ import org.apache.juneau.svl.*;
 @FluentSetters
 public class PartListBuilder {
 
-	final List<Part> parts = new ArrayList<>();
+	final List<Part> parts;
 	private volatile VarResolver varResolver;
 
 	/** Predefined instance. */
@@ -37,7 +37,19 @@ public class PartListBuilder {
 	/**
 	 * Constructor.
 	 */
-	public PartListBuilder() {}
+	public PartListBuilder() {
+		parts = new ArrayList<>();
+	}
+
+	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The bean to copy from.
+	 */
+	public PartListBuilder(PartList copyFrom) {
+		parts = new ArrayList<>(copyFrom.parts);
+
+	}
 
 	/**
 	 * Creates a new {@link PartList} bean based on the contents of this builder.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/HttpResourceBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/HttpResourceBuilder.java
index b7332f4..a3f565e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/HttpResourceBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/HttpResourceBuilder.java
@@ -457,7 +457,7 @@ public class HttpResourceBuilder<T extends BasicResource> {
 
 	private HeaderListBuilder headersBuilder() {
 		if (headersBuilder == null) {
-			headersBuilder = headers == null ? HeaderList.create() : headers.builder();
+			headersBuilder = headers == null ? HeaderList.create() : headers.copy();
 			headers = null;
 		}
 		return headersBuilder;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Accepted.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Accepted.java
index d7c32d4..daebd52 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Accepted.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Accepted.java
@@ -73,4 +73,14 @@ public class Accepted extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<Accepted> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/AlreadyReported.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/AlreadyReported.java
index 3493631..2d95b0a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/AlreadyReported.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/AlreadyReported.java
@@ -72,4 +72,14 @@ public class AlreadyReported extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<AlreadyReported> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BadRequest.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BadRequest.java
index bb935ef..5addac2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BadRequest.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BadRequest.java
@@ -116,7 +116,8 @@ public class BadRequest extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<BadRequest> builder() {
-		return super.builder(BadRequest.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<BadRequest> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BasicHttpException.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
index 234b365..f271cde 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
@@ -132,13 +132,12 @@ public class BasicHttpException extends BasicRuntimeException implements HttpRes
 	}
 
 	/**
-	 * Creates a builder for this class initialized with the contents of this exception.
+	 * Creates a builder for this class initialized with the contents of this bean.
 	 *
-	 * @param implClass The subclass that the builder is going to create.
 	 * @return A new builder bean.
 	 */
-	public <T extends BasicHttpException> HttpExceptionBuilder<T> builder(Class<T> implClass) {
-		return create(implClass).copyFrom(this);
+	public HttpExceptionBuilder<? extends BasicHttpException> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 
 	/**
@@ -410,7 +409,7 @@ public class BasicHttpException extends BasicRuntimeException implements HttpRes
 	private BasicStatusLineBuilder statusLineBuilder() {
 		assertModifiable();
 		if (statusLineBuilder == null) {
-			statusLineBuilder = statusLine.builder();
+			statusLineBuilder = statusLine.copy();
 			statusLine = null;
 		}
 		return statusLineBuilder;
@@ -419,7 +418,7 @@ public class BasicHttpException extends BasicRuntimeException implements HttpRes
 	private HeaderListBuilder headerListBuilder() {
 		assertModifiable();
 		if (headerListBuilder == null) {
-			headerListBuilder = headerList.builder();
+			headerListBuilder = headerList.copy();
 			headerList = null;
 		}
 		return headerListBuilder;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BasicHttpResponse.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BasicHttpResponse.java
index f2d0838..4468945 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BasicHttpResponse.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/BasicHttpResponse.java
@@ -88,11 +88,10 @@ public class BasicHttpResponse implements HttpResponse {
 	/**
 	 * Creates a builder for this class initialized with the contents of this bean.
 	 *
-	 * @param implClass The subclass that the builder is going to create.
 	 * @return A new builder bean.
 	 */
-	public <T extends BasicHttpResponse> HttpResponseBuilder<T> builder(Class<T> implClass) {
-		return create(implClass).copyFrom(this);
+	public HttpResponseBuilder<? extends BasicHttpResponse> copy() {
+		return new HttpResponseBuilder<>(this);
 	}
 
 	/**
@@ -289,7 +288,7 @@ public class BasicHttpResponse implements HttpResponse {
 	private BasicStatusLineBuilder statusLineBuilder() {
 		assertModifiable();
 		if (statusLineBuilder == null) {
-			statusLineBuilder = statusLine.builder();
+			statusLineBuilder = statusLine.copy();
 			statusLine = null;
 		}
 		return statusLineBuilder;
@@ -298,7 +297,7 @@ public class BasicHttpResponse implements HttpResponse {
 	private HeaderListBuilder headerListBuilder() {
 		assertModifiable();
 		if (headerListBuilder == null) {
-			headerListBuilder = headerList.builder();
+			headerListBuilder = headerList.copy();
 			headerList = null;
 		}
 		return headerListBuilder;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Conflict.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Conflict.java
index 90b18b1..97bc02f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Conflict.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Conflict.java
@@ -116,7 +116,8 @@ public class Conflict extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<Conflict> builder() {
-		return super.builder(Conflict.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<Conflict> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Continue.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Continue.java
index 743c786..5ba1d65 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Continue.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Continue.java
@@ -76,4 +76,14 @@ public class Continue extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<Continue> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Created.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Created.java
index fa38002..7f09ec1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Created.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Created.java
@@ -72,4 +72,14 @@ public class Created extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<Created> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/EarlyHints.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/EarlyHints.java
index 3d6f75d..e9b001f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/EarlyHints.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/EarlyHints.java
@@ -14,7 +14,6 @@ package org.apache.juneau.http.response;
 
 import static org.apache.juneau.http.response.EarlyHints.*;
 
-import org.apache.http.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.internal.*;
@@ -60,16 +59,12 @@ public class EarlyHints extends BasicHttpResponse {
 	}
 
 	/**
-	 * Constructor.
-	 *
-	 * <p>
-	 * This is the constructor used when parsing an HTTP response.
+	 * Creates a builder for this class initialized with the contents of this bean.
 	 *
-	 * @param response The HTTP response to copy from.  Must not be <jk>null</jk>.
-	 * @throws AssertionError If HTTP response status code does not match what was expected.
+	 * @return A new builder bean.
 	 */
-	public EarlyHints(HttpResponse response) {
-		this(create().copyFrom(response));
-		assertStatusCode(response);
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<EarlyHints> copy() {
+		return new HttpResponseBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ExpectationFailed.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ExpectationFailed.java
index e2738a8..8ae88e1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ExpectationFailed.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ExpectationFailed.java
@@ -116,7 +116,8 @@ public class ExpectationFailed extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<ExpectationFailed> builder() {
-		return super.builder(ExpectationFailed.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<ExpectationFailed> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/FailedDependency.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/FailedDependency.java
index ec493d1..902e3c3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/FailedDependency.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/FailedDependency.java
@@ -116,7 +116,8 @@ public class FailedDependency extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<FailedDependency> builder() {
-		return super.builder(FailedDependency.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<FailedDependency> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Forbidden.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Forbidden.java
index cbd8b88..adbffe7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Forbidden.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Forbidden.java
@@ -117,7 +117,8 @@ public class Forbidden extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<Forbidden> builder() {
-		return super.builder(Forbidden.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<Forbidden> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Found.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Found.java
index 3c11b91..b133600 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Found.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Found.java
@@ -76,4 +76,14 @@ public class Found extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<Found> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Gone.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Gone.java
index 725798a..ffa3de3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Gone.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Gone.java
@@ -120,7 +120,8 @@ public class Gone extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<Gone> builder() {
-		return super.builder(Gone.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<Gone> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpExceptionBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpExceptionBuilder.java
index e6e928d..9ef54f3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpExceptionBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpExceptionBuilder.java
@@ -51,6 +51,19 @@ public class HttpExceptionBuilder<T extends BasicHttpException> extends BasicRun
 	}
 
 	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The bean to copy from.
+	 */
+	public HttpExceptionBuilder(T copyFrom) {
+		super(copyFrom);
+		implClass = copyFrom.getClass();
+		statusLine = copyFrom.statusLine;
+		headerList = copyFrom.headerList;
+		body = copyFrom.body;
+	}
+
+	/**
 	 * Instantiates the exception bean from the settings in this builder.
 	 *
 	 * @return A new {@link BasicHttpException} bean.
@@ -79,20 +92,6 @@ public class HttpExceptionBuilder<T extends BasicHttpException> extends BasicRun
 		return this;
 	}
 
-	/**
-	 * Copies the values from the specified exception.
-	 *
-	 * @param value The exception to copy from.
-	 * @return This object (for method chaining).
-	 */
-	public HttpExceptionBuilder<T> copyFrom(BasicHttpException value) {
-		super.copyFrom(value);
-		statusLine = value.statusLine;
-		headerList = value.headerList;
-		body = value.body;
-		return this;
-	}
-
 	BasicStatusLine statusLine() {
 		if (statusLineBuilder != null)
 			return statusLineBuilder.build();
@@ -413,7 +412,7 @@ public class HttpExceptionBuilder<T extends BasicHttpException> extends BasicRun
 
 	private BasicStatusLineBuilder statusLineBuilder() {
 		if (statusLineBuilder == null) {
-			statusLineBuilder = statusLine == null ? BasicStatusLine.create() : statusLine.builder();
+			statusLineBuilder = statusLine == null ? BasicStatusLine.create() : statusLine.copy();
 			statusLine = null;
 		}
 		return statusLineBuilder;
@@ -421,7 +420,7 @@ public class HttpExceptionBuilder<T extends BasicHttpException> extends BasicRun
 
 	private HeaderListBuilder headerListBuilder() {
 		if (headerListBuilder == null) {
-			headerListBuilder = headerList == null ? HeaderList.create() : headerList.builder();
+			headerListBuilder = headerList == null ? HeaderList.create() : headerList.copy();
 			headerList = null;
 		}
 		return headerListBuilder;
@@ -436,12 +435,6 @@ public class HttpExceptionBuilder<T extends BasicHttpException> extends BasicRun
 	}
 
 	@Override /* GENERATED - BasicRuntimeExceptionBuilder */
-	public HttpExceptionBuilder<T> copyFrom(BasicRuntimeException value) {
-		super.copyFrom(value);
-		return this;
-	}
-
-	@Override /* GENERATED - BasicRuntimeExceptionBuilder */
 	public HttpExceptionBuilder<T> message(String msg, Object...args) {
 		super.message(msg, args);
 		return this;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponseBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponseBuilder.java
index 62765ea..f8df535 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponseBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponseBuilder.java
@@ -52,6 +52,18 @@ public class HttpResponseBuilder<T extends BasicHttpResponse> {
 	}
 
 	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The bean to copy from.
+	 */
+	public HttpResponseBuilder(T copyFrom) {
+		implClass = copyFrom.getClass();
+		statusLine = copyFrom.statusLine;
+		headerList = copyFrom.headerList;
+		body = copyFrom.body;
+	}
+
+	/**
 	 * Instantiates the exception bean from the settings in this builder.
 	 *
 	 * @return A new {@link HttpResponse} bean.
@@ -77,19 +89,6 @@ public class HttpResponseBuilder<T extends BasicHttpResponse> {
 		return this;
 	}
 
-	/**
-	 * Copies the values from the specified exception.
-	 *
-	 * @param value The exception to copy from.
-	 * @return This object (for method chaining).
-	 */
-	public HttpResponseBuilder<T> copyFrom(BasicHttpResponse value) {
-		statusLine = value.statusLine;
-		headerList = value.headerList;
-		body = value.body;
-		return this;
-	}
-
 	BasicStatusLine statusLine() {
 		if (statusLineBuilder != null)
 			return statusLineBuilder.build();
@@ -444,7 +443,7 @@ public class HttpResponseBuilder<T extends BasicHttpResponse> {
 
 	private BasicStatusLineBuilder statusLineBuilder() {
 		if (statusLineBuilder == null) {
-			statusLineBuilder = statusLine == null ? BasicStatusLine.create() : statusLine.builder();
+			statusLineBuilder = statusLine == null ? BasicStatusLine.create() : statusLine.copy();
 			statusLine = null;
 		}
 		return statusLineBuilder;
@@ -452,7 +451,7 @@ public class HttpResponseBuilder<T extends BasicHttpResponse> {
 
 	private HeaderListBuilder headerListBuilder() {
 		if (headerListBuilder == null) {
-			headerListBuilder = headerList == null ? HeaderList.create() : headerList.builder();
+			headerListBuilder = headerList == null ? HeaderList.create() : headerList.copy();
 			headerList = null;
 		}
 		return headerListBuilder;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpVersionNotSupported.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpVersionNotSupported.java
index 9e0a7f2..b1cf179 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpVersionNotSupported.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpVersionNotSupported.java
@@ -125,7 +125,8 @@ public class HttpVersionNotSupported extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<HttpVersionNotSupported> builder() {
-		return super.builder(HttpVersionNotSupported.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<HttpVersionNotSupported> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/IMUsed.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/IMUsed.java
index 643e083..932f23a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/IMUsed.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/IMUsed.java
@@ -72,4 +72,14 @@ public class IMUsed extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<IMUsed> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/InsufficientStorage.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/InsufficientStorage.java
index a34ce03..e989ece 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/InsufficientStorage.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/InsufficientStorage.java
@@ -116,7 +116,8 @@ public class InsufficientStorage extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<InsufficientStorage> builder() {
-		return super.builder(InsufficientStorage.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<InsufficientStorage> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/InternalServerError.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/InternalServerError.java
index 6ea0b77..b05a9aa 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/InternalServerError.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/InternalServerError.java
@@ -116,7 +116,8 @@ public class InternalServerError extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<InternalServerError> builder() {
-		return super.builder(InternalServerError.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<InternalServerError> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/LengthRequired.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/LengthRequired.java
index ebe1f27..ee89b5c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/LengthRequired.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/LengthRequired.java
@@ -116,7 +116,8 @@ public class LengthRequired extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<LengthRequired> builder() {
-		return super.builder(LengthRequired.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<LengthRequired> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Locked.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Locked.java
index 1d84a80..ad5845d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Locked.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Locked.java
@@ -116,7 +116,8 @@ public class Locked extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<Locked> builder() {
-		return super.builder(Locked.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<Locked> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/LoopDetected.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/LoopDetected.java
index e6e818a..518fa33 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/LoopDetected.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/LoopDetected.java
@@ -116,7 +116,8 @@ public class LoopDetected extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<LoopDetected> builder() {
-		return super.builder(LoopDetected.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<LoopDetected> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MethodNotAllowed.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MethodNotAllowed.java
index e8d2e84..f4f4808 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MethodNotAllowed.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MethodNotAllowed.java
@@ -116,7 +116,8 @@ public class MethodNotAllowed extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<MethodNotAllowed> builder() {
-		return super.builder(MethodNotAllowed.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<MethodNotAllowed> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MisdirectedRequest.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MisdirectedRequest.java
index 3d647ca..28eb776 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MisdirectedRequest.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MisdirectedRequest.java
@@ -116,7 +116,8 @@ public class MisdirectedRequest extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<MisdirectedRequest> builder() {
-		return super.builder(MisdirectedRequest.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<MisdirectedRequest> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MovedPermanently.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MovedPermanently.java
index eaa3e19..fb75934 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MovedPermanently.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MovedPermanently.java
@@ -72,4 +72,14 @@ public class MovedPermanently extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<MovedPermanently> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultiStatus.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultiStatus.java
index 4652a4b..794bf0d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultiStatus.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultiStatus.java
@@ -72,4 +72,14 @@ public class MultiStatus extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<MultiStatus> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultipleChoices.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultipleChoices.java
index 54fb524..06915fc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultipleChoices.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultipleChoices.java
@@ -73,4 +73,14 @@ public class MultipleChoices extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<MultipleChoices> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NetworkAuthenticationRequired.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NetworkAuthenticationRequired.java
index e562e8e..6eead51 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NetworkAuthenticationRequired.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NetworkAuthenticationRequired.java
@@ -117,7 +117,8 @@ public class NetworkAuthenticationRequired extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<NetworkAuthenticationRequired> builder() {
-		return super.builder(NetworkAuthenticationRequired.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<NetworkAuthenticationRequired> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NoContent.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NoContent.java
index f0c648e..95934d2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NoContent.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NoContent.java
@@ -72,4 +72,14 @@ public class NoContent extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<NoContent> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NonAuthoritiveInformation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NonAuthoritiveInformation.java
index a9f6458..c19713f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NonAuthoritiveInformation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NonAuthoritiveInformation.java
@@ -72,4 +72,14 @@ public class NonAuthoritiveInformation extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<NonAuthoritiveInformation> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotAcceptable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotAcceptable.java
index f87d552..24fa361 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotAcceptable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotAcceptable.java
@@ -116,7 +116,8 @@ public class NotAcceptable extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<NotAcceptable> builder() {
-		return super.builder(NotAcceptable.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<NotAcceptable> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotExtended.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotExtended.java
index 1d10987..2ceaf8e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotExtended.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotExtended.java
@@ -116,7 +116,8 @@ public class NotExtended extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<NotExtended> builder() {
-		return super.builder(NotExtended.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<NotExtended> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotFound.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotFound.java
index da1f9a7..6de3bad 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotFound.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotFound.java
@@ -117,7 +117,8 @@ public class NotFound extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<NotFound> builder() {
-		return super.builder(NotFound.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<NotFound> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotImplemented.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotImplemented.java
index 4a91fcd..61fe6a0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotImplemented.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotImplemented.java
@@ -117,7 +117,8 @@ public class NotImplemented extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<NotImplemented> builder() {
-		return super.builder(NotImplemented.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<NotImplemented> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotModified.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotModified.java
index 5288c30..9172d69 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotModified.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotModified.java
@@ -73,4 +73,14 @@ public class NotModified extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<NotModified> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Ok.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Ok.java
index 55579e5..68c07c5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Ok.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Ok.java
@@ -74,4 +74,14 @@ public class Ok extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<Ok> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PartialContent.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PartialContent.java
index 51985ef..f218d35 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PartialContent.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PartialContent.java
@@ -73,4 +73,14 @@ public class PartialContent extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<PartialContent> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PayloadTooLarge.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PayloadTooLarge.java
index 872f4ac..225bc86 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PayloadTooLarge.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PayloadTooLarge.java
@@ -116,7 +116,8 @@ public class PayloadTooLarge extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<PayloadTooLarge> builder() {
-		return super.builder(PayloadTooLarge.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<PayloadTooLarge> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PermanentRedirect.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PermanentRedirect.java
index 2af717d..af34982 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PermanentRedirect.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PermanentRedirect.java
@@ -73,4 +73,14 @@ public class PermanentRedirect extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<PermanentRedirect> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PreconditionFailed.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PreconditionFailed.java
index 23c9ed1..1ef2096 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PreconditionFailed.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PreconditionFailed.java
@@ -116,7 +116,8 @@ public class PreconditionFailed extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<PreconditionFailed> builder() {
-		return super.builder(PreconditionFailed.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<PreconditionFailed> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PreconditionRequired.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PreconditionRequired.java
index 2ce6355..b39a663 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PreconditionRequired.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PreconditionRequired.java
@@ -117,7 +117,8 @@ public class PreconditionRequired extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<PreconditionRequired> builder() {
-		return super.builder(PreconditionRequired.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<PreconditionRequired> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Processing.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Processing.java
index b7cb968..92414c6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Processing.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Processing.java
@@ -74,4 +74,14 @@ public class Processing extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<Processing> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/RangeNotSatisfiable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/RangeNotSatisfiable.java
index 6486f28..14f3d7a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/RangeNotSatisfiable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/RangeNotSatisfiable.java
@@ -117,7 +117,8 @@ public class RangeNotSatisfiable extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<RangeNotSatisfiable> builder() {
-		return super.builder(RangeNotSatisfiable.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<RangeNotSatisfiable> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/RequestHeaderFieldsTooLarge.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/RequestHeaderFieldsTooLarge.java
index df763f7..80d3142 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/RequestHeaderFieldsTooLarge.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/RequestHeaderFieldsTooLarge.java
@@ -116,7 +116,8 @@ public class RequestHeaderFieldsTooLarge extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<RequestHeaderFieldsTooLarge> builder() {
-		return super.builder(RequestHeaderFieldsTooLarge.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<RequestHeaderFieldsTooLarge> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ResetContent.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ResetContent.java
index dd72d22..dc12f8d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ResetContent.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ResetContent.java
@@ -73,4 +73,14 @@ public class ResetContent extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<ResetContent> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SeeOther.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SeeOther.java
index a31c187..8e608c5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SeeOther.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SeeOther.java
@@ -73,4 +73,14 @@ public class SeeOther extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<SeeOther> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ServiceUnavailable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ServiceUnavailable.java
index 04876eb..75e142e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ServiceUnavailable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ServiceUnavailable.java
@@ -117,7 +117,8 @@ public class ServiceUnavailable extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<ServiceUnavailable> builder() {
-		return super.builder(ServiceUnavailable.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<ServiceUnavailable> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SwitchingProtocols.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SwitchingProtocols.java
index d63d3c0..b635ef8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SwitchingProtocols.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SwitchingProtocols.java
@@ -72,4 +72,14 @@ public class SwitchingProtocols extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<SwitchingProtocols> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TemporaryRedirect.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TemporaryRedirect.java
index d15720b..d238952 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TemporaryRedirect.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TemporaryRedirect.java
@@ -74,4 +74,14 @@ public class TemporaryRedirect extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<TemporaryRedirect> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TooManyRequests.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TooManyRequests.java
index f81f371..c89e706 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TooManyRequests.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TooManyRequests.java
@@ -117,7 +117,8 @@ public class TooManyRequests extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<TooManyRequests> builder() {
-		return super.builder(TooManyRequests.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<TooManyRequests> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Unauthorized.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Unauthorized.java
index 2e247fc..d8f8eba 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Unauthorized.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Unauthorized.java
@@ -119,7 +119,8 @@ public class Unauthorized extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<Unauthorized> builder() {
-		return super.builder(Unauthorized.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<Unauthorized> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnavailableForLegalReasons.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnavailableForLegalReasons.java
index 80b1f52..1c5fb5e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnavailableForLegalReasons.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnavailableForLegalReasons.java
@@ -116,7 +116,8 @@ public class UnavailableForLegalReasons extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<UnavailableForLegalReasons> builder() {
-		return super.builder(UnavailableForLegalReasons.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<UnavailableForLegalReasons> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnprocessableEntity.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnprocessableEntity.java
index c360e71..2ded0cb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnprocessableEntity.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnprocessableEntity.java
@@ -116,7 +116,8 @@ public class UnprocessableEntity extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<UnprocessableEntity> builder() {
-		return super.builder(UnprocessableEntity.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<UnprocessableEntity> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnsupportedMediaType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnsupportedMediaType.java
index f00c4bc..7138957 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnsupportedMediaType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UnsupportedMediaType.java
@@ -117,7 +117,8 @@ public class UnsupportedMediaType extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<UnsupportedMediaType> builder() {
-		return super.builder(UnsupportedMediaType.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<UnsupportedMediaType> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UpgradeRequired.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UpgradeRequired.java
index 450909f..92f6ebf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UpgradeRequired.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UpgradeRequired.java
@@ -116,7 +116,8 @@ public class UpgradeRequired extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<UpgradeRequired> builder() {
-		return super.builder(UpgradeRequired.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<UpgradeRequired> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UriTooLong.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UriTooLong.java
index b87ca17..9ffc8ce 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UriTooLong.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UriTooLong.java
@@ -117,7 +117,8 @@ public class UriTooLong extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<UriTooLong> builder() {
-		return super.builder(UriTooLong.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<UriTooLong> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UseProxy.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UseProxy.java
index 112dc85..335976f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UseProxy.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UseProxy.java
@@ -76,4 +76,14 @@ public class UseProxy extends BasicHttpResponse {
 		this(create().copyFrom(response));
 		assertStatusCode(response);
 	}
+
+	/**
+	 * Creates a builder for this class initialized with the contents of this bean.
+	 *
+	 * @return A new builder bean.
+	 */
+	@Override /* BasicHttpResponse */
+	public HttpResponseBuilder<UseProxy> copy() {
+		return new HttpResponseBuilder<>(this);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/VariantAlsoNegotiates.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/VariantAlsoNegotiates.java
index c981aed..ea0fda7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/VariantAlsoNegotiates.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/VariantAlsoNegotiates.java
@@ -116,7 +116,8 @@ public class VariantAlsoNegotiates extends BasicHttpException {
 	 *
 	 * @return A new builder bean.
 	 */
-	public HttpExceptionBuilder<VariantAlsoNegotiates> builder() {
-		return super.builder(VariantAlsoNegotiates.class).copyFrom(this);
+	@Override /* BasicHttpException */
+	public HttpExceptionBuilder<VariantAlsoNegotiates> copy() {
+		return new HttpExceptionBuilder<>(this);
 	}
 }
\ No newline at end of file
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 7c010e6..9ffb9c4 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
@@ -61,8 +61,8 @@ public final class JsoParser extends InputStreamParser implements JsoMetaProvide
 	}
 
 	@Override /* Context */
-	public JsoParserBuilder builder() {
-		return new JsoParserBuilder(getContextProperties());
+	public JsoParserBuilder copy() {
+		return new JsoParserBuilder(this);
 	}
 
 	/**
@@ -72,7 +72,7 @@ public final class JsoParser extends InputStreamParser implements JsoMetaProvide
 	 * This is equivalent to simply calling <code><jk>new</jk> JsoParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link JsoParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
index d840b78..47b4a8d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
@@ -37,12 +37,12 @@ public class JsoParserBuilder extends InputStreamParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public JsoParserBuilder(ContextProperties cp) {
-		super(cp);
+	public JsoParserBuilder(JsoParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 0b6f7c3..ba40982 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
@@ -63,8 +63,8 @@ public class JsoSerializer extends OutputStreamSerializer implements JsoMetaProv
 	}
 
 	@Override /* Context */
-	public JsoSerializerBuilder builder() {
-		return new JsoSerializerBuilder(getContextProperties());
+	public JsoSerializerBuilder copy() {
+		return new JsoSerializerBuilder(this);
 	}
 
 	/**
@@ -74,7 +74,7 @@ public class JsoSerializer extends OutputStreamSerializer implements JsoMetaProv
 	 * This is equivalent to simply calling <code><jk>new</jk> JsoSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link JsoSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
index 4a87697..1da31f2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
@@ -37,12 +37,12 @@ public class JsoSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public JsoSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public JsoSerializerBuilder(JsoSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 c0f6fe5..3ca6b97 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
@@ -184,7 +184,7 @@ public class JsonParser extends ReaderParser implements JsonMetaProvider, JsonCo
 		 * @param cp The property store containing all the settings for this object.
 		 */
 		public Strict(ContextProperties cp) {
-			super(cp.builder().setDefault(PARSER_strict, true).setDefault(JSON_validateEnd, true).build());
+			super(cp.copy().setDefault(PARSER_strict, true).setDefault(JSON_validateEnd, true).build());
 		}
 	}
 
@@ -219,8 +219,8 @@ public class JsonParser extends ReaderParser implements JsonMetaProvider, JsonCo
 	}
 
 	@Override /* Context */
-	public JsonParserBuilder builder() {
-		return new JsonParserBuilder(getContextProperties());
+	public JsonParserBuilder copy() {
+		return new JsonParserBuilder(this);
 	}
 
 	/**
@@ -230,7 +230,7 @@ public class JsonParser extends ReaderParser implements JsonMetaProvider, JsonCo
 	 * This is equivalent to simply calling <code><jk>new</jk> JsonParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link JsonParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
index ff7137a..061944e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
@@ -40,12 +40,12 @@ public class JsonParserBuilder extends ReaderParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public JsonParserBuilder(ContextProperties cp) {
-		super(cp);
+	public JsonParserBuilder(JsonParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 0f4a433..ba4bb0c 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
@@ -74,7 +74,7 @@ public class JsonSchemaSerializer extends JsonSerializer implements JsonSchemaMe
 		 */
 		public Readable(ContextProperties cp) {
 			super(
-				cp.builder().setDefault(WSERIALIZER_useWhitespace, true).build()
+				cp.copy().setDefault(WSERIALIZER_useWhitespace, true).build()
 			);
 		}
 	}
@@ -89,7 +89,7 @@ public class JsonSchemaSerializer extends JsonSerializer implements JsonSchemaMe
 		 */
 		public Simple(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(JSON_simpleMode, true)
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.build()
@@ -107,7 +107,7 @@ public class JsonSchemaSerializer extends JsonSerializer implements JsonSchemaMe
 		 */
 		public SimpleReadable(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(JSON_simpleMode, true)
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.setDefault(WSERIALIZER_useWhitespace, true)
@@ -132,7 +132,7 @@ public class JsonSchemaSerializer extends JsonSerializer implements JsonSchemaMe
 	 */
 	public JsonSchemaSerializer(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.setDefault(BEANTRAVERSE_detectRecursions, true)
 				.setDefault(BEANTRAVERSE_ignoreRecursions, true)
 				.build(),
@@ -143,8 +143,8 @@ public class JsonSchemaSerializer extends JsonSerializer implements JsonSchemaMe
 	}
 
 	@Override /* Context */
-	public JsonSchemaSerializerBuilder builder() {
-		return new JsonSchemaSerializerBuilder(getContextProperties());
+	public JsonSchemaSerializerBuilder copy() {
+		return new JsonSchemaSerializerBuilder(this);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
index 48158fd..bac4629 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
@@ -43,12 +43,12 @@ public class JsonSchemaSerializerBuilder extends JsonSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public JsonSchemaSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public JsonSchemaSerializerBuilder(JsonSchemaSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 52792de..1ac1b76 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
@@ -83,7 +83,7 @@ import org.apache.juneau.serializer.*;
  * 	JsonSerializer serializer = JsonSerializer.<jsm>create</jsm>().simple().sq().build();
  *
  * 	<jc>// Clone an existing serializer and modify it to use single-quotes</jc>
- * 	JsonSerializer serializer = JsonSerializer.<jsf>DEFAULT</jsf>.builder().sq().build();
+ * 	JsonSerializer serializer = JsonSerializer.<jsf>DEFAULT</jsf>.copy().sq().build();
  *
  * 	<jc>// Serialize a POJO to JSON</jc>
  * 	String json = serializer.serialize(someObject);
@@ -297,7 +297,7 @@ public class JsonSerializer extends WriterSerializer implements JsonMetaProvider
 		 */
 		public Readable(ContextProperties cp) {
 			super(
-				cp.builder().setDefault(WSERIALIZER_useWhitespace, true).build()
+				cp.copy().setDefault(WSERIALIZER_useWhitespace, true).build()
 			);
 		}
 	}
@@ -315,7 +315,7 @@ public class JsonSerializer extends WriterSerializer implements JsonMetaProvider
 		 */
 		public ReadableSafe(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(JSON_simpleMode, true)
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.setDefault(WSERIALIZER_useWhitespace, true)
@@ -384,8 +384,8 @@ public class JsonSerializer extends WriterSerializer implements JsonMetaProvider
 	}
 
 	@Override /* Context */
-	public JsonSerializerBuilder builder() {
-		return new JsonSerializerBuilder(getContextProperties());
+	public JsonSerializerBuilder copy() {
+		return new JsonSerializerBuilder(this);
 	}
 
 	/**
@@ -404,14 +404,14 @@ public class JsonSerializer extends WriterSerializer implements JsonMetaProvider
 	 * Returns the schema serializer based on the settings of this serializer.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return The schema serializer.
 	 */
 	public JsonSchemaSerializer getSchemaSerializer() {
 		if (schemaSerializer == null)
-			schemaSerializer = builder().build(JsonSchemaSerializer.class);
+			schemaSerializer = copy().build(JsonSchemaSerializer.class);
 		return schemaSerializer;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
index 1716261..bd4147a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
@@ -40,12 +40,12 @@ public class JsonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public JsonSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public JsonSerializerBuilder(JsonSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParser.java
index e461a24..d93b48f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParser.java
@@ -45,8 +45,8 @@ public class SimpleJsonParser extends JsonParser {
 	}
 
 	@Override /* Context */
-	public SimpleJsonParserBuilder builder() {
-		return new SimpleJsonParserBuilder(getContextProperties());
+	public SimpleJsonParserBuilder copy() {
+		return new SimpleJsonParserBuilder(this);
 	}
 
 	/**
@@ -56,7 +56,7 @@ public class SimpleJsonParser extends JsonParser {
 	 * This is equivalent to simply calling <code><jk>new</jk> SimpleJsonParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link SimpleJsonParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
index 70e7f2b..5002d17 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
@@ -37,12 +37,12 @@ public class SimpleJsonParserBuilder extends JsonParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public SimpleJsonParserBuilder(ContextProperties cp) {
-		super(cp);
+	public SimpleJsonParserBuilder(SimpleJsonParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
index b932c1f..6c6e579 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
@@ -62,7 +62,7 @@ public class SimpleJsonSerializer extends JsonSerializer {
 		 */
 		public Readable(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(JSON_simpleMode, true)
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.setDefault(WSERIALIZER_useWhitespace, true)
@@ -78,7 +78,7 @@ public class SimpleJsonSerializer extends JsonSerializer {
 	 */
 	public SimpleJsonSerializer(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.setDefault(JSON_simpleMode, true)
 				.setDefault(WSERIALIZER_quoteChar, '\'')
 				.build(),
@@ -87,8 +87,8 @@ public class SimpleJsonSerializer extends JsonSerializer {
 	}
 
 	@Override /* Context */
-	public SimpleJsonSerializerBuilder builder() {
-		return new SimpleJsonSerializerBuilder(getContextProperties());
+	public SimpleJsonSerializerBuilder copy() {
+		return new SimpleJsonSerializerBuilder(this);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
index 7e3c70d..44977d9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
@@ -37,12 +37,12 @@ public class SimpleJsonSerializerBuilder extends JsonSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public SimpleJsonSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public SimpleJsonSerializerBuilder(SimpleJsonSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 9397768..e8accde 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
@@ -316,7 +316,7 @@ public class JsonSchemaGenerator extends BeanTraverseContext implements JsonSche
 	 * @param cp Initialize with the specified config property store.
 	 */
 	public JsonSchemaGenerator(ContextProperties cp) {
-		super(cp.builder().setDefault(BEANTRAVERSE_detectRecursions, true).setDefault(BEANTRAVERSE_ignoreRecursions, true).build());
+		super(cp.copy().setDefault(BEANTRAVERSE_detectRecursions, true).setDefault(BEANTRAVERSE_ignoreRecursions, true).build());
 
 		useBeanDefs = cp.getBoolean(JSONSCHEMA_useBeanDefs).orElse(false);
 		allowNestedExamples = cp.getBoolean(JSONSCHEMA_allowNestedExamples).orElse(false);
@@ -334,8 +334,8 @@ public class JsonSchemaGenerator extends BeanTraverseContext implements JsonSche
 	}
 
 	@Override /* Context */
-	public JsonSchemaGeneratorBuilder builder() {
-		return new JsonSchemaGeneratorBuilder(getContextProperties());
+	public JsonSchemaGeneratorBuilder copy() {
+		return new JsonSchemaGeneratorBuilder(this);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
index 96bd8c1..c9b47db 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
@@ -41,12 +41,12 @@ public class JsonSchemaGeneratorBuilder extends BeanTraverseBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public JsonSchemaGeneratorBuilder(ContextProperties cp) {
-		super(cp);
+	public JsonSchemaGeneratorBuilder(JsonSchemaGenerator copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 e266167..70f05e4 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
@@ -63,7 +63,7 @@ public class MsgPackParser extends InputStreamParser implements MsgPackMetaProvi
 		 */
 		public SpacedHex(ContextProperties cp) {
 			super(
-				cp.builder().setDefault(ISPARSER_binaryFormat, BinaryFormat.SPACED_HEX).build()
+				cp.copy().setDefault(ISPARSER_binaryFormat, BinaryFormat.SPACED_HEX).build()
 			);
 		}
 	}
@@ -78,7 +78,7 @@ public class MsgPackParser extends InputStreamParser implements MsgPackMetaProvi
 		 */
 		public Base64(ContextProperties cp) {
 			super(
-				cp.builder().setDefault(ISPARSER_binaryFormat, BinaryFormat.BASE64).build()
+				cp.copy().setDefault(ISPARSER_binaryFormat, BinaryFormat.BASE64).build()
 			);
 		}
 	}
@@ -100,8 +100,8 @@ public class MsgPackParser extends InputStreamParser implements MsgPackMetaProvi
 	}
 
 	@Override /* Context */
-	public MsgPackParserBuilder builder() {
-		return new MsgPackParserBuilder(getContextProperties());
+	public MsgPackParserBuilder copy() {
+		return new MsgPackParserBuilder(this);
 	}
 
 	/**
@@ -111,7 +111,7 @@ public class MsgPackParser extends InputStreamParser implements MsgPackMetaProvi
 	 * This is equivalent to simply calling <code><jk>new</jk> MsgPackParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link MsgPackParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
index 07a8553..bbef414 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
@@ -37,12 +37,12 @@ public class MsgPackParserBuilder extends InputStreamParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cpb The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public MsgPackParserBuilder(ContextProperties cpb) {
-		super(cpb);
+	public MsgPackParserBuilder(MsgPackParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 852f514..2c7cfe9 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
@@ -99,7 +99,7 @@ public class MsgPackSerializer extends OutputStreamSerializer implements MsgPack
 		 */
 		public SpacedHex(ContextProperties cp) {
 			super(
-				cp.builder().setDefault(OSSERIALIZER_binaryFormat, BinaryFormat.SPACED_HEX).build()
+				cp.copy().setDefault(OSSERIALIZER_binaryFormat, BinaryFormat.SPACED_HEX).build()
 			);
 		}
 	}
@@ -114,7 +114,7 @@ public class MsgPackSerializer extends OutputStreamSerializer implements MsgPack
 		 */
 		public Base64(ContextProperties cp) {
 			super(
-				cp.builder().setDefault(OSSERIALIZER_binaryFormat, BinaryFormat.BASE64).build()
+				cp.copy().setDefault(OSSERIALIZER_binaryFormat, BinaryFormat.BASE64).build()
 			);
 		}
 	}
@@ -139,8 +139,8 @@ public class MsgPackSerializer extends OutputStreamSerializer implements MsgPack
 	}
 
 	@Override /* Context */
-	public MsgPackSerializerBuilder builder() {
-		return new MsgPackSerializerBuilder(getContextProperties());
+	public MsgPackSerializerBuilder copy() {
+		return new MsgPackSerializerBuilder(this);
 	}
 
 	/**
@@ -150,7 +150,7 @@ public class MsgPackSerializer extends OutputStreamSerializer implements MsgPack
 	 * This is equivalent to simply calling <code><jk>new</jk> MsgPackSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link MsgPackSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
index 5b74354..c1d5bae 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
@@ -37,12 +37,12 @@ public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public MsgPackSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public MsgPackSerializerBuilder(MsgPackSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 6169075..286802c 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
@@ -80,8 +80,8 @@ public class OpenApiParser extends UonParser implements OpenApiMetaProvider, Ope
 	}
 
 	@Override /* Context */
-	public OpenApiParserBuilder builder() {
-		return new OpenApiParserBuilder(getContextProperties());
+	public OpenApiParserBuilder copy() {
+		return new OpenApiParserBuilder(this);
 	}
 
 	/**
@@ -91,7 +91,7 @@ public class OpenApiParser extends UonParser implements OpenApiMetaProvider, Ope
 	 * This is equivalent to simply calling <code><jk>new</jk> UonPartParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link OpenApiParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
index 83561b6..5a11f8f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
@@ -41,12 +41,12 @@ public class OpenApiParserBuilder extends UonParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public OpenApiParserBuilder(ContextProperties cp) {
-		super(cp);
+	public OpenApiParserBuilder(OpenApiParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 1484347..257c939 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
@@ -84,7 +84,7 @@ public class OpenApiSerializer extends UonSerializer implements OpenApiMetaProvi
 	 */
 	public OpenApiSerializer(ContextProperties cp, String produces, String accept) {
 		super(
-			cp.builder()
+			cp.copy()
 				.setDefault(UON_encoding, false)
 				.build(),
 			produces,
@@ -105,15 +105,15 @@ public class OpenApiSerializer extends UonSerializer implements OpenApiMetaProvi
 	}
 
 	@Override /* Context */
-	public OpenApiSerializerBuilder builder() {
-		return new OpenApiSerializerBuilder(getContextProperties());
+	public OpenApiSerializerBuilder copy() {
+		return new OpenApiSerializerBuilder(this);
 	}
 
 	/**
 	 * Instantiates a new clean-slate {@link OpenApiSerializerBuilder} object.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link OpenApiSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
index a7b257d..fe4e8be 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
@@ -41,12 +41,12 @@ public class OpenApiSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public OpenApiSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public OpenApiSerializerBuilder(OpenApiSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
index cd9443f..f33926a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
@@ -38,12 +38,12 @@ public class InputStreamParserBuilder extends ParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public InputStreamParserBuilder(ContextProperties cp) {
-		super(cp);
+	public InputStreamParserBuilder(InputStreamParser copyFrom) {
+		super(copyFrom);
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
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 df59c0c..a73f1ed 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
@@ -552,8 +552,8 @@ public abstract class Parser extends BeanContext {
 	}
 
 	@Override /* Context */
-	public ParserBuilder builder() {
-		return new ParserBuilder(getContextProperties());
+	public ParserBuilder copy() {
+		return new ParserBuilder(this);
 	}
 
 	/**
@@ -563,13 +563,13 @@ public abstract class Parser extends BeanContext {
 	 * This is equivalent to simply calling <code><jk>new</jk> ParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link ParserBuilder} object.
 	 */
 	public static ParserBuilder create() {
-		return new ParserBuilder(ContextProperties.DEFAULT);
+		return new ParserBuilder();
 	}
 
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
index b579429..ea6cd5b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
@@ -43,12 +43,12 @@ public class ParserBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public ParserBuilder(ContextProperties cp) {
-		super(cp);
+	public ParserBuilder(Parser copyFrom) {
+		super(copyFrom);
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroup.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroup.java
index 8b286af..174078d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroup.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroup.java
@@ -106,7 +106,7 @@ public final class ParserGroup extends BeanContext {
 	 * @return A new {@link ParserGroupBuilder} initialized to this group.
 	 */
 	@Override /* Context */
-	public ParserGroupBuilder builder() {
+	public ParserGroupBuilder copy() {
 		return new ParserGroupBuilder(this);
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
index 96e9ad3..d213a0a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
@@ -43,12 +43,12 @@ public class ParserGroupBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Clone an existing parser group builder.
+	 * Copy constructor.
 	 *
-	 * @param copyFrom The parser group that we're copying settings and parsers from.
+	 * @param copyFrom The bean to copy from.
 	 */
 	public ParserGroupBuilder(ParserGroup copyFrom) {
-		super(copyFrom.getContextProperties());
+		super(copyFrom);
 		this.parsers = AList.create().appendReverse(copyFrom.getParsers());
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
index aff594f..b16979c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
@@ -39,12 +39,12 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public ReaderParserBuilder(ContextProperties cp) {
-		super(cp);
+	public ReaderParserBuilder(ReaderParser copyFrom) {
+		super(copyFrom);
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
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 fcf92b0..004729e 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
@@ -88,8 +88,8 @@ public class PlainTextParser extends ReaderParser implements PlainTextMetaProvid
 	}
 
 	@Override /* Context */
-	public PlainTextParserBuilder builder() {
-		return new PlainTextParserBuilder(getContextProperties());
+	public PlainTextParserBuilder copy() {
+		return new PlainTextParserBuilder(this);
 	}
 
 	/**
@@ -99,7 +99,7 @@ public class PlainTextParser extends ReaderParser implements PlainTextMetaProvid
 	 * This is equivalent to simply calling <code><jk>new</jk> PlainTextParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link PlainTextParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
index f982b32..cc741d4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
@@ -38,12 +38,12 @@ public class PlainTextParserBuilder extends ReaderParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public PlainTextParserBuilder(ContextProperties cp) {
-		super(cp);
+	public PlainTextParserBuilder(PlainTextParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 a437404..b4c763a 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
@@ -104,8 +104,8 @@ public class PlainTextSerializer extends WriterSerializer implements PlainTextMe
 
 
 	@Override /* Context */
-	public PlainTextSerializerBuilder builder() {
-		return new PlainTextSerializerBuilder(getContextProperties());
+	public PlainTextSerializerBuilder copy() {
+		return new PlainTextSerializerBuilder(this);
 	}
 
 	/**
@@ -115,7 +115,7 @@ public class PlainTextSerializer extends WriterSerializer implements PlainTextMe
 	 * This is equivalent to simply calling <code><jk>new</jk> PlainTextSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link PlainTextSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
index a62211c..ae7ff23 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
@@ -38,12 +38,12 @@ public class PlainTextSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public PlainTextSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public PlainTextSerializerBuilder(PlainTextSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
index 2754284..99fd82d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
@@ -38,12 +38,12 @@ public class OutputStreamSerializerBuilder extends SerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public OutputStreamSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public OutputStreamSerializerBuilder(OutputStreamSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
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 ad55355..ecafff0 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
@@ -845,8 +845,8 @@ public abstract class Serializer extends BeanTraverseContext {
 	}
 
 	@Override /* Context */
-	public SerializerBuilder builder() {
-		return null;
+	public SerializerBuilder copy() {
+		throw new UnsupportedOperationException();
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
index aa47a35..811c909 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
@@ -39,12 +39,12 @@ public class SerializerBuilder extends BeanTraverseBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public SerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public SerializerBuilder(Serializer copyFrom) {
+		super(copyFrom);
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroup.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
index a1f891d..83f79ac 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroup.java
@@ -100,7 +100,7 @@ public final class SerializerGroup extends BeanTraverseContext {
 	 * @return A new {@link SerializerGroupBuilder} initialized to this group.
 	 */
 	@Override /* Context */
-	public SerializerGroupBuilder builder() {
+	public SerializerGroupBuilder copy() {
 		return new SerializerGroupBuilder(this);
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
index 0fb1a2f..ca09ae8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
@@ -48,7 +48,7 @@ public class SerializerGroupBuilder extends BeanTraverseBuilder {
 	 * @param copyFrom The serializer group that we're copying settings and serializers from.
 	 */
 	public SerializerGroupBuilder(SerializerGroup copyFrom) {
-		super(copyFrom.getContextProperties());
+		super(copyFrom);
 		this.serializers = AList.create().appendReverse(copyFrom.getSerializers());
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
index c279fc5..1c2418e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
@@ -39,12 +39,12 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public WriterSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public WriterSerializerBuilder(WriterSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
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 21c7a3c..eb89515 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
@@ -86,8 +86,8 @@ public final class SoapXmlSerializer extends XmlSerializer implements SoapXmlMet
 	}
 
 	@Override /* Context */
-	public SoapXmlSerializerBuilder builder() {
-		return new SoapXmlSerializerBuilder(getContextProperties());
+	public SoapXmlSerializerBuilder copy() {
+		return new SoapXmlSerializerBuilder(this);
 	}
 
 	/**
@@ -97,7 +97,7 @@ public final class SoapXmlSerializer extends XmlSerializer implements SoapXmlMet
 	 * This is equivalent to simply calling <code><jk>new</jk> SoapXmlSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link SoapXmlSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
index 3a79f4f..16bc1b0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -40,12 +40,12 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public SoapXmlSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public SoapXmlSerializerBuilder(SoapXmlSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
index ca5d917..1f55dd4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -110,10 +110,8 @@ public class VarResolver {
 	 *
 	 * @return A new var resolver builder.
 	 */
-	public VarResolverBuilder builder() {
-		return new VarResolverBuilder()
-			.vars(ctx.getVars())
-			.beanStore(ctx.beanStore);
+	public VarResolverBuilder copy() {
+		return new VarResolverBuilder(this);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
index 82f9511..f479bba 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
@@ -29,10 +29,28 @@ import org.apache.juneau.svl.vars.*;
  */
 public class VarResolverBuilder {
 
-	private final List<Var> vars = AList.create();
+	private final List<Var> vars;
 	private BeanStore beanStore = new BeanStore();
 
 	/**
+	 * Constructor.
+	 */
+	public VarResolverBuilder() {
+		vars = AList.create();
+		beanStore = new BeanStore();
+	}
+
+	/**
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The bean to copy from.
+	 */
+	public VarResolverBuilder(VarResolver copyFrom) {
+		vars = new ArrayList<>(Arrays.asList(copyFrom.ctx.vars));
+		beanStore = BeanStore.of(copyFrom.ctx.beanStore);
+	}
+
+	/**
 	 * Create a new var resolver using the settings in this builder.
 	 *
 	 * @return A new var resolver.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
index 10ee08b..48d1e86 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
@@ -30,7 +30,7 @@ import org.apache.juneau.cp.*;
  */
 public class VarResolverContext {
 
-	private final Var[] vars;
+	final Var[] vars;
 	private final Map<String,Var> varMap;
 	final BeanStore beanStore;
 
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 005b712..a525367 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
@@ -162,7 +162,7 @@ public class UonParser extends ReaderParser implements HttpPartParser, UonMetaPr
 		 * @param cp The property store containing all the settings for this object.
 		 */
 		public Decoding(ContextProperties cp) {
-			super(cp.builder().setDefault(UON_decoding, true).build());
+			super(cp.copy().setDefault(UON_decoding, true).build());
 		}
 	}
 
@@ -262,8 +262,8 @@ public class UonParser extends ReaderParser implements HttpPartParser, UonMetaPr
 	}
 
 	@Override /* Context */
-	public UonParserBuilder builder() {
-		return new UonParserBuilder(getContextProperties());
+	public UonParserBuilder copy() {
+		return new UonParserBuilder(this);
 	}
 
 	/**
@@ -273,7 +273,7 @@ public class UonParser extends ReaderParser implements HttpPartParser, UonMetaPr
 	 * This is equivalent to simply calling <code><jk>new</jk> UonParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link UonParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
index 3a533f2..b2cc7a3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
@@ -41,12 +41,12 @@ public class UonParserBuilder extends ReaderParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public UonParserBuilder(ContextProperties cp) {
-		super(cp);
+	public UonParserBuilder(UonParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 9b13428..704a706 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
@@ -309,7 +309,7 @@ public class UonSerializer extends WriterSerializer implements HttpPartSerialize
 		 * @param cp The property store containing all the settings for this object.
 		 */
 		public Readable(ContextProperties cp) {
-			super(cp.builder().setDefault(WSERIALIZER_useWhitespace, true).build());
+			super(cp.copy().setDefault(WSERIALIZER_useWhitespace, true).build());
 		}
 	}
 
@@ -324,7 +324,7 @@ public class UonSerializer extends WriterSerializer implements HttpPartSerialize
 		 * @param cp The property store containing all the settings for this object.
 		 */
 		public Encoding(ContextProperties cp) {
-			super(cp.builder().setDefault(UON_encoding, true).build());
+			super(cp.copy().setDefault(UON_encoding, true).build());
 		}
 	}
 
@@ -418,8 +418,8 @@ public class UonSerializer extends WriterSerializer implements HttpPartSerialize
 	}
 
 	@Override /* Context */
-	public UonSerializerBuilder builder() {
-		return new UonSerializerBuilder(getContextProperties());
+	public UonSerializerBuilder copy() {
+		return new UonSerializerBuilder(this);
 	}
 
 	/**
@@ -429,7 +429,7 @@ public class UonSerializer extends WriterSerializer implements HttpPartSerialize
 	 * This is equivalent to simply calling <code><jk>new</jk> UonSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link UonSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
index c5ee3b9..04a7190 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
@@ -40,12 +40,12 @@ public class UonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public UonSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public UonSerializerBuilder(UonSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 e9fef82..5309a96 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
@@ -129,7 +129,7 @@ public class UrlEncodingParser extends UonParser implements UrlEncodingMetaProvi
 	 */
 	public UrlEncodingParser(ContextProperties cp) {
 		super(
-			cp.builder()
+			cp.copy()
 				.setDefault(UON_decoding, true)
 				.build(),
 			"application/x-www-form-urlencoded"
@@ -138,8 +138,8 @@ public class UrlEncodingParser extends UonParser implements UrlEncodingMetaProvi
 	}
 
 	@Override /* Context */
-	public UrlEncodingParserBuilder builder() {
-		return new UrlEncodingParserBuilder(getContextProperties());
+	public UrlEncodingParserBuilder copy() {
+		return new UrlEncodingParserBuilder(this);
 	}
 
 	/**
@@ -149,7 +149,7 @@ public class UrlEncodingParser extends UonParser implements UrlEncodingMetaProvi
 	 * This is equivalent to simply calling <code><jk>new</jk> UrlEncodingParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link UrlEncodingParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
index 4764241..c76a8ff 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
@@ -40,12 +40,12 @@ public class UrlEncodingParserBuilder extends UonParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public UrlEncodingParserBuilder(ContextProperties cp) {
-		super(cp);
+	public UrlEncodingParserBuilder(UrlEncodingParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 726269c..3dcc81f 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
@@ -218,7 +218,7 @@ public class UrlEncodingSerializer extends UonSerializer implements UrlEncodingM
 		 * @param cp The property store containing all the settings for this object.
 		 */
 		public Expanded(ContextProperties cp) {
-			super(cp.builder().setDefault(URLENC_expandedParams, true).build());
+			super(cp.copy().setDefault(URLENC_expandedParams, true).build());
 		}
 	}
 
@@ -233,7 +233,7 @@ public class UrlEncodingSerializer extends UonSerializer implements UrlEncodingM
 		 * @param cp The property store containing all the settings for this object.
 		 */
 		public Readable(ContextProperties cp) {
-			super(cp.builder().setDefault(WSERIALIZER_useWhitespace, true).build());
+			super(cp.copy().setDefault(WSERIALIZER_useWhitespace, true).build());
 		}
 	}
 
@@ -248,7 +248,7 @@ public class UrlEncodingSerializer extends UonSerializer implements UrlEncodingM
 		 * @param cp The property store containing all the settings for this object.
 		 */
 		public PlainText(ContextProperties cp) {
-			super(cp.builder().setDefault(UON_paramFormat, "PLAINTEXT").build());
+			super(cp.copy().setDefault(UON_paramFormat, "PLAINTEXT").build());
 		}
 	}
 
@@ -300,7 +300,7 @@ public class UrlEncodingSerializer extends UonSerializer implements UrlEncodingM
 	 */
 	public UrlEncodingSerializer(ContextProperties cp, String produces, String accept) {
 		super(
-			cp.builder()
+			cp.copy()
 				.setDefault(UON_encoding, true)
 				.build(),
 			produces,
@@ -310,8 +310,8 @@ public class UrlEncodingSerializer extends UonSerializer implements UrlEncodingM
 	}
 
 	@Override /* Context */
-	public UrlEncodingSerializerBuilder builder() {
-		return new UrlEncodingSerializerBuilder(getContextProperties());
+	public UrlEncodingSerializerBuilder copy() {
+		return new UrlEncodingSerializerBuilder(this);
 	}
 
 	/**
@@ -321,7 +321,7 @@ public class UrlEncodingSerializer extends UonSerializer implements UrlEncodingM
 	 * This is equivalent to simply calling <code><jk>new</jk> UrlEncodingSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link UrlEncodingSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
index 5f5e034..9b928e4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
@@ -40,12 +40,12 @@ public class UrlEncodingSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public UrlEncodingSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public UrlEncodingSerializerBuilder(UrlEncodingSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/SearchArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/SearchArgs.java
index 21f12ce..c63b76f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/SearchArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/SearchArgs.java
@@ -28,7 +28,7 @@ public class SearchArgs {
 	/**
 	 * Default search args.
 	 */
-	public static SearchArgs DEFAULT = SearchArgs.builder().build();
+	public static SearchArgs DEFAULT = SearchArgs.create().build();
 
 	private final Map<String,String> search;
 	private final List<String> view;
@@ -50,7 +50,7 @@ public class SearchArgs {
 	 *
 	 * @return A new builder for {@link SearchArgs}
 	 */
-	public static Builder builder() {
+	public static Builder create() {
 		return new Builder();
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
index 3171fd8..8db4dfd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
@@ -46,7 +46,7 @@ public class XmlDocSerializer extends XmlSerializer {
 		 * @param cp The property store containing all the settings for this object.
 		 */
 		public Ns(ContextProperties cp) {
-			super(cp.builder().setDefault(XML_enableNamespaces, true).build());
+			super(cp.copy().setDefault(XML_enableNamespaces, true).build());
 		}
 	}
 
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 2d20492..0905685 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
@@ -260,8 +260,8 @@ public class XmlParser extends ReaderParser implements XmlMetaProvider, XmlCommo
 	}
 
 	@Override /* Context */
-	public XmlParserBuilder builder() {
-		return new XmlParserBuilder(getContextProperties());
+	public XmlParserBuilder copy() {
+		return new XmlParserBuilder(this);
 	}
 
 	/**
@@ -271,7 +271,7 @@ public class XmlParser extends ReaderParser implements XmlMetaProvider, XmlCommo
 	 * This is equivalent to simply calling <code><jk>new</jk> XmlParserBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link XmlParserBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
index 7c1a4cb..c1085ca 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
@@ -43,12 +43,12 @@ public class XmlParserBuilder extends ReaderParserBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public XmlParserBuilder(ContextProperties cp) {
-		super(cp);
+	public XmlParserBuilder(XmlParser copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
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 963336b..95ccca1 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
@@ -374,7 +374,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider,
 		 */
 		public Sq(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.build()
 				);
@@ -391,7 +391,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider,
 		 */
 		public SqReadable(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.setDefault(WSERIALIZER_useWhitespace, true)
 					.build()
@@ -409,7 +409,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider,
 		 */
 		public Ns(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(XML_enableNamespaces, true)
 					.build(),
 				"text/xml",
@@ -428,7 +428,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider,
 		 */
 		public NsSq(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(XML_enableNamespaces, true)
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.build()
@@ -446,7 +446,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider,
 		 */
 		public NsSqReadable(ContextProperties cp) {
 			super(
-				cp.builder()
+				cp.copy()
 					.setDefault(XML_enableNamespaces, true)
 					.setDefault(WSERIALIZER_quoteChar, '\'')
 					.setDefault(WSERIALIZER_useWhitespace, true)
@@ -522,8 +522,8 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider,
 	}
 
 	@Override /* Context */
-	public XmlSerializerBuilder builder() {
-		return new XmlSerializerBuilder(getContextProperties());
+	public XmlSerializerBuilder copy() {
+		return new XmlSerializerBuilder(this);
 	}
 
 	/**
@@ -533,7 +533,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider,
 	 * This is equivalent to simply calling <code><jk>new</jk> XmlSerializerBuilder()</code>.
 	 *
 	 * <p>
-	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #copy()} copies
 	 * the settings of the object called on.
 	 *
 	 * @return A new {@link XmlSerializerBuilder} object.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
index 5a8c7a9..42024d0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -40,12 +40,12 @@ public class XmlSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp The initial configuration settings for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	public XmlSerializerBuilder(ContextProperties cp) {
-		super(cp);
+	public XmlSerializerBuilder(XmlSerializer copyFrom) {
+		super(copyFrom);
 	}
 
 	@Override /* ContextBuilder */
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/01.Serializers.html b/juneau-doc/docs/Topics/02.juneau-marshall/01.Serializers.html
index ee4dd34..681f6f7 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/01.Serializers.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/01.Serializers.html
@@ -87,7 +87,7 @@ Serializers
 	JsonSerializer <jv>serializer</jv> = JsonSerializer.<jsm>create</jsm>().simple().sq().build();
 	
 	<jc>// Clone an existing serializer and modify it to use single-quotes</jc>
-	JsonSerializer <jv>serializer</jv> = JsonSerializer.<jsf>DEFAULT</jsf>.builder().sq().build();
+	JsonSerializer <jv>serializer</jv> = JsonSerializer.<jsf>DEFAULT</jsf>.copy().sq().build();
 	
 	<jc>// Serialize a POJO to JSON</jc>
 	String <jv>json</jv> = <jv>serializer</jv>.serialize(someObject);
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/07.MarshallConfigurableProperties.html b/juneau-doc/docs/Topics/02.juneau-marshall/07.MarshallConfigurableProperties.html
index 21bf231..06b96a0 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/07.MarshallConfigurableProperties.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/07.MarshallConfigurableProperties.html
@@ -74,12 +74,12 @@ Configurable Properties
 </p>
 <p>
 	For performance reasons, serializers and parsers are immutable.
-	However, they can be 'copied' and modified using the <c>builder()</c> method.
+	However, they can be 'copied' and modified using the <c>copy()</c> method.
 </p>
 <p class='bpcode w800'>
 	<jc>// Clone and customize an existing serializer.</jc>
 	WriterSerializer <jv>serializer</jv> = SimpleJsonSerializer.<jsf>DEFAULT</jsf>
-		.builder()  <jc>// Create a new builder with copied settings.</jc>
+		.copy()  <jc>// Create a new builder with copied settings.</jc>
 		.quoteChar(<js>'"'</js>)  <jc>// Use a different quote character.</jc>
 		.build();
 </p>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/16.Recursion.html b/juneau-doc/docs/Topics/02.juneau-marshall/16.Recursion.html
index 9b3d657..dd173ec 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/16.Recursion.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/16.Recursion.html
@@ -49,7 +49,7 @@ Non-Tree Models and Recursion Detection
 </p>
 <p class='bpcode w800'>
 	<jc>// Clone an existing serializer and set property for detecting recursions.</jc>
-	JsonSerializer <jv>serializer</jv> = SimpleJsonSerializer.<jsf>DEFAULT_READABLE</jsf>.builder().detectRecursions(<jk>true</jk>).build();
+	JsonSerializer <jv>serializer</jv> = SimpleJsonSerializer.<jsf>DEFAULT_READABLE</jsf>.copy().detectRecursions(<jk>true</jk>).build();
 
 	<jc>// Create a recursive loop.</jc>
 	A <jv>a</jv> = <jk>new</jk> A();
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/01.SvlVariables.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/01.SvlVariables.html
index 4d23240..4d2f019 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/01.SvlVariables.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/01.SvlVariables.html
@@ -42,7 +42,7 @@ SVL Variables
 	<jc>// Next create a var resolver that extends the existing DEFAULT resolver
 	// that supports resolving system properties.</jc>
 	VarResolver <jv>varResolver</jv> = VarResolver.<jsf>DEFAULT</jsf>
-		.builder()
+		.copy()
 		.vars(UrlEncodeVar.<jk>class</jk>)
 		.build();
 	
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/02.VarResolvers.html b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/02.VarResolvers.html
index 13ec72a..48e366c 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/02.VarResolvers.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/29.SimpleVariableLanguage/02.VarResolvers.html
@@ -59,7 +59,7 @@ VarResolvers and VarResolverSessions
 	<li class='jm'>{@link oaj.svl.VarResolverSession#getSessionObject(Class, String, boolean)}
 </ul>
 <p>
-	Var resolvers can be cloned and extended by using the {@link oaj.svl.VarResolver#builder()} method.
+	Var resolvers can be cloned and extended by using the {@link oaj.svl.VarResolver#copy()} method.
 	Cloning a resolver will copy it's {@link oaj.svl.Var} class names and context objects.
 </p>
 
@@ -67,7 +67,7 @@ VarResolvers and VarResolverSessions
 <p class='bpcode w800'>
 	<jc>// Create a resolver that copies the default resolver and adds $C and $A vars.</jc>
 	VarResolver <jv>myVarResolver</jv> = VarResolver.<jsf>DEFAULT</jsf>
-		.builder()
+		.copy()
 		.vars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>)
 		.build();
 </p>
diff --git a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
index 28c7ade..6b584d7 100644
--- a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
+++ b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
@@ -46,7 +46,7 @@ public class ContentComboTestBase extends RestTestcase {
 			case "text/csv": return getClient(mt, CsvSerializer.DEFAULT, CsvParser.DEFAULT);
 			case "text/html": return getClient(mt, HtmlSerializer.DEFAULT, HtmlParser.DEFAULT);
 			case "application/json": return getClient(mt, JsonSerializer.DEFAULT, JsonParser.DEFAULT);
-			case "octal/msgpack": return getClient(mt, MsgPackSerializer.DEFAULT, MsgPackParser.DEFAULT).builder().query("plainText","true").build();
+			case "octal/msgpack": return getClient(mt, MsgPackSerializer.DEFAULT, MsgPackParser.DEFAULT).copy().query("plainText","true").build();
 			case "text/plain": return getClient(mt, PlainTextSerializer.DEFAULT, PlainTextParser.DEFAULT);
 			case "text/uon": return getClient(mt, UonSerializer.DEFAULT, UonParser.DEFAULT);
 			case "application/x-www-form-urlencoded": return getClient(mt, UrlEncodingSerializer.DEFAULT, UrlEncodingParser.DEFAULT);
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 bf01065..33691fc 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
@@ -161,7 +161,7 @@ public class TestUtils {
 	 * Test whitespace and generated schema.
 	 */
 	public static void validateXml(Object o, XmlSerializer s) throws Exception {
-		s = s.builder().ws().ns().addNamespaceUrisToRoot().build();
+		s = s.copy().ws().ns().addNamespaceUrisToRoot().build();
 		String xml = s.serialize(o);
 
 		try {
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 f412d33..8ab2063 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
@@ -53,14 +53,14 @@ public class ThirdPartyProxyTest extends RestTestcase {
 	@Parameterized.Parameters
 	public static Collection<Object[]> getParameters() {
 		return Arrays.asList(new Object[][] {
-			{ /* 0 */ "Json", JsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), JsonParser.DEFAULT },
-			{ /* 1 */ "Xml", XmlSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), XmlParser.DEFAULT },
-			{ /* 2 */ "Mixed", JsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), XmlParser.DEFAULT },
-			{ /* 3 */ "Html", HtmlSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), HtmlParser.DEFAULT },
-			{ /* 4 */ "MessagePack", MsgPackSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), MsgPackParser.DEFAULT },
-			{ /* 5 */ "UrlEncoding", UrlEncodingSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), UrlEncodingParser.DEFAULT },
-			{ /* 6 */ "Uon", UonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), UonParser.DEFAULT },
-			{ /* 7 */ "RdfXml", RdfXmlAbbrevSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), RdfXmlParser.DEFAULT },
+			{ /* 0 */ "Json", JsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), JsonParser.DEFAULT },
+			{ /* 1 */ "Xml", XmlSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), XmlParser.DEFAULT },
+			{ /* 2 */ "Mixed", JsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), XmlParser.DEFAULT },
+			{ /* 3 */ "Html", HtmlSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), HtmlParser.DEFAULT },
+			{ /* 4 */ "MessagePack", MsgPackSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), MsgPackParser.DEFAULT },
+			{ /* 5 */ "UrlEncoding", UrlEncodingSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), UrlEncodingParser.DEFAULT },
+			{ /* 6 */ "Uon", UonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), UonParser.DEFAULT },
+			{ /* 7 */ "RdfXml", RdfXmlAbbrevSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), RdfXmlParser.DEFAULT },
 		});
 	}
 
@@ -69,7 +69,7 @@ public class ThirdPartyProxyTest extends RestTestcase {
 	public ThirdPartyProxyTest(String label, Serializer serializer, Parser parser) {
 		proxy = getCached(label, ThirdPartyProxy.class);
 		if (proxy == null) {
-			this.proxy = getClient(label, serializer, parser).builder().ignoreErrors().partSerializer(UonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build()).build().getRemote(ThirdPartyProxy.class, null, serializer, parser);
+			this.proxy = getClient(label, serializer, parser).copy().ignoreErrors().partSerializer(UonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build()).build().getRemote(ThirdPartyProxy.class, null, serializer, parser);
 			cache(label, proxy);
 		}
 	}
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 f16e872..0c0849a 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
@@ -2010,12 +2010,12 @@ public class RestClient extends BeanContext implements HttpClient, Closeable, Re
 	 * @return A new {@link RestClientBuilder} object.
 	 */
 	public static RestClientBuilder create() {
-		return new RestClientBuilder(ContextProperties.DEFAULT);
+		return new RestClientBuilder();
 	}
 
 	@Override /* Context */
-	public RestClientBuilder builder() {
-		return new RestClientBuilder(getContextProperties());
+	public RestClientBuilder copy() {
+		return new RestClientBuilder(this);
 	}
 
 	private static final
@@ -2081,7 +2081,7 @@ public class RestClient extends BeanContext implements HttpClient, Closeable, Re
 			.addBean(ContextProperties.class, cp)
 			.addBean(RestClient.class, this);
 
-		this.urlEncodingSerializer = new SerializerBuilder(cp).build(UrlEncodingSerializer.class);
+		this.urlEncodingSerializer = UrlEncodingSerializer.create().apply(cp).build();
 		this.partSerializer = cp.getInstance(RESTCLIENT_partSerializer, HttpPartSerializer.class, bs).orElseGet(bs.createBeanSupplier(OpenApiSerializer.class));
 		this.partParser = cp.getInstance(RESTCLIENT_partParser, HttpPartParser.class, bs).orElseGet(bs.createBeanSupplier(OpenApiParser.class));
 		this.executorService = cp.getInstance(RESTCLIENT_executorService, ExecutorService.class).orElse(null);
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
index 7ad4e1c..6bde2bc 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
@@ -79,7 +79,7 @@ import org.apache.juneau.xml.*;
  * 	<li class='jc'>{@link RestClient}
  * 	<ul>
  * 		<li class='jm'>{@link RestClient#create() create()} - Create from scratch.
- * 		<li class='jm'>{@link RestClient#builder() builder()} - Copy settings from an existing client.
+ * 		<li class='jm'>{@link RestClient#copy() copy()} - Copy settings from an existing client.
  * 	</ul>
  * </ul>
  *
@@ -98,12 +98,12 @@ public class RestClientBuilder extends BeanContextBuilder {
 	private boolean pooled;
 
 	/**
-	 * Constructor.
-	 * @param cp
-	 * 	Initial configuration properties for this builder.
+	 * Copy constructor.
+	 *
+	 * @param copyFrom The bean to copy from.
 	 */
-	protected RestClientBuilder(ContextProperties cp) {
-		super(cp);
+	protected RestClientBuilder(RestClient copyFrom) {
+		super(copyFrom);
 		HttpClientBuilder httpClientBuilder = peek(HttpClientBuilder.class, RESTCLIENT_httpClientBuilder);
 		this.httpClientBuilder = httpClientBuilder != null ? httpClientBuilder : getHttpClientBuilder();
 	}
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 9cb7bc8..b377a00 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
@@ -268,7 +268,7 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 
 	private static ContextProperties preInit(ContextProperties cp) {
 		try {
-			ContextPropertiesBuilder cpb = cp.builder();
+			ContextPropertiesBuilder cpb = cp.copy();
 			Object restBean = cp.getInstance(MOCKRESTCLIENT_restBean, Object.class).orElse(null);
 			String contextPath = cp.get(MOCKRESTCLIENT_contextPath, String.class).orElse(null);
 			String servletPath = cp.get(MOCKRESTCLIENT_servletPath, String.class).orElse(null);
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
index 4b698ec..17e971a 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
@@ -67,13 +67,12 @@ import org.apache.http.protocol.*;
 public class MockRestClientBuilder extends RestClientBuilder {
 
 	/**
-	 * Constructor.
+	 * Copy constructor.
 	 *
-	 * @param cp
-	 * 	Initial configuration properties for this builder.
+	 * @param copyFrom The bean to copy from.
 	 */
-	protected MockRestClientBuilder(ContextProperties cp) {
-		super(cp);
+	protected MockRestClientBuilder(MockRestClient copyFrom) {
+		super(copyFrom);
 		connectionManager(new MockHttpClientConnectionManager());
 	}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/AnnotationsTest.java b/juneau-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
index 0bb60ff..75a3674 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
@@ -122,7 +122,7 @@ public class AnnotationsTest {
 
 	@Test
 	public void testBeanWithExplicitProperties_usingConfig() throws Exception {
-		BeanSession session = BeanContext.DEFAULT.builder().applyAnnotations(PersonConfig.class).build().createSession();
+		BeanSession session = BeanContext.DEFAULT.copy().applyAnnotations(PersonConfig.class).build().createSession();
 		BeanMap bm = null;
 
 		// Basic test
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BasicBeanTests.java b/juneau-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
index 3ed78ed..61291c2 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
@@ -51,13 +51,13 @@ public class BasicBeanTests {
 
 	@Test
 	public void a02_testTransientFieldsIgnored_overrideSetting() {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().disableIgnoreTransientFields().build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().disableIgnoreTransientFields().build();
 		assertObject(A1.create()).asString(s).is("{f1:1,f2:2}");
 	}
 
 	@Test
 	public void a03_testTransientFieldsIgnored_overrideAnnotation() {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(A.class).build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(A.class).build();
 		assertObject(A1.create()).asString(s).is("{f1:1,f2:2}");
 	}
 
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 f282d9f..33ef8dd 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java
@@ -432,7 +432,7 @@ public class BeanConfigTest {
 
 	@Test
 	public void testReadOnlyProperties_usingConfig() throws Exception {
-		BeanSession session = BeanContext.DEFAULT.builder().applyAnnotations(ReadOnlyPerson2Config.class).build().createSession();
+		BeanSession session = BeanContext.DEFAULT.copy().applyAnnotations(ReadOnlyPerson2Config.class).build().createSession();
 		Object o;
 
 		// Bean to String
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BeanFilterTest.java b/juneau-utest/src/test/java/org/apache/juneau/BeanFilterTest.java
index 8e7c159..c729088 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/BeanFilterTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BeanFilterTest.java
@@ -29,7 +29,7 @@ public class BeanFilterTest {
 	//====================================================================================================
 	@Test
 	public void testSubTypes() throws Exception {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build();
 		JsonParser p = JsonParser.DEFAULT;
 
 		A1 a1 = new A1();
@@ -87,7 +87,7 @@ public class BeanFilterTest {
 
 	@Test
 	public void testSubTypes_usingConfig() throws Exception {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().applyAnnotations(EConfig.class).build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().applyAnnotations(EConfig.class).build();
 		JsonParser p = JsonParser.create().applyAnnotations(EConfig2.class).build();
 
 		E1 e1 = new E1();
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BeanMapTest.java b/juneau-utest/src/test/java/org/apache/juneau/BeanMapTest.java
index 80fe468..399120f 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/BeanMapTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BeanMapTest.java
@@ -34,7 +34,7 @@ import org.junit.*;
 @FixMethodOrder(NAME_ASCENDING)
 public class BeanMapTest {
 
-	JsonSerializer serializer = SimpleJsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
+	JsonSerializer serializer = SimpleJsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build();
 
 	BeanContext bc = BeanContext.create()
 			.dictionary(MyBeanDictionaryMap.class)
@@ -1090,7 +1090,7 @@ public class BeanMapTest {
 
 	@Test
 	public void testPropertyNameFactoryDashedLC1_usingConfig() throws Exception {
-		BeanMap<P1c> m = bc.builder().applyAnnotations(P1cConfig.class).build().createSession().newBeanMap(P1c.class).load("{'foo':1,'bar-baz':2,'bing-boo-url':3}");
+		BeanMap<P1c> m = bc.copy().applyAnnotations(P1cConfig.class).build().createSession().newBeanMap(P1c.class).load("{'foo':1,'bar-baz':2,'bing-boo-url':3}");
 		assertEquals(1, m.get("foo"));
 		assertEquals(2, m.get("bar-baz"));
 		assertEquals(3, m.get("bing-boo-url"));
@@ -1830,7 +1830,7 @@ public class BeanMapTest {
 
 	@Test
 	public void testHiddenProperties_usingConfig() throws Exception {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(UcConfig.class).build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(UcConfig.class).build();
 		BeanMeta bm = s.getBeanMeta(U.class);
 		assertNotNull(bm.getPropertyMeta("a"));
 		assertNotNull(bm.getPropertyMeta("b"));
@@ -1844,7 +1844,7 @@ public class BeanMapTest {
 		assertEquals("{a:'a',b:'b'}", r);
 
 		// Make sure setters are used if present.
-		t = JsonParser.DEFAULT.builder().applyAnnotations(Uc.class).build().parse(r, Uc.class);
+		t = JsonParser.DEFAULT.copy().applyAnnotations(Uc.class).build().parse(r, Uc.class);
 		assertEquals("b(setter)", t.b);
 	}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java b/juneau-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
index 0883388..ac46362 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
@@ -62,7 +62,7 @@ public abstract class ComboRoundTripTest {
 		if (s2 == null) {
 			s2 = applySettings(s);
 			if (! comboInput.swaps.isEmpty())
-				s2 = s2.builder().swaps(comboInput.swaps.toArray()).build();
+				s2 = s2.copy().swaps(comboInput.swaps.toArray()).build();
 			serializerMap.put(s, s2);
 		}
 		return s2;
@@ -73,7 +73,7 @@ public abstract class ComboRoundTripTest {
 		if (p2 == null) {
 			p2 = applySettings(p);
 			if (! comboInput.swaps.isEmpty())
-				p2 = p2.builder().swaps(comboInput.swaps.toArray()).build();
+				p2 = p2.copy().swaps(comboInput.swaps.toArray()).build();
 			parserMap.put(p, p2);
 		}
 		return p2;
@@ -96,7 +96,7 @@ public abstract class ComboRoundTripTest {
 
 			OMap properties = comboInput.properties;
 			if (properties != null) {
-				s = s.builder().add(properties).build();
+				s = s.copy().add(properties).build();
 			}
 
 			String r = s.serializeToString(comboInput.in.get());
@@ -146,8 +146,8 @@ public abstract class ComboRoundTripTest {
 
 			OMap properties = comboInput.properties;
 			if (properties != null) {
-				s = s.builder().add(properties).build();
-				p = p.builder().add(properties).build();
+				s = s.copy().add(properties).build();
+				p = p.copy().add(properties).build();
 			}
 
 			String r = s.serializeToString(comboInput.in.get());
@@ -187,8 +187,8 @@ public abstract class ComboRoundTripTest {
 
 			OMap properties = comboInput.properties;
 			if (properties != null) {
-				s = s.builder().add(properties).build();
-				p = p.builder().add(properties).build();
+				s = s.copy().add(properties).build();
+				p = p.copy().add(properties).build();
 			}
 
 			String r = s.serializeToString(comboInput.in.get());
@@ -217,9 +217,9 @@ public abstract class ComboRoundTripTest {
 
 			OMap properties = comboInput.properties;
 			if (properties != null) {
-				s = (OutputStreamSerializer)s.builder().add(properties).build();
-				p = (InputStreamParser)p.builder().add(properties).build();
-				sJson = (WriterSerializer)sJson.builder().add(properties).build();
+				s = (OutputStreamSerializer)s.copy().add(properties).build();
+				p = (InputStreamParser)p.copy().add(properties).build();
+				sJson = (WriterSerializer)sJson.copy().add(properties).build();
 			}
 
 			String r = s.serializeToString(comboInput.in.get());
@@ -250,7 +250,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// JSON
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sJson = SimpleJsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sJson = SimpleJsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build();
 	ReaderParser pJson = JsonParser.DEFAULT;
 
 	@Test
@@ -292,7 +292,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// JSON - Readable
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sJsonR = SimpleJsonSerializer.DEFAULT_READABLE.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sJsonR = SimpleJsonSerializer.DEFAULT_READABLE.copy().addBeanTypes().addRootType().build();
 	ReaderParser pJsonR = JsonParser.DEFAULT;
 
 	@Test
@@ -313,7 +313,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// XML
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sXml = XmlSerializer.DEFAULT_SQ.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sXml = XmlSerializer.DEFAULT_SQ.copy().addBeanTypes().addRootType().build();
 	ReaderParser pXml = XmlParser.DEFAULT;
 
 	@Test
@@ -355,7 +355,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// XML - Readable
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sXmlR = XmlSerializer.DEFAULT_SQ_READABLE.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sXmlR = XmlSerializer.DEFAULT_SQ_READABLE.copy().addBeanTypes().addRootType().build();
 	ReaderParser pXmlR = XmlParser.DEFAULT;
 
 	@Test
@@ -376,7 +376,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// XML - Namespaces
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sXmlNs = XmlSerializer.DEFAULT_NS_SQ.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sXmlNs = XmlSerializer.DEFAULT_NS_SQ.copy().addBeanTypes().addRootType().build();
 	ReaderParser pXmlNs = XmlParser.DEFAULT;
 
 	@Test
@@ -397,7 +397,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// HTML
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sHtml = HtmlSerializer.DEFAULT_SQ.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sHtml = HtmlSerializer.DEFAULT_SQ.copy().addBeanTypes().addRootType().build();
 	ReaderParser pHtml = HtmlParser.DEFAULT;
 
 	@Test
@@ -439,7 +439,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// HTML - Readable
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sHtmlR = HtmlSerializer.DEFAULT_SQ_READABLE.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sHtmlR = HtmlSerializer.DEFAULT_SQ_READABLE.copy().addBeanTypes().addRootType().build();
 	ReaderParser pHtmlR = HtmlParser.DEFAULT;
 
 	@Test
@@ -460,7 +460,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// UON
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sUon = UonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sUon = UonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build();
 	ReaderParser pUon = UonParser.DEFAULT;
 
 	@Test
@@ -502,7 +502,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// UON - Readable
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sUonR = UonSerializer.DEFAULT_READABLE.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sUonR = UonSerializer.DEFAULT_READABLE.copy().addBeanTypes().addRootType().build();
 	ReaderParser pUonR = UonParser.DEFAULT;
 
 	@Test
@@ -523,7 +523,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// UrlEncoding
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sUrlEncoding = UrlEncodingSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sUrlEncoding = UrlEncodingSerializer.DEFAULT.copy().addBeanTypes().addRootType().build();
 	ReaderParser pUrlEncoding = UrlEncodingParser.DEFAULT;
 
 	@Test
@@ -565,7 +565,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// UrlEncoding - Readable
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sUrlEncodingR = UrlEncodingSerializer.DEFAULT_READABLE.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sUrlEncodingR = UrlEncodingSerializer.DEFAULT_READABLE.copy().addBeanTypes().addRootType().build();
 	ReaderParser pUrlEncodingR = UrlEncodingParser.DEFAULT;
 
 	@Test
@@ -638,7 +638,7 @@ public abstract class ComboRoundTripTest {
 	//-----------------------------------------------------------------------------------------------------------------
 	// RdfXml
 	//-----------------------------------------------------------------------------------------------------------------
-	WriterSerializer sRdfXml = RdfXmlAbbrevSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
+	WriterSerializer sRdfXml = RdfXmlAbbrevSerializer.DEFAULT.copy().addBeanTypes().addRootType().build();
 	ReaderParser pRdfXml = RdfXmlParser.DEFAULT;
 
 	@Test
diff --git a/juneau-utest/src/test/java/org/apache/juneau/ComboSerializeTest.java b/juneau-utest/src/test/java/org/apache/juneau/ComboSerializeTest.java
index 6029295..baf857e 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/ComboSerializeTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ComboSerializeTest.java
@@ -71,7 +71,7 @@ public abstract class ComboSerializeTest {
 
 			OMap properties = comboInput.properties;
 			if (properties != null) {
-				s = s.builder().add(properties).build();
+				s = s.copy().add(properties).build();
 			}
 
 			boolean isRdf = s instanceof RdfSerializer;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/ContextCacheTest.java b/juneau-utest/src/test/java/org/apache/juneau/ContextCacheTest.java
index 57e0d0c..6464d51 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/ContextCacheTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ContextCacheTest.java
@@ -119,10 +119,10 @@ public class ContextCacheTest {
 		assertTrue(b.getContextProperties() == b2.getContextProperties());
 		assertTrue(c.getContextProperties() == c2.getContextProperties());
 
-		a2 = ContextCache.INSTANCE.create(A.class, a.getContextProperties().builder().set("A.f1", "foo").build());
+		a2 = ContextCache.INSTANCE.create(A.class, a.getContextProperties().copy().set("A.f1", "foo").build());
 		assertTrue(a == a2);
 
-		a2 = ContextCache.INSTANCE.create(A.class, a.getContextProperties().builder().set("A.f1", "bar").build());
+		a2 = ContextCache.INSTANCE.create(A.class, a.getContextProperties().copy().set("A.f1", "bar").build());
 		assertTrue(a != a2);
 	}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/ContextPropertiesTest.java b/juneau-utest/src/test/java/org/apache/juneau/ContextPropertiesTest.java
index 447b31b..0256808 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/ContextPropertiesTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ContextPropertiesTest.java
@@ -1552,7 +1552,7 @@ public class ContextPropertiesTest {
 
 		b.set("A.foo", "bar");
 		ContextProperties cp = b.build();
-		b = cp.builder();
+		b = cp.copy();
 		assertObject(b.build()).asJson().is("{A:{foo:'bar'}}");
 	}
 
@@ -1692,7 +1692,7 @@ public class ContextPropertiesTest {
 		b.set("A.foo.smo/put.foo", StringBuilder.class);
 		ContextProperties cp = b.build();
 
-		b = cp.builder();
+		b = cp.copy();
 		cp = b.build();
 
 		assertObject(cp).asJson().is("{A:{'foo.b':true,'foo.c':'java.lang.String','foo.i':123,'foo.lc':['java.lang.String'],'foo.li':[123],'foo.lo':['java.lang.StringBuilder'],'foo.ls':['bar'],'foo.o':'bar','foo.s':'bar','foo.sc':['java.lang.String'],'foo.si':[123],'foo.smc':{foo:'java.lang.String'},'foo.smi':{foo:123},'foo.smo':{foo:'java.lang.StringBuilder'},'foo.sms':{foo:'bar'},'foo.ss':['bar']}}");
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 fb922e7..d1bf7a2 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/DynaBeanComboTest.java
@@ -220,12 +220,12 @@ public class DynaBeanComboTest extends ComboRoundTripTest {
 
 	@Override
 	protected Serializer applySettings(Serializer s) throws Exception {
-		return s.builder().keepNullProperties().build();
+		return s.copy().keepNullProperties().build();
 	}
 
 	@Override
 	protected Parser applySettings(Parser p) throws Exception {
-		return p.builder().build();
+		return p;
 	}
 
 	@Bean(sort=true)
diff --git a/juneau-utest/src/test/java/org/apache/juneau/MaxIndentTest.java b/juneau-utest/src/test/java/org/apache/juneau/MaxIndentTest.java
index c8e70b6..a916d97 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/MaxIndentTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/MaxIndentTest.java
@@ -264,31 +264,31 @@ public class MaxIndentTest {
 
 	@Test
 	public void a1_serializeJson() throws Exception {
-		WriterSerializer s = SimpleJsonSerializer.DEFAULT_READABLE.builder().maxIndent(input.maxDepth).build();
+		WriterSerializer s = SimpleJsonSerializer.DEFAULT_READABLE.copy().maxIndent(input.maxDepth).build();
 		testSerialize("json", s, input.json);
 	}
 
 	@Test
 	public void b11_serializeXml() throws Exception {
-		WriterSerializer s = XmlSerializer.DEFAULT_SQ_READABLE.builder().maxIndent(input.maxDepth).build();
+		WriterSerializer s = XmlSerializer.DEFAULT_SQ_READABLE.copy().maxIndent(input.maxDepth).build();
 		testSerialize("xml", s, input.xml);
 	}
 
 	@Test
 	public void c11_serializeHtml() throws Exception {
-		WriterSerializer s = HtmlSerializer.DEFAULT_SQ_READABLE.builder().maxIndent(input.maxDepth).build();
+		WriterSerializer s = HtmlSerializer.DEFAULT_SQ_READABLE.copy().maxIndent(input.maxDepth).build();
 		testSerialize("html", s, input.html);
 	}
 
 	@Test
 	public void d11_serializeUon() throws Exception {
-		WriterSerializer s = UonSerializer.DEFAULT_READABLE.builder().maxIndent(input.maxDepth).build();
+		WriterSerializer s = UonSerializer.DEFAULT_READABLE.copy().maxIndent(input.maxDepth).build();
 		testSerialize("uon", s, input.uon);
 	}
 
 	@Test
 	public void e11_serializeUrlEncoding() throws Exception {
-		WriterSerializer s = UrlEncodingSerializer.DEFAULT_READABLE.builder().maxIndent(input.maxDepth).build();
+		WriterSerializer s = UrlEncodingSerializer.DEFAULT_READABLE.copy().maxIndent(input.maxDepth).build();
 		testSerialize("urlEncoding", s, input.urlEnc);
 	}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/ReadWriteOnlyPropertiesTest.java b/juneau-utest/src/test/java/org/apache/juneau/ReadWriteOnlyPropertiesTest.java
index 1df6640..2e4f660 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/ReadWriteOnlyPropertiesTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ReadWriteOnlyPropertiesTest.java
@@ -85,7 +85,7 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void b02_beanAnnotationParser() throws Exception {
-		Bc x = JsonParser.DEFAULT.builder().applyAnnotations(BcConfig.class).build().parse("{f1:1,f2:2}", Bc.class);
+		Bc x = JsonParser.DEFAULT.copy().applyAnnotations(BcConfig.class).build().parse("{f1:1,f2:2}", Bc.class);
 		assertEquals(0, x.f1);
 		assertEquals(2, x.f2);
 	}
@@ -141,31 +141,31 @@ public class ReadWriteOnlyPropertiesTest {
 	public void c01_beanContext_serializer() throws Exception {
 		WriterSerializer sw;
 
-		sw = SimpleJsonSerializer.DEFAULT.builder()
+		sw = SimpleJsonSerializer.DEFAULT.copy()
 			.beanPropertiesReadOnly(C.class.getName(), "f1")
 			.beanPropertiesWriteOnly(C.class.getName(), "f2")
 			.build();
 		assertEquals("{f1:1}", sw.toString(C.create()));
 
-		sw = SimpleJsonSerializer.DEFAULT.builder()
+		sw = SimpleJsonSerializer.DEFAULT.copy()
 			.beanPropertiesReadOnly("ReadWriteOnlyPropertiesTest$C", "f1")
 			.beanPropertiesWriteOnly("ReadWriteOnlyPropertiesTest$C", "f2")
 			.build();
 		assertEquals("{f1:1}", sw.toString(C.create()));
 
-		sw = SimpleJsonSerializer.DEFAULT.builder()
+		sw = SimpleJsonSerializer.DEFAULT.copy()
 			.beanPropertiesReadOnly(C.class, "f1")
 			.beanPropertiesWriteOnly(C.class, "f2")
 			.build();
 		assertEquals("{f1:1}", sw.toString(C.create()));
 
-		sw = SimpleJsonSerializer.DEFAULT.builder()
+		sw = SimpleJsonSerializer.DEFAULT.copy()
 			.beanPropertiesReadOnly(AMap.of(C.class.getName(), "f1"))
 			.beanPropertiesWriteOnly(AMap.of(C.class.getName(), "f2"))
 			.build();
 		assertEquals("{f1:1}", sw.toString(C.create()));
 
-		sw = SimpleJsonSerializer.DEFAULT.builder()
+		sw = SimpleJsonSerializer.DEFAULT.copy()
 			.beanPropertiesReadOnly(AMap.of("ReadWriteOnlyPropertiesTest$C", "f1"))
 			.beanPropertiesWriteOnly(AMap.of("ReadWriteOnlyPropertiesTest$C", "f2"))
 			.build();
@@ -177,7 +177,7 @@ public class ReadWriteOnlyPropertiesTest {
 		ReaderParser rp;
 		C x;
 
-		rp = JsonParser.DEFAULT.builder()
+		rp = JsonParser.DEFAULT.copy()
 			.beanPropertiesReadOnly(C.class.getName(), "f1")
 			.beanPropertiesWriteOnly(C.class.getName(), "f2")
 			.build();
@@ -185,7 +185,7 @@ public class ReadWriteOnlyPropertiesTest {
 		assertEquals(0, x.f1);
 		assertEquals(2, x.f2);
 
-		rp = JsonParser.DEFAULT.builder()
+		rp = JsonParser.DEFAULT.copy()
 			.beanPropertiesReadOnly("ReadWriteOnlyPropertiesTest$C", "f1")
 			.beanPropertiesWriteOnly("ReadWriteOnlyPropertiesTest$C", "f2")
 			.build();
@@ -193,7 +193,7 @@ public class ReadWriteOnlyPropertiesTest {
 		assertEquals(0, x.f1);
 		assertEquals(2, x.f2);
 
-		rp = JsonParser.DEFAULT.builder()
+		rp = JsonParser.DEFAULT.copy()
 			.beanPropertiesReadOnly(C.class, "f1")
 			.beanPropertiesWriteOnly(C.class, "f2")
 			.build();
@@ -201,7 +201,7 @@ public class ReadWriteOnlyPropertiesTest {
 		assertEquals(0, x.f1);
 		assertEquals(2, x.f2);
 
-		rp = JsonParser.DEFAULT.builder()
+		rp = JsonParser.DEFAULT.copy()
 			.beanPropertiesReadOnly(AMap.of(C.class.getName(), "f1"))
 			.beanPropertiesWriteOnly(AMap.of(C.class.getName(), "f2"))
 			.build();
@@ -209,7 +209,7 @@ public class ReadWriteOnlyPropertiesTest {
 		assertEquals(0, x.f1);
 		assertEquals(2, x.f2);
 
-		rp = JsonParser.DEFAULT.builder()
+		rp = JsonParser.DEFAULT.copy()
 			.beanPropertiesReadOnly(AMap.of("ReadWriteOnlyPropertiesTest$C", "f1"))
 			.beanPropertiesWriteOnly(AMap.of("ReadWriteOnlyPropertiesTest$C", "f2"))
 			.build();
@@ -264,12 +264,12 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void d03_beanAnnotation_bproAll_serializer_usingConfig() throws Exception {
-		assertObject(Dc.create()).asString(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(DcConfig.class).build()).is("{f1:1,f2:2}");
+		assertObject(Dc.create()).asString(SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(DcConfig.class).build()).is("{f1:1,f2:2}");
 	}
 
 	@Test
 	public void d04_beanAnnotation_bproAll_Parser_usingConfig() throws Exception {
-		Dc x = JsonParser.DEFAULT.builder().applyAnnotations(DcConfig.class).build().parse("{f1:1,f2:2}", Dc.class);
+		Dc x = JsonParser.DEFAULT.copy().applyAnnotations(DcConfig.class).build().parse("{f1:1,f2:2}", Dc.class);
 		assertEquals(0, x.f1);
 		assertEquals(0, x.f2);
 	}
@@ -320,12 +320,12 @@ public class ReadWriteOnlyPropertiesTest {
 
 	@Test
 	public void e03_beanAnnotation_bpwoAll_serializer_usingConfig() throws Exception {
-		assertObject(E.create()).asString(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(EcConfig.class).build()).is("{}");
+		assertObject(E.create()).asString(SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(EcConfig.class).build()).is("{}");
 	}
 
 	@Test
 	public void e04_beanAnnotation_bpwoAll_Parser_usingConfig() throws Exception {
-		Ec x = JsonParser.DEFAULT.builder().applyAnnotations(EcConfig.class).build().parse("{f1:1,f2:2}", Ec.class);
+		Ec x = JsonParser.DEFAULT.copy().applyAnnotations(EcConfig.class).build().parse("{f1:1,f2:2}", Ec.class);
 		assertEquals(1, x.f1);
 		assertEquals(2, x.f2);
 	}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/XmlValidatorParserBuilder.java b/juneau-utest/src/test/java/org/apache/juneau/XmlValidatorParserBuilder.java
index bc793e0..9ed7e57 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/XmlValidatorParserBuilder.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/XmlValidatorParserBuilder.java
@@ -16,10 +16,6 @@ import org.apache.juneau.xml.*;
 
 public class XmlValidatorParserBuilder extends XmlParserBuilder {
 
-	public XmlValidatorParserBuilder() {
-		super(ContextProperties.DEFAULT);
-	}
-
 	@Override
 	public XmlValidatorParser build() {
 		return new XmlValidatorParser();
diff --git a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
index 91c4e01..39d07b1 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
@@ -280,8 +280,8 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		if (isValidationOnly())
 			return;
 
-		Serializer s = getSerializer().builder().dictionaryOn(C.class, CFilterDictionaryMap.class).build();
-		Parser p = getParser().builder().dictionaryOn(C.class, CFilterDictionaryMap.class).build();
+		Serializer s = getSerializer().copy().dictionaryOn(C.class, CFilterDictionaryMap.class).build();
+		Parser p = getParser().copy().dictionaryOn(C.class, CFilterDictionaryMap.class).build();
 
 		C1 c1 = C1.create();
 		Object r = s.serialize(c1);
@@ -395,8 +395,8 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		if (isValidationOnly())
 			return;
 
-		Serializer s = getSerializer().builder().annotations(BeanAnnotation.create(CA.class).dictionary(CAFilterDictionaryMap.class).build()).build();
-		Parser p = getParser().builder().annotations(BeanAnnotation.create(CA.class).dictionary(CAFilterDictionaryMap.class).build()).build();
+		Serializer s = getSerializer().copy().annotations(BeanAnnotation.create(CA.class).dictionary(CAFilterDictionaryMap.class).build()).build();
+		Parser p = getParser().copy().annotations(BeanAnnotation.create(CA.class).dictionary(CAFilterDictionaryMap.class).build()).build();
 
 		CA1 c1 = CA1.create();
 		Object r = s.serialize(c1);
@@ -472,8 +472,8 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		if (isValidationOnly())
 			return;
 
-		Serializer s = getSerializer().builder().beanProperties(D2.class, "f3,f2").build();
-		Parser p = getParser().builder().beanProperties(D2.class, "f3,f2").build();
+		Serializer s = getSerializer().copy().beanProperties(D2.class, "f3,f2").build();
+		Parser p = getParser().copy().beanProperties(D2.class, "f3,f2").build();
 
 		D2 d = new D2().init();
 		Object r = s.serialize(d);
@@ -530,8 +530,8 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		if (isValidationOnly())
 			return;
 
-		Serializer s = getSerializer().builder().beanPropertiesExcludes(E2.class, "f2").build();
-		Parser p = getParser().builder().beanPropertiesExcludes(E2.class, "f2").build();
+		Serializer s = getSerializer().copy().beanPropertiesExcludes(E2.class, "f2").build();
+		Parser p = getParser().copy().beanPropertiesExcludes(E2.class, "f2").build();
 
 		E2 e = new E2().init();
 		Object r = s.serialize(e);
@@ -586,8 +586,8 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 	//====================================================================================================
 	@Test
 	public void testInterfaceClassUsingBeanFilter() throws Exception {
-		SerializerBuilder s = getSerializer().builder();
-		ParserBuilder p = getParser() == null ? null : getParser().builder();
+		SerializerBuilder s = getSerializer().copy();
+		ParserBuilder p = getParser() == null ? null : getParser().copy();
 		FB2 t;
 		Object r;
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
index c534ee0..0f526eb 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
@@ -256,21 +256,21 @@ public abstract class RoundTripTest {
 	}
 
 	protected void swaps(Object...c) {
-		s = s.builder().swaps(c).build();
+		s = s.copy().swaps(c).build();
 		if (p != null)
-			p = p.builder().swaps(c).build();
+			p = p.copy().swaps(c).build();
 	}
 
 	protected void dictionary(Object...c) {
-		s = s.builder().dictionary(c).build();
+		s = s.copy().dictionary(c).build();
 		if (p != null)
-			p = p.builder().dictionary(c).build();
+			p = p.copy().dictionary(c).build();
 	}
 
 	protected void applyAnnotations(Class<?>...fromClasses) {
-		s = s.builder().applyAnnotations(fromClasses).build();
+		s = s.copy().applyAnnotations(fromClasses).build();
 		if (p != null)
-			p = p.builder().applyAnnotations(fromClasses).build();
+			p = p.copy().applyAnnotations(fromClasses).build();
 	}
 
 	public boolean isValidationOnly() {
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 6142acb..f2911ed 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
@@ -286,7 +286,7 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 	//====================================================================================================
 	@Test
 	public void testSubTypeWithGenerics() throws Exception {
-		JsonSerializer s = JsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
+		JsonSerializer s = JsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build();
 
 		C1 c1 = C3.create();
 		String r = s.serialize(c1);
@@ -434,8 +434,8 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 
 	@Test
 	public void testSurrogatesThroughAnnotation_usingConfig() throws Exception {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(E1cConfig.class).build();
-		JsonParser p = JsonParser.DEFAULT.builder().applyAnnotations(E1cConfig.class).build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(E1cConfig.class).build();
+		JsonParser p = JsonParser.DEFAULT.copy().applyAnnotations(E1cConfig.class).build();
 		Object r;
 		E1c x = E1c.create();
 
@@ -546,8 +546,8 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 
 	@Test
 	public void testSwapOnPrivateField_usingConfig() throws Exception {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(F1cConfig.class).build();
-		JsonParser p = JsonParser.DEFAULT.builder().applyAnnotations(F1cConfig.class).build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(F1cConfig.class).build();
+		JsonParser p = JsonParser.DEFAULT.copy().applyAnnotations(F1cConfig.class).build();
 
 		F1c x = F1c.create();
 		String r = null;
@@ -630,8 +630,8 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 
 	@Test
 	public void testSwapOnPrivateField_Inherited_usingConfig() throws Exception {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(F2ac.class).build();
-		JsonParser p = JsonParser.DEFAULT.builder().applyAnnotations(F2ac.class).build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(F2ac.class).build();
+		JsonParser p = JsonParser.DEFAULT.copy().applyAnnotations(F2ac.class).build();
 
 		F2 x = F2.create();
 		String r = null;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
index 51431c9..0b68167 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripTrimStringsTest.java
@@ -41,8 +41,8 @@ public class RoundTripTrimStringsTest extends RoundTripTest {
 		Parser p = getParser();
 		Object in, a, e;
 
-		Serializer s2 = s.builder().trimStrings().build();
-		Parser p2 = p.builder().trimStrings().build();
+		Serializer s2 = s.copy().trimStrings().build();
+		Parser p2 = p.copy().trimStrings().build();
 
 		in = " foo bar ";
 		e = "foo bar";
diff --git a/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanIgnore_Test.java b/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanIgnore_Test.java
index 756e0d3..2b3daa7 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanIgnore_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/annotation/BeanIgnore_Test.java
@@ -65,7 +65,7 @@ public class BeanIgnore_Test {
 
 	@Test
 	public void testBeanIgnoreOnProperties_usingConfig() throws Exception {
-		assertObject(new Ac()).asString(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(AcConfig.class).build()).is("{c:'c',a:'a'}");
+		assertObject(new Ac()).asString(SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(AcConfig.class).build()).is("{c:'c',a:'a'}");
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
@@ -119,7 +119,7 @@ public class BeanIgnore_Test {
 
 	@Test
 	public void testBeanIgnoreOnBean_usingConfig() throws Exception {
-		assertObject(new Bc()).asString(SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(B1cConfig.class).build()).is("{f2:2,f3:'xxx',f4:'xxx'}");
+		assertObject(new Bc()).asString(SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(B1cConfig.class).build()).is("{f2:2,f3:'xxx',f4:'xxx'}");
 	}
 }
 
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 0674fbd..2b11cd5 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
@@ -30,7 +30,7 @@ public class ConfigInterfaceTest {
 	ConfigInterface proxy;
 
 	public ConfigInterfaceTest() throws Exception {
-		cf = Config.create().serializer(SimpleJsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build()).build();
+		cf = Config.create().serializer(SimpleJsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build()).build();
 		proxy = cf.getSectionAsInterface("A", ConfigInterface.class);
 	}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/config/ConfigTest.java b/juneau-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
index 06b9205..786a4bf 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
@@ -1187,7 +1187,7 @@ public class ConfigTest {
 	//====================================================================================================
 	@Test
 	public void testHex() throws Exception {
-		Config cf = init().builder().binaryFormat(BinaryFormat.HEX).build();
+		Config cf = init().copy().binaryFormat(BinaryFormat.HEX).build();
 
 		cf.set("foo", "bar".getBytes("UTF-8"));
 		assertEquals("626172", cf.get("foo"));
@@ -1199,7 +1199,7 @@ public class ConfigTest {
 	//====================================================================================================
 	@Test
 	public void testSpacedHex() throws Exception {
-		Config cf = init().builder().binaryFormat(BinaryFormat.SPACED_HEX).build();
+		Config cf = init().copy().binaryFormat(BinaryFormat.SPACED_HEX).build();
 
 		cf.set("foo", "bar".getBytes("UTF-8"));
 		assertEquals("62 61 72", cf.get("foo"));
@@ -1472,7 +1472,7 @@ public class ConfigTest {
 		assertEquals("$D{X}", cf.getString("e"));
 
 		// Create new resolver that addx $C and overrides $A
-		VarResolver vr2 = vr.builder().vars(AUVar.class, DUVar.class).build();
+		VarResolver vr2 = vr.copy().vars(AUVar.class, DUVar.class).build();
 
 		// true == augment by adding existing as parent to the new resolver
 		cf = cf.resolving(vr2.createSession());
diff --git a/juneau-utest/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java b/juneau-utest/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
index 0901556..4cc804c 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/encoders/EncoderGroupTest.java
@@ -71,11 +71,11 @@ public class EncoderGroupTest {
 		g = gb.build();
 		assertObject(g.getSupportedEncodings()).asJson().is("['E1','E2','E2a']");
 
-		gb = g.builder().append(E3.class, E4.class);
+		gb = g.copy().append(E3.class, E4.class);
 		g = gb.build();
 		assertObject(g.getSupportedEncodings()).asJson().is("['E3','E4','E4a','E1','E2','E2a']");
 
-		gb = g.builder().append(E5.class);
+		gb = g.copy().append(E5.class);
 		g = gb.build();
 		assertObject(g.getSupportedEncodings()).asJson().is("['E5','E3','E4','E4a','E1','E2','E2a']");
 	}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/html/BasicHtml_Test.java b/juneau-utest/src/test/java/org/apache/juneau/html/BasicHtml_Test.java
index b97afb0..75f4e6a 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/html/BasicHtml_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/html/BasicHtml_Test.java
@@ -37,10 +37,10 @@ public class BasicHtml_Test {
 		BeanWithWhitespaceTextFields2Config.class, BeanWithWhitespaceTextPwsFields2Config.class, BeanWithWhitespaceMixedFields2Config.class, BeanWithWhitespaceMixedPwsFields2Config.class, LinkBeanCConfig.class
 	};
 	private static final HtmlSerializer
-		s1 = HtmlSerializer.DEFAULT_SQ.builder().addRootType().applyAnnotations(ANNOTATED_CLASSES).build(),
-		s2 = HtmlSerializer.DEFAULT_SQ_READABLE.builder().addRootType().applyAnnotations(ANNOTATED_CLASSES).build(),
-		s3 = HtmlSerializer.DEFAULT_SQ.builder().applyAnnotations(ANNOTATED_CLASSES).build();
-	private static final HtmlParser parser = HtmlParser.DEFAULT.builder().applyAnnotations(ANNOTATED_CLASSES).build();
+		s1 = HtmlSerializer.DEFAULT_SQ.copy().addRootType().applyAnnotations(ANNOTATED_CLASSES).build(),
+		s2 = HtmlSerializer.DEFAULT_SQ_READABLE.copy().addRootType().applyAnnotations(ANNOTATED_CLASSES).build(),
+		s3 = HtmlSerializer.DEFAULT_SQ.copy().applyAnnotations(ANNOTATED_CLASSES).build();
+	private static final HtmlParser parser = HtmlParser.DEFAULT.copy().applyAnnotations(ANNOTATED_CLASSES).build();
 
 	@Parameterized.Parameters
 	public static Collection<Object[]> getParameters() {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/html/Html_Test.java b/juneau-utest/src/test/java/org/apache/juneau/html/Html_Test.java
index 902429c..5654cce 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/html/Html_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/html/Html_Test.java
@@ -348,7 +348,7 @@ public class Html_Test {
 
 	@Test
 	public void d02_testNoTableHeaders_usingConfig() throws Exception {
-		HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.builder().applyAnnotations(MyMap2Config.class).build();
+		HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.copy().applyAnnotations(MyMap2Config.class).build();
 		Object o = null;
 		String r;
 
@@ -386,7 +386,7 @@ public class Html_Test {
 
 	@Test
 	public void d04_testNoTableHeadersOnBeans_usingConfig() throws Exception {
-		HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.builder().applyAnnotations(MyBean2Config.class).build();
+		HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.copy().applyAnnotations(MyBean2Config.class).build();
 		Object o = null;
 		String r;
 
@@ -405,7 +405,7 @@ public class Html_Test {
 
 	@Test
 	public void d05_testNoTableHeadersOnBeans_usingConcreteAnnotation() throws Exception {
-		HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.builder().annotations(HtmlAnnotation.create("MyBean2").noTables(true).build()).build();
+		HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.copy().annotations(HtmlAnnotation.create("MyBean2").noTables(true).build()).build();
 		Object o = null;
 		String r;
 
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 fba4487..2d5dacc 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
@@ -49,14 +49,14 @@ public class RrpcInterfaceTest {
 	@Parameterized.Parameters
 	public static Collection<Object[]> getParameters() {
 		return Arrays.asList(new Object[][] {
-			{ /* 0 */ "Json", JsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), JsonParser.DEFAULT },
-			{ /* 1 */ "Xml", XmlSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), XmlParser.DEFAULT },
-			{ /* 2 */ "Mixed", JsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), XmlParser.DEFAULT },
-			{ /* 3 */ "Html", HtmlSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), HtmlParser.DEFAULT },
-			{ /* 4 */ "MessagePack", MsgPackSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), MsgPackParser.DEFAULT },
-			{ /* 5 */ "UrlEncoding", UrlEncodingSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), UrlEncodingParser.DEFAULT },
-			{ /* 6 */ "Uon", UonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), UonParser.DEFAULT },
-			{ /* 7 */ "RdfXml", RdfXmlAbbrevSerializer.DEFAULT.builder().addBeanTypes().addRootType().build(), RdfXmlParser.DEFAULT },
+			{ /* 0 */ "Json", JsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), JsonParser.DEFAULT },
+			{ /* 1 */ "Xml", XmlSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), XmlParser.DEFAULT },
+			{ /* 2 */ "Mixed", JsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), XmlParser.DEFAULT },
+			{ /* 3 */ "Html", HtmlSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), HtmlParser.DEFAULT },
+			{ /* 4 */ "MessagePack", MsgPackSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), MsgPackParser.DEFAULT },
+			{ /* 5 */ "UrlEncoding", UrlEncodingSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), UrlEncodingParser.DEFAULT },
+			{ /* 6 */ "Uon", UonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), UonParser.DEFAULT },
+			{ /* 7 */ "RdfXml", RdfXmlAbbrevSerializer.DEFAULT.copy().addBeanTypes().addRootType().build(), RdfXmlParser.DEFAULT },
 		});
 	}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/json/JsonParserEdgeCasesTest.java b/juneau-utest/src/test/java/org/apache/juneau/json/JsonParserEdgeCasesTest.java
index 51e16c4..882b6e2 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/json/JsonParserEdgeCasesTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/json/JsonParserEdgeCasesTest.java
@@ -372,9 +372,9 @@ public class JsonParserEdgeCasesTest {
 	public void testStrict() throws Exception {
 		JsonParser p = JsonParser.DEFAULT_STRICT;
 		if (name.contains("utf16LE"))
-			p = p.builder().streamCharset(Charset.forName("UTF-16LE")).build();
+			p = p.copy().streamCharset(Charset.forName("UTF-16LE")).build();
 		else if (name.contains("utf16BE"))
-			p = p.builder().streamCharset(Charset.forName("UTF-16BE")).build();
+			p = p.copy().streamCharset(Charset.forName("UTF-16BE")).build();
 
 		// 'y' tests should always succeed.
 		if (expected == 'y') {
@@ -417,9 +417,9 @@ public class JsonParserEdgeCasesTest {
 	public void testLax() throws Exception {
 		JsonParser p = JsonParser.DEFAULT;
 		if (name.contains("utf16LE"))
-			p = p.builder().streamCharset(Charset.forName("UTF-16LE")).build();
+			p = p.copy().streamCharset(Charset.forName("UTF-16LE")).build();
 		else if (name.contains("utf16BE"))
-			p = p.builder().streamCharset(Charset.forName("UTF-16BE")).build();
+			p = p.copy().streamCharset(Charset.forName("UTF-16BE")).build();
 
 		// 'y' tests should always succeed.
 		if (expected == 'y') {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/json/JsonParserTest.java b/juneau-utest/src/test/java/org/apache/juneau/json/JsonParserTest.java
index 309fa3d..d44442a 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/json/JsonParserTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/json/JsonParserTest.java
@@ -221,7 +221,7 @@ public class JsonParserTest {
 	//====================================================================================================
 	@Test
 	public void testStreamsAutoClose() throws Exception {
-		ReaderParser p = JsonParser.DEFAULT.builder().autoCloseStreams().build();
+		ReaderParser p = JsonParser.DEFAULT.copy().autoCloseStreams().build();
 		Object x;
 		Reader r;
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/json/JsonTest.java b/juneau-utest/src/test/java/org/apache/juneau/json/JsonTest.java
index 910b79e..8022b27 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/json/JsonTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/json/JsonTest.java
@@ -228,8 +228,8 @@ public class JsonTest {
 
 	@Test
 	public void testWrapperAttrAnnotationOnBean_usingConfig() throws Exception {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(A2Config.class).build();
-		JsonParser p = JsonParser.DEFAULT.builder().applyAnnotations(A2Config.class).build();
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(A2Config.class).build();
+		JsonParser p = JsonParser.DEFAULT.copy().applyAnnotations(A2Config.class).build();
 		String r;
 
 		A2 t = A2.create();
@@ -310,8 +310,8 @@ public class JsonTest {
 
 	@Test
 	public void testWrapperAttrAnnotationOnNonBean_usingConfig() throws Exception {
-		JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(B2Config.class).build();
-		JsonParser p = JsonParser.DEFAULT.builder().applyAnnotations(B2Config.class).build();;
+		JsonSerializer s = SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(B2Config.class).build();
+		JsonParser p = JsonParser.DEFAULT.copy().applyAnnotations(B2Config.class).build();;
 		String r;
 
 		B2 t = B2.create();
diff --git a/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java b/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
index 2f556fe..7889793 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
@@ -187,28 +187,28 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void useBeanDefs() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{'$ref':'#/definitions/SimpleBean'}");
 		assertObject(s.getBeanDefs()).asJson().is("{SimpleBean:{type:'object',properties:{f1:{type:'string'}}}}");
 	}
 
 	@Test
 	public void useBeanDefs_beanList() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().build().createSession();
 		assertObject(s.getSchema(BeanList.class)).asJson().is("{type:'array',items:{'$ref':'#/definitions/SimpleBean'}}");
 		assertObject(s.getBeanDefs()).asJson().is("{SimpleBean:{type:'object',properties:{f1:{type:'string'}}}}");
 	}
 
 	@Test
 	public void useBeanDefs_beanList2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().build().createSession();
 		assertObject(s.getSchema(BeanList2d.class)).asJson().is("{type:'array',items:{type:'array',items:{'$ref':'#/definitions/SimpleBean'}}}");
 		assertObject(s.getBeanDefs()).asJson().is("{SimpleBean:{type:'object',properties:{f1:{type:'string'}}}}");
 	}
 
 	@Test
 	public void useBeanDefs_beanArray2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().build().createSession();
 		assertObject(s.getSchema(SimpleBean[][].class)).asJson().is("{type:'array',items:{type:'array',items:{'$ref':'#/definitions/SimpleBean'}}}");
 		assertObject(s.getBeanDefs()).asJson().is("{SimpleBean:{type:'object',properties:{f1:{type:'string'}}}}");
 	}
@@ -219,7 +219,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void beanDefsPreloaded() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().build().createSession();
 		s.addBeanDef("SimpleBean", new OMap().a("test", 123));
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{'$ref':'#/definitions/SimpleBean'}");
 		assertObject(s.getBeanDefs()).asJson().is("{SimpleBean:{test:123}}");
@@ -227,7 +227,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void useBeanDefsPreloaded_beanList() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().build().createSession();
 		s.addBeanDef("SimpleBean", new OMap().a("test", 123));
 		assertObject(s.getSchema(BeanList.class)).asJson().is("{type:'array',items:{'$ref':'#/definitions/SimpleBean'}}");
 		assertObject(s.getBeanDefs()).asJson().is("{SimpleBean:{test:123}}");
@@ -235,7 +235,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void useBeanDefsPreloaded_beanList2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().build().createSession();
 		s.addBeanDef("SimpleBean", new OMap().a("test", 123));
 		assertObject(s.getSchema(BeanList2d.class)).asJson().is("{type:'array',items:{type:'array',items:{'$ref':'#/definitions/SimpleBean'}}}");
 		assertObject(s.getBeanDefs()).asJson().is("{SimpleBean:{test:123}}");
@@ -243,7 +243,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void useBeanDefsPreloaded_beanArray2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().build().createSession();
 		s.addBeanDef("SimpleBean", new OMap().a("test", 123));
 		assertObject(s.getSchema(SimpleBean[][].class)).asJson().is("{type:'array',items:{type:'array',items:{'$ref':'#/definitions/SimpleBean'}}}");
 		assertObject(s.getBeanDefs()).asJson().is("{SimpleBean:{test:123}}");
@@ -255,14 +255,14 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void customBeanDefMapper() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().beanDefMapper(CustomBeanDefMapper.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().beanDefMapper(CustomBeanDefMapper.class).build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{'$ref':'#/definitions/org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean'}");
 		assertObject(s.getBeanDefs()).asJson().is("{'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean':{type:'object',properties:{f1:{type:'string'}}}}");
 	}
 
 	@Test
 	public void customBeanDefMapperInstance() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().beanDefMapper(new CustomBeanDefMapper()).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().beanDefMapper(new CustomBeanDefMapper()).build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{'$ref':'#/definitions/org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean'}");
 		assertObject(s.getBeanDefs()).asJson().is("{'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean':{type:'object',properties:{f1:{type:'string'}}}}");
 	}
@@ -276,7 +276,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void customBeanDefMapper_customURI() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useBeanDefs().beanDefMapper(CustomBeanDefMapper2.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useBeanDefs().beanDefMapper(CustomBeanDefMapper2.class).build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{'$ref':'/foo/bar/org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean'}");
 		assertObject(s.getBeanDefs()).asJson().is("{'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean':{type:'object',properties:{f1:{type:'string'}}}}");
 	}
@@ -298,13 +298,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_BEAN_noBeanExample() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleMethod() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").build().createSession();
 		assertObject(s.getSchema(B1.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}");
 	}
 
@@ -312,13 +312,13 @@ public class JsonSchemaGeneratorTest {
 	public void addExample_BEAN_exampleMethod_wDefault() throws Exception {
 		B1 b = new B1();
 		b.f1 = "baz";
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").example(B1.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").example(B1.class, b).build().createSession();
 		assertObject(s.getSchema(B1.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'baz'}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleMethod_array2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").build().createSession();
 		assertObject(s.getSchema(B1[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -334,7 +334,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_BEAN_exampleMethod_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B1cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B1cConfig.class).build().createSession();
 		assertObject(s.getSchema(B1c.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}");
 	}
 
@@ -342,13 +342,13 @@ public class JsonSchemaGeneratorTest {
 	public void addExample_BEAN_exampleMethod_wDefault_usingConfig() throws Exception {
 		B1c b = new B1c();
 		b.f1 = "baz";
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B1cConfig.class).example(B1c.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B1cConfig.class).example(B1c.class, b).build().createSession();
 		assertObject(s.getSchema(B1c.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'baz'}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleMethod_array2d_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B1cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B1cConfig.class).build().createSession();
 		assertObject(s.getSchema(B1c[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -370,13 +370,13 @@ public class JsonSchemaGeneratorTest {
 	public void addExample_BEAN_exampleMethodOverridden_wDefault() throws Exception {
 		B2 b = new B2();
 		b.f1 = "baz";
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").example(B2.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").example(B2.class, b).build().createSession();
 		assertObject(s.getSchema(B2.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'baz'}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleMethodOverridden_array2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").build().createSession();
 		assertObject(s.getSchema(B2[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -394,13 +394,13 @@ public class JsonSchemaGeneratorTest {
 	public void addExample_BEAN_exampleMethodOverridden_wDefault_usingConfig() throws Exception {
 		B2c b = new B2c();
 		b.f1 = "baz";
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B2cConfig.class).example(B2c.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B2cConfig.class).example(B2c.class, b).build().createSession();
 		assertObject(s.getSchema(B2c.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'baz'}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleMethodOverridden_array2d_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B2cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B2cConfig.class).build().createSession();
 		assertObject(s.getSchema(B2c[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -420,13 +420,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_BEAN_exampleField() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").build().createSession();
 		assertObject(s.getSchema(B3.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleField_array2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").build().createSession();
 		assertObject(s.getSchema(B3[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -444,13 +444,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_BEAN_exampleField_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B3cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B3cConfig.class).build().createSession();
 		assertObject(s.getSchema(B3c.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleField_array2d_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B3cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B3cConfig.class).build().createSession();
 		assertObject(s.getSchema(B3c[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -470,13 +470,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_BEAN_exampleBeanAnnotation() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").build().createSession();
 		assertObject(s.getSchema(B4.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleBeanAnnotation_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").build().createSession();
 		assertObject(s.getSchema(B4[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -485,13 +485,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_BEAN_exampleBeanAnnotation_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B4cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B4cConfig.class).build().createSession();
 		assertObject(s.getSchema(B4c.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}");
 	}
 
 	@Test
 	public void addExample_BEAN_exampleBeanAnnotation_2darray_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").applyAnnotations(B4cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").applyAnnotations(B4cConfig.class).build().createSession();
 		assertObject(s.getSchema(B4c[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -504,7 +504,7 @@ public class JsonSchemaGeneratorTest {
 	public void addExample_BEAN_exampleBeanProperty() throws Exception {
 		SimpleBean b = new SimpleBean();
 		b.f1 = "foobar";
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").example(SimpleBean.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").example(SimpleBean.class, b).build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}");
 	}
 
@@ -512,7 +512,7 @@ public class JsonSchemaGeneratorTest {
 	public void addExample_BEAN_exampleBeanProperty_2darray() throws Exception {
 		SimpleBean b = new SimpleBean();
 		b.f1 = "foobar";
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("bean").example(SimpleBean.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("bean").example(SimpleBean.class, b).build().createSession();
 		assertObject(s.getSchema(SimpleBean[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},example:{f1:'foobar'}}}}");
 	}
 
@@ -522,13 +522,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_MAP_noExample() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").build().createSession();
 		assertObject(s.getSchema(BeanMap.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}}}");
 	}
 
 	@Test
 	public void addExample_MAP_exampleMethod() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").build().createSession();
 		assertObject(s.getSchema(C1.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}");
 	}
 
@@ -536,7 +536,7 @@ public class JsonSchemaGeneratorTest {
 	public void addExample_MAP_exampleMethod_wDefault() throws Exception {
 		C1 b = new C1();
 		b.put(456, B1.example());
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").example(C1.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").example(C1.class, b).build().createSession();
 		assertObject(s.getSchema(C1.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'456':{f1:'foobar'}}}");
 	}
 
@@ -553,7 +553,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_MAP_exampleMethod_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").applyAnnotations(C1cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").applyAnnotations(C1cConfig.class).build().createSession();
 		assertObject(s.getSchema(C1c.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}");
 	}
 
@@ -561,7 +561,7 @@ public class JsonSchemaGeneratorTest {
 	public void addExample_MAP_exampleMethod_wDefault_usingConfig() throws Exception {
 		C1c b = new C1c();
 		b.put(456, B1.example());
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").applyAnnotations(C1cConfig.class).example(C1c.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").applyAnnotations(C1cConfig.class).example(C1c.class, b).build().createSession();
 		assertObject(s.getSchema(C1c.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'456':{f1:'foobar'}}}");
 	}
 
@@ -580,13 +580,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_MAP_exampleField() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").build().createSession();
 		assertObject(s.getSchema(C2.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}");
 	}
 
 	@Test
 	public void addExample_MAP_exampleField_array2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").build().createSession();
 		assertObject(s.getSchema(C2[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}}}");
 	}
 
@@ -605,13 +605,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_MAP_exampleField_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").applyAnnotations(C2cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").applyAnnotations(C2cConfig.class).build().createSession();
 		assertObject(s.getSchema(C2c.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}");
 	}
 
 	@Test
 	public void addExample_MAP_exampleField_array2d_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").applyAnnotations(C2cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").applyAnnotations(C2cConfig.class).build().createSession();
 		assertObject(s.getSchema(C2c[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}}}");
 	}
 
@@ -632,13 +632,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_MAP_exampleBeanAnnotation() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").build().createSession();
 		assertObject(s.getSchema(C3.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'baz'}}}");
 	}
 
 	@Test
 	public void addExample_MAP_exampleBeanAnnotation_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").build().createSession();
 		assertObject(s.getSchema(C3[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'baz'}}}}}");
 	}
 
@@ -648,13 +648,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_MAP_exampleBeanAnnotation_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").applyAnnotations(C3cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").applyAnnotations(C3cConfig.class).build().createSession();
 		assertObject(s.getSchema(C3c.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'baz'}}}");
 	}
 
 	@Test
 	public void addExample_MAP_exampleBeanAnnotation_2darray_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").applyAnnotations(C3cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").applyAnnotations(C3cConfig.class).build().createSession();
 		assertObject(s.getSchema(C3c[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'baz'}}}}}");
 	}
 
@@ -666,13 +666,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_MAP_exampleBeanProperty() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").example(BeanMap.class, C1.example()).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").example(BeanMap.class, C1.example()).build().createSession();
 		assertObject(s.getSchema(BeanMap.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}");
 	}
 
 	@Test
 	public void addExample_MAP_exampleBeanProperty_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("map").example(BeanMap.class, C1.example()).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("map").example(BeanMap.class, C1.example()).build().createSession();
 		assertObject(s.getSchema(BeanMap[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}}}");
 	}
 
@@ -682,13 +682,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_COLLECTION_noExample() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").build().createSession();
 		assertObject(s.getSchema(BeanList.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}}}");
 	}
 
 	@Test
 	public void addExample_COLLECTION_exampleMethod() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").build().createSession();
 		assertObject(s.getSchema(D1.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'foobar'}]}");
 	}
 
@@ -698,7 +698,7 @@ public class JsonSchemaGeneratorTest {
 		SimpleBean sb = new SimpleBean();
 		sb.f1 = "baz";
 		b.add(sb);
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").example(D1.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").example(D1.class, b).build().createSession();
 		assertObject(s.getSchema(D1.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'baz'}]}");
 	}
 
@@ -715,7 +715,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_COLLECTION_exampleMethod_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").applyAnnotations(D1c.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").applyAnnotations(D1c.class).build().createSession();
 		assertObject(s.getSchema(D1c.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'foobar'}]}");
 	}
 
@@ -725,7 +725,7 @@ public class JsonSchemaGeneratorTest {
 		SimpleBean sb = new SimpleBean();
 		sb.f1 = "baz";
 		b.add(sb);
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").applyAnnotations(D1cConfig.class).example(D1c.class, b).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").applyAnnotations(D1cConfig.class).example(D1c.class, b).build().createSession();
 		assertObject(s.getSchema(D1c.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'baz'}]}");
 	}
 
@@ -744,13 +744,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_COLLECTION_exampleField() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").build().createSession();
 		assertObject(s.getSchema(D2.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'foobar'}]}");
 	}
 
 	@Test
 	public void addExample_ARRAY_exampleField_array2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("array").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("array").build().createSession();
 		assertObject(s.getSchema(D2[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}}}}},example:[[[{f1:'foobar'}]]]}");
 	}
 
@@ -769,13 +769,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_COLLECTION_exampleField_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").applyAnnotations(D2cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").applyAnnotations(D2cConfig.class).build().createSession();
 		assertObject(s.getSchema(D2c.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'foobar'}]}");
 	}
 
 	@Test
 	public void addExample_ARRAY_exampleField_array2d_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("array").applyAnnotations(D2cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("array").applyAnnotations(D2cConfig.class).build().createSession();
 		assertObject(s.getSchema(D2c[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}}}}},example:[[[{f1:'foobar'}]]]}");
 	}
 
@@ -796,13 +796,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_COLLECTION_exampleBeanAnnotation() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").build().createSession();
 		assertObject(s.getSchema(D3.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'baz'}]}");
 	}
 
 	@Test
 	public void addExample_ARRAY_exampleBeanAnnotation_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("array").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("array").build().createSession();
 		assertObject(s.getSchema(D3[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}}}}},example:[[[{f1:'baz'}]]]}");
 	}
 
@@ -812,13 +812,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_COLLECTION_exampleBeanAnnotation_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").applyAnnotations(D3cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").applyAnnotations(D3cConfig.class).build().createSession();
 		assertObject(s.getSchema(D3c.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'baz'}]}");
 	}
 
 	@Test
 	public void addExample_ARRAY_exampleBeanAnnotation_2darray_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("array").applyAnnotations(D3cConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("array").applyAnnotations(D3cConfig.class).build().createSession();
 		assertObject(s.getSchema(D3c[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}}}}},example:[[[{f1:'baz'}]]]}");
 	}
 
@@ -830,13 +830,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_COLLECTION_exampleBeanProperty() throws Exception {
-		JsonSchemaGeneratorSession s =JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("collection").example(BeanList.class, D1.example()).build().createSession();
+		JsonSchemaGeneratorSession s =JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("collection").example(BeanList.class, D1.example()).build().createSession();
 		assertObject(s.getSchema(BeanList.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'foobar'}]}");
 	}
 
 	@Test
 	public void addExample_ARRAY_exampleBeanProperty_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("array").example(BeanList.class, D1.example()).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("array").example(BeanList.class, D1.example()).build().createSession();
 		assertObject(s.getSchema(BeanList[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}}}}},example:[[[{f1:'foobar'}]]]}");
 	}
 
@@ -845,14 +845,14 @@ public class JsonSchemaGeneratorTest {
 	//====================================================================================================
 	@Test
 	public void addExample_BOOLEAN() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("boolean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("boolean").build().createSession();
 		assertObject(s.getSchema(boolean.class)).asJson().is("{type:'boolean',example:true}");
 		assertObject(s.getSchema(Boolean.class)).asJson().is("{type:'boolean',example:true}");
 	}
 
 	@Test
 	public void addExample_BOOLEAN_wDefault() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("boolean")
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("boolean")
 			.example(boolean.class, false)
 			.example(Boolean.class, false)
 			.build().createSession();
@@ -862,7 +862,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_BOOLEAN_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("boolean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("boolean").build().createSession();
 		assertObject(s.getSchema(boolean[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'boolean',example:true}}}");
 		assertObject(s.getSchema(Boolean[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'boolean',example:true}}}");
 	}
@@ -872,7 +872,7 @@ public class JsonSchemaGeneratorTest {
 	//====================================================================================================
 	@Test
 	public void addExample_NUMBER() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("number").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("number").build().createSession();
 		assertObject(s.getSchema(short.class)).asJson().is("{type:'integer',format:'int16',example:1}");
 		assertObject(s.getSchema(Short.class)).asJson().is("{type:'integer',format:'int16',example:1}");
 		assertObject(s.getSchema(int.class)).asJson().is("{type:'integer',format:'int32',example:1}");
@@ -887,7 +887,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_NUMBER_wDefault() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("number")
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("number")
 			.example(short.class, (short)2)
 			.example(Short.class, (short)3)
 			.example(int.class, 4)
@@ -913,7 +913,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_NUMBER_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("number").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("number").build().createSession();
 		assertObject(s.getSchema(short[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'integer',format:'int16',example:1}}}");
 		assertObject(s.getSchema(Short[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'integer',format:'int16',example:1}}}");
 		assertObject(s.getSchema(int[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'integer',format:'int32',example:1}}}");
@@ -932,7 +932,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_STRING() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("string").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("string").build().createSession();
 		assertObject(s.getSchema(String.class)).asJson().is("{type:'string',example:'foo'}");
 		assertObject(s.getSchema(StringBuilder.class)).asJson().is("{type:'string',example:'foo'}");
 		assertObject(s.getSchema(Character.class)).asJson().is("{type:'string',example:'a'}");
@@ -941,7 +941,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_STRING_wDefault() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("string")
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("string")
 			.example(StringBuilder.class, new StringBuilder("foo"))
 			.example(Character.class, 'b')
 			.example(char.class, 'c')
@@ -953,7 +953,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_STRING_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("string").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("string").build().createSession();
 		assertObject(s.getSchema(String[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string',example:'foo'}}}");
 		assertObject(s.getSchema(StringBuilder[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string',example:'foo'}}}");
 		assertObject(s.getSchema(Character[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string',example:'a'}}}");
@@ -962,7 +962,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_STRING_2darray_wDefault() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("string")
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("string")
 			.example(StringBuilder.class, new StringBuilder("foo"))
 			.example(Character.class, 'b')
 			.example(char.class, 'c')
@@ -978,37 +978,37 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_ENUM() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("enum").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("enum").build().createSession();
 		assertObject(s.getSchema(TestEnumToString.class)).asJson().is("{type:'string','enum':['one','two','three'],example:'one'}");
 	}
 
 	@Test
 	public void addExample_ENUM_wDefault() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("enum").example(TestEnumToString.class, TestEnumToString.TWO).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("enum").example(TestEnumToString.class, TestEnumToString.TWO).build().createSession();
 		assertObject(s.getSchema(TestEnumToString.class)).asJson().is("{type:'string','enum':['one','two','three'],example:'two'}");
 	}
 
 	@Test
 	public void addExample_ENUM_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("enum").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("enum").build().createSession();
 		assertObject(s.getSchema(TestEnumToString[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string','enum':['one','two','three'],example:'one'}}}");
 	}
 
 	@Test
 	public void addExample_ENUM_useEnumNames() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useEnumNames().addExamplesTo("enum").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useEnumNames().addExamplesTo("enum").build().createSession();
 		assertObject(s.getSchema(TestEnumToString.class)).asJson().is("{type:'string','enum':['ONE','TWO','THREE'],example:'ONE'}");
 	}
 
 	@Test
 	public void addExample_ENUM_wDefault_useEnumNames() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useEnumNames().addExamplesTo("enum").example(TestEnumToString.class, "'TWO'").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useEnumNames().addExamplesTo("enum").example(TestEnumToString.class, "'TWO'").build().createSession();
 		assertObject(s.getSchema(TestEnumToString.class)).asJson().is("{type:'string','enum':['ONE','TWO','THREE'],example:'TWO'}");
 	}
 
 	@Test
 	public void addExample_ENUM_2darray_useEnumNames() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useEnumNames().addExamplesTo("enum").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().useEnumNames().addExamplesTo("enum").build().createSession();
 		assertObject(s.getSchema(TestEnumToString[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string','enum':['ONE','TWO','THREE'],example:'ONE'}}}");
 	}
 
@@ -1017,7 +1017,7 @@ public class JsonSchemaGeneratorTest {
 	//====================================================================================================
 	@Test
 	public void addExample_ANY() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("any").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addExamplesTo("any").build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{type:'object',properties:{f1:{type:'string',example:'foo'}}}");
 		assertObject(s.getSchema(C1.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},example:{'123':{f1:'foobar'}}}");
 		assertObject(s.getSchema(D1.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},example:[{f1:'foobar'}]}");
@@ -1046,13 +1046,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addDescription_BEAN() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("bean").build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean'}");
 	}
 
 	@Test
 	public void addDescription_BEAN_array2d() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("bean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("bean").build().createSession();
 		assertObject(s.getSchema(SimpleBean[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean'}}}");
 	}
 
@@ -1062,13 +1062,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addDescription_MAP() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("map").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("map").build().createSession();
 		assertObject(s.getSchema(BeanMap.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$BeanMap<java.lang.Integer,org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean>'}");
 	}
 
 	@Test
 	public void addDescription_MAP_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("map").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("map").build().createSession();
 		assertObject(s.getSchema(BeanMap[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$BeanMap<java.lang.Integer,org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean>'}}}");
 	}
 
@@ -1078,19 +1078,19 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addDescription_COLLECTION() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("collection").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("collection").build().createSession();
 		assertObject(s.getSchema(BeanList.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$BeanList<org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean>'}");
 	}
 
 	@Test
 	public void addDescription_COLLECTION_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("collection").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("collection").build().createSession();
 		assertObject(s.getSchema(BeanList[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$BeanList<org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean>'}}}");
 	}
 
 	@Test
 	public void addDescription_ARRAY() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("array").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("array").build().createSession();
 		assertObject(s.getSchema(BeanList[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'array',items:{type:'object',properties:{f1:{type:'string'}}}}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$BeanList<org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean>[][]'}");
 	}
 
@@ -1099,14 +1099,14 @@ public class JsonSchemaGeneratorTest {
 	//====================================================================================================
 	@Test
 	public void addDescription_BOOLEAN() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("boolean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("boolean").build().createSession();
 		assertObject(s.getSchema(boolean.class)).asJson().is("{type:'boolean',description:'boolean'}");
 		assertObject(s.getSchema(Boolean.class)).asJson().is("{type:'boolean',description:'java.lang.Boolean'}");
 	}
 
 	@Test
 	public void addDescription_BOOLEAN_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("boolean").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("boolean").build().createSession();
 		assertObject(s.getSchema(boolean[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'boolean',description:'boolean'}}}");
 		assertObject(s.getSchema(Boolean[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'boolean',description:'java.lang.Boolean'}}}");
 	}
@@ -1116,7 +1116,7 @@ public class JsonSchemaGeneratorTest {
 	//====================================================================================================
 	@Test
 	public void addDescription_NUMBER() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("number").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("number").build().createSession();
 		assertObject(s.getSchema(short.class)).asJson().is("{type:'integer',format:'int16',description:'short'}");
 		assertObject(s.getSchema(Short.class)).asJson().is("{type:'integer',format:'int16',description:'java.lang.Short'}");
 		assertObject(s.getSchema(int.class)).asJson().is("{type:'integer',format:'int32',description:'int'}");
@@ -1131,7 +1131,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addDescription_NUMBER_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("number").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("number").build().createSession();
 		assertObject(s.getSchema(short[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'integer',format:'int16',description:'short'}}}");
 		assertObject(s.getSchema(Short[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'integer',format:'int16',description:'java.lang.Short'}}}");
 		assertObject(s.getSchema(int[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'integer',format:'int32',description:'int'}}}");
@@ -1150,7 +1150,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addDescription_STRING() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("string").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("string").build().createSession();
 		assertObject(s.getSchema(String.class)).asJson().is("{type:'string',description:'java.lang.String'}");
 		assertObject(s.getSchema(StringBuilder.class)).asJson().is("{type:'string',description:'java.lang.StringBuilder'}");
 		assertObject(s.getSchema(Character.class)).asJson().is("{type:'string',description:'java.lang.Character'}");
@@ -1159,7 +1159,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addDescription_STRING_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("string").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("string").build().createSession();
 		assertObject(s.getSchema(String[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string',description:'java.lang.String'}}}");
 		assertObject(s.getSchema(StringBuilder[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string',description:'java.lang.StringBuilder'}}}");
 		assertObject(s.getSchema(Character[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string',description:'java.lang.Character'}}}");
@@ -1172,13 +1172,13 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addDescription_ENUM() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("enum").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("enum").build().createSession();
 		assertObject(s.getSchema(TestEnumToString.class)).asJson().is("{type:'string','enum':['one','two','three'],description:'org.apache.juneau.testutils.pojos.TestEnumToString'}");
 	}
 
 	@Test
 	public void addDescription_ENUM_2darray() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("enum").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("enum").build().createSession();
 		assertObject(s.getSchema(TestEnumToString[][].class)).asJson().is("{type:'array',items:{type:'array',items:{type:'string','enum':['one','two','three'],description:'org.apache.juneau.testutils.pojos.TestEnumToString'}}}");
 	}
 
@@ -1187,7 +1187,7 @@ public class JsonSchemaGeneratorTest {
 	//====================================================================================================
 	@Test
 	public void addDescription_ANY() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addDescriptionsTo("any").build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().addDescriptionsTo("any").build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{type:'object',properties:{f1:{type:'string'}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean'}");
 		assertObject(s.getSchema(BeanMap.class)).asJson().is("{type:'object',additionalProperties:{type:'object',properties:{f1:{type:'string'}}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$BeanMap<java.lang.Integer,org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean>'}");
 		assertObject(s.getSchema(BeanList.class)).asJson().is("{type:'array',items:{type:'object',properties:{f1:{type:'string'}}},description:'org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$BeanList<org.apache.juneau.jsonschema.JsonSchemaGeneratorTest$SimpleBean>'}");
@@ -1218,7 +1218,7 @@ public class JsonSchemaGeneratorTest {
 	// If default schema contains 'type', it's considered complete.
 	@Test
 	public void defaultSchemas() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder()
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy()
 			.defaultSchema(SimpleBean.class, OMap.of("type", "bar"))
 			.defaultSchema(BeanMap.class, OMap.of("type", "bar"))
 			.defaultSchema(BeanList.class, OMap.of("type", "bar"))
@@ -1267,7 +1267,7 @@ public class JsonSchemaGeneratorTest {
 	// If default schema does not contain 'type', the value is augmented
 	@Test
 	public void defaultSchemasNoType() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder()
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy()
 			.defaultSchema(SimpleBean.class, OMap.of("foo", "bar"))
 			.defaultSchema(BeanMap.class, OMap.of("foo", "bar"))
 			.defaultSchema(BeanList.class, OMap.of("foo", "bar"))
@@ -1319,7 +1319,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void allowNestedExamples_enabled() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder()
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy()
 			.allowNestedExamples()
 			.example(BeanList.class, new BeanList())
 			.example(SimpleBean.class, new SimpleBean())
@@ -1331,7 +1331,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void allowNestedExamples_disabled() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder()
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy()
 			.example(BeanList.class, new BeanList())
 			.example(SimpleBean.class, new SimpleBean())
 			.addExamplesTo("collection,bean")
@@ -1346,7 +1346,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void allowNestedDescriptions_enabled() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder()
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy()
 			.allowNestedDescriptions()
 			.addDescriptionsTo("collection,bean")
 			.build().createSession();
@@ -1356,7 +1356,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void allowNestedDescriptions_disabled() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder()
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy()
 			.addDescriptionsTo("collection,bean")
 			.build().createSession();
 
@@ -1369,7 +1369,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void swaps_int() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder()
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy()
 			.swaps(IntSwap.class)
 			.build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{type:'integer',format:'int32'}");
@@ -1385,7 +1385,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonSchema_onclass() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().build().createSession();
 		assertObject(s.getSchema(A1.class)).asJson().is("{description:'baz',format:'bar',type:'foo',example:'{f1:123}',properties:{f1:{type:'integer',format:'int32'}}}");
 	}
 
@@ -1396,7 +1396,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonSchema_onclass_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(A1aConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().applyAnnotations(A1aConfig.class).build().createSession();
 		assertObject(s.getSchema(A1a.class)).asJson().is("{description:'baz',format:'bar',type:'foo',example:'{f1:123}',properties:{f1:{type:'integer',format:'int32'}}}");
 	}
 
@@ -1411,7 +1411,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonSchema_onbeanfield() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().build().createSession();
 		assertObject(s.getSchema(A2.class)).asJson().is("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo',example:'123'}}}");
 	}
 
@@ -1422,7 +1422,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonSchema_onbeanfield_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(A2aConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().applyAnnotations(A2aConfig.class).build().createSession();
 		assertObject(s.getSchema(A2a.class)).asJson().is("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo',example:'123'}}}");
 	}
 
@@ -1435,7 +1435,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonSchema_onbeangetter() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().build().createSession();
 		assertObject(s.getSchema(A3.class)).asJson().is("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo',example:'123'}}}");
 	}
 
@@ -1448,7 +1448,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonSchema_onbeangetter_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(A3aConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().applyAnnotations(A3aConfig.class).build().createSession();
 		assertObject(s.getSchema(A3a.class)).asJson().is("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo',example:'123'}}}");
 	}
 
@@ -1463,7 +1463,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonSchema_onbeansetter() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().build().createSession();
 		assertObject(s.getSchema(A4.class)).asJson().is("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo',example:'123'}}}");
 	}
 
@@ -1478,7 +1478,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonSchema_onbeansetter_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(A4aConfig.class).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().applyAnnotations(A4aConfig.class).build().createSession();
 		assertObject(s.getSchema(A4a.class)).asJson().is("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo',example:'123'}}}");
 	}
 
@@ -1499,7 +1499,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonschema_onpojoswap() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder()
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy()
 			.swaps(SwapWithAnnotation.class)
 			.build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{description:'baz',format:'bar',type:'foo',example:'123'}");
@@ -1512,7 +1512,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void jsonschema_onpojoswap_usingConfig() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(SwapWithAnnotation2Config.class)
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.copy().applyAnnotations(SwapWithAnnotation2Config.class)
 			.swaps(SwapWithAnnotation2.class)
 			.build().createSession();
 		assertObject(s.getSchema(SimpleBean.class)).asJson().is("{description:'baz',format:'bar',type:'foo',example:'123'}");
diff --git a/juneau-utest/src/test/java/org/apache/juneau/msgpack/MsgPackParserTest.java b/juneau-utest/src/test/java/org/apache/juneau/msgpack/MsgPackParserTest.java
index b0dbb9e..762f981 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/msgpack/MsgPackParserTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/msgpack/MsgPackParserTest.java
@@ -34,7 +34,7 @@ public class MsgPackParserTest {
 	//====================================================================================================
 	@Test
 	public void testStreamsAutoClose() throws Exception {
-		InputStreamParser p = MsgPackParser.DEFAULT.builder().autoCloseStreams().build();
+		InputStreamParser p = MsgPackParser.DEFAULT.copy().autoCloseStreams().build();
 		Object r;
 		InputStream is;
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/parser/ParserGroupTest.java b/juneau-utest/src/test/java/org/apache/juneau/parser/ParserGroupTest.java
index 554bf6e..d862050 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/parser/ParserGroupTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/parser/ParserGroupTest.java
@@ -76,11 +76,11 @@ public class ParserGroupTest {
 		g = gb.build();
 		assertObject(g.getSupportedMediaTypes()).asJson().is("['text/1','text/2','text/2a']");
 
-		gb = g.builder().append(P3.class, P4.class);
+		gb = g.copy().append(P3.class, P4.class);
 		g = gb.build();
 		assertObject(g.getSupportedMediaTypes()).asJson().is("['text/3','text/4','text/4a','text/1','text/2','text/2a']");
 
-		gb = g.builder().append(P5.class);
+		gb = g.copy().append(P5.class);
 		g = gb.build();
 		assertObject(g.getSupportedMediaTypes()).asJson().is("['text/5','text/3','text/4','text/4a','text/1','text/2','text/2a']");
 	}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Body_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Body_Test.java
index 54429f8..1fa2f8f 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Body_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Body_Test.java
@@ -704,22 +704,22 @@ public class Body_Test {
 		String expected;
 
 		expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19:[ [...]
-		e2.put("/B", SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(XBeans.Annotations.class).build().toString(XBeans.XE.INSTANCE), "application/json")
+		e2.put("/B", SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(XBeans.Annotations.class).build().toString(XBeans.XE.INSTANCE), "application/json")
 			.run()
 			.assertBody().is(expected);
 
 		expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19:[ [...]
-		e2.put("/B?body=" + UonSerializer.DEFAULT.builder().applyAnnotations(XBeans.Annotations.class).build().serialize(XBeans.XE.INSTANCE), "a")
+		e2.put("/B?body=" + UonSerializer.DEFAULT.copy().applyAnnotations(XBeans.Annotations.class).build().serialize(XBeans.XE.INSTANCE), "a")
 			.run()
 			.assertBody().is(expected);
 
 		expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19:[ [...]
-		e2.put("/C", SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(XBeans.Annotations.class).build().toString(XBeans.XE.INSTANCE), "application/json")
+		e2.put("/C", SimpleJsonSerializer.DEFAULT.copy().applyAnnotations(XBeans.Annotations.class).build().toString(XBeans.XE.INSTANCE), "application/json")
 			.run()
 			.assertBody().is(expected);
 
 		expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19:[ [...]
-		e2.put("/C?body=" + UonSerializer.DEFAULT.builder().applyAnnotations(XBeans.Annotations.class).build().serialize(XBeans.XE.INSTANCE), "a")
+		e2.put("/C?body=" + UonSerializer.DEFAULT.copy().applyAnnotations(XBeans.Annotations.class).build().serialize(XBeans.XE.INSTANCE), "a")
 			.run()
 			.assertBody().is(expected);
 	}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
index 1e50488..c271dcd 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
@@ -78,8 +78,8 @@ public class RestClient_Test {
 	public void a01_basic_overrideHttpClient() {
 		HttpClientBuilder cb = HttpClientBuilder.create();
 		CloseableHttpClient hc = HttpClientBuilder.create().build();
-		RestClient.create().httpClientBuilder(cb).build().builder().build();
-		RestClient.create().httpClient(hc).build().builder().build();
+		RestClient.create().httpClientBuilder(cb).build().copy().build();
+		RestClient.create().httpClient(hc).build().copy().build();
 	}
 
 	public static class A2 extends RestClientBuilder {}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/serializer/ReaderObjectComboTest.java b/juneau-utest/src/test/java/org/apache/juneau/serializer/ReaderObjectComboTest.java
index 14956ee..54e4c2a 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/serializer/ReaderObjectComboTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/serializer/ReaderObjectComboTest.java
@@ -293,7 +293,7 @@ public class ReaderObjectComboTest extends ComboSerializeTest {
 
 	@Override
 	protected Serializer applySettings(Serializer s) throws Exception {
-		return s.builder().keepNullProperties().build();
+		return s.copy().keepNullProperties().build();
 	}
 
 	public static class BeanWithReaderField {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/serializer/SerializerGroupTest.java b/juneau-utest/src/test/java/org/apache/juneau/serializer/SerializerGroupTest.java
index b1abff1..b236259 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/serializer/SerializerGroupTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/serializer/SerializerGroupTest.java
@@ -81,11 +81,11 @@ public class SerializerGroupTest {
 		g = gb.build();
 		assertObject(g.getSupportedMediaTypes()).asJson().is("['text/1','text/2','text/2a']");
 
-		gb = g.builder().append(SB3.class, SB4.class);
+		gb = g.copy().append(SB3.class, SB4.class);
 		g = gb.build();
 		assertObject(g.getSupportedMediaTypes()).asJson().is("['text/3','text/4','text/4a','text/1','text/2','text/2a']");
 
-		gb = g.builder().append(SB5.class);
+		gb = g.copy().append(SB5.class);
 		g = gb.build();
 		assertObject(g.getSupportedMediaTypes()).asJson().is("['text/5','text/3','text/4','text/4a','text/1','text/2','text/2a']");
 	}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java b/juneau-utest/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
index f0ab92b..7b27ede 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/serializer/UriResolutionTest.java
@@ -616,7 +616,7 @@ public class UriResolutionTest {
 	@Test
 	public void a2c_testJsonParse_usingConfig() throws Exception {
 		Serializer s = JsonSerializer.create().ssq().uriContext(input.context).uriResolution(input.resolution).uriRelativity(input.relativity).applyAnnotations(TestURIc.Config.class).build();
-		testParse(s, JsonParser.DEFAULT.builder().applyAnnotations(TestURIc.class).build(), new TestURIc());
+		testParse(s, JsonParser.DEFAULT.copy().applyAnnotations(TestURIc.class).build(), new TestURIc());
 	}
 
 	@Test
@@ -640,7 +640,7 @@ public class UriResolutionTest {
 	@Test
 	public void b2c_testXmlParse_usingConfig() throws Exception {
 		Serializer s = XmlSerializer.create().sq().uriContext(input.context).uriResolution(input.resolution).uriRelativity(input.relativity).applyAnnotations(TestURIc.Config.class).build();
-		testParse(s, XmlParser.DEFAULT.builder().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
+		testParse(s, XmlParser.DEFAULT.copy().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
 	}
 
 	@Test
@@ -664,7 +664,7 @@ public class UriResolutionTest {
 	@Test
 	public void c2c_testHtmlParse_usingConfig() throws Exception {
 		Serializer s = HtmlSerializer.create().sq().uriAnchorText(AnchorText.LAST_TOKEN).uriContext(input.context).uriResolution(input.resolution).uriRelativity(input.relativity).applyAnnotations(TestURIc.Config.class).build();
-		testParse(s, HtmlParser.DEFAULT.builder().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
+		testParse(s, HtmlParser.DEFAULT.copy().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
 	}
 
 	@Test
@@ -688,7 +688,7 @@ public class UriResolutionTest {
 	@Test
 	public void d2c_testUonParse_usingConfig() throws Exception {
 		Serializer s = UonSerializer.create().uriContext(input.context).uriResolution(input.resolution).uriRelativity(input.relativity).applyAnnotations(TestURIc.Config.class).build();
-		testParse(s, UonParser.DEFAULT.builder().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
+		testParse(s, UonParser.DEFAULT.copy().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
 	}
 
 	@Test
@@ -712,7 +712,7 @@ public class UriResolutionTest {
 	@Test
 	public void e2c_testUrlEncodingParse_usingConfig() throws Exception {
 		Serializer s = UrlEncodingSerializer.create().uriContext(input.context).uriResolution(input.resolution).uriRelativity(input.relativity).applyAnnotations(TestURIc.Config.class).build();
-		testParse(s, UrlEncodingParser.DEFAULT.builder().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
+		testParse(s, UrlEncodingParser.DEFAULT.copy().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
 	}
 
 	@Test
@@ -736,7 +736,7 @@ public class UriResolutionTest {
 	@Test
 	public void f2c_testMsgPackParse_usingConfig() throws Exception {
 		Serializer s = MsgPackSerializer.create().uriContext(input.context).uriResolution(input.resolution).uriRelativity(input.relativity).applyAnnotations(TestURIc.Config.class).build();
-		testParse(s, MsgPackParser.DEFAULT.builder().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
+		testParse(s, MsgPackParser.DEFAULT.copy().applyAnnotations(TestURIc.Config.class).build(), new TestURIc());
 	}
 
 	@Test
diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/XmlUtils.java b/juneau-utest/src/test/java/org/apache/juneau/testutils/XmlUtils.java
index 7f4b74f..44d7e06 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/testutils/XmlUtils.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/testutils/XmlUtils.java
@@ -170,7 +170,7 @@ public class XmlUtils {
 	 * Test whitespace and generated schema.
 	 */
 	public static void validateXml(Object o, XmlSerializer s) throws Exception {
-		s = s.builder().ws().ns().addNamespaceUrisToRoot().build();
+		s = s.copy().ws().ns().addNamespaceUrisToRoot().build();
 		String xml = s.serialize(o);
 
 		try {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transform/AutoListSwapTest.java b/juneau-utest/src/test/java/org/apache/juneau/transform/AutoListSwapTest.java
index 4f6e583..9737b7e 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transform/AutoListSwapTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transform/AutoListSwapTest.java
@@ -41,7 +41,7 @@ public class AutoListSwapTest {
 	}
 
 	private static BeanContext bc(Class<?> applyAnnotations) {
-		return BeanContext.DEFAULT.builder().applyAnnotations(applyAnnotations).build();
+		return BeanContext.DEFAULT.copy().applyAnnotations(applyAnnotations).build();
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
@@ -266,7 +266,7 @@ public class AutoListSwapTest {
 
 	@Test
 	public void e01c_ignoreSwapMethod_beanIgnore_usingConfig() throws Exception {
-		assertNull(find(BeanContext.DEFAULT.builder().applyAnnotations(E01Config.class).build(), E01c.class));
+		assertNull(find(BeanContext.DEFAULT.copy().applyAnnotations(E01Config.class).build(), E01c.class));
 	}
 
 	@Test
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transform/AutoMapSwapTest.java b/juneau-utest/src/test/java/org/apache/juneau/transform/AutoMapSwapTest.java
index 768615d..7c54751 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transform/AutoMapSwapTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transform/AutoMapSwapTest.java
@@ -42,7 +42,7 @@ public class AutoMapSwapTest {
 	}
 
 	private static BeanContext bc(Class<?> applyAnnotations) {
-		return BeanContext.DEFAULT.builder().applyAnnotations(applyAnnotations).build();
+		return BeanContext.DEFAULT.copy().applyAnnotations(applyAnnotations).build();
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transform/AutoNumberSwapTest.java b/juneau-utest/src/test/java/org/apache/juneau/transform/AutoNumberSwapTest.java
index 8ffad1d..710c8b9 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transform/AutoNumberSwapTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transform/AutoNumberSwapTest.java
@@ -38,7 +38,7 @@ public class AutoNumberSwapTest {
 	}
 
 	private static BeanContext bc(Class<?> applyAnnotations) {
-		return BeanContext.DEFAULT.builder().applyAnnotations(applyAnnotations).build();
+		return BeanContext.DEFAULT.copy().applyAnnotations(applyAnnotations).build();
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transform/AutoObjectSwapTest.java b/juneau-utest/src/test/java/org/apache/juneau/transform/AutoObjectSwapTest.java
index d9a0ef2..d2e4bcd 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transform/AutoObjectSwapTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transform/AutoObjectSwapTest.java
@@ -43,7 +43,7 @@ public class AutoObjectSwapTest {
 	}
 
 	private static BeanContext bc(Class<?> applyAnnotations) {
-		return BeanContext.DEFAULT.builder().applyAnnotations(applyAnnotations).build();
+		return BeanContext.DEFAULT.copy().applyAnnotations(applyAnnotations).build();
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java b/juneau-utest/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
index 4a7cdf5..ede7bf5 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transforms/BeanDictionaryComboTest.java
@@ -737,12 +737,12 @@ public class BeanDictionaryComboTest extends ComboRoundTripTest {
 
 	@Override
 	protected Serializer applySettings(Serializer s) throws Exception {
-		return s.builder().keepNullProperties().build();
+		return s.copy().keepNullProperties().build();
 	}
 
 	@Override
 	protected Parser applySettings(Parser p) throws Exception {
-		return p.builder().build();
+		return p;
 	}
 
 	@Bean(dictionary={A.class})
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java b/juneau-utest/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
index d5db2ad..3898ef5 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transforms/BuilderComboTest.java
@@ -219,12 +219,12 @@ public class BuilderComboTest extends ComboRoundTripTest {
 
 	@Override
 	protected Serializer applySettings(Serializer s) throws Exception {
-		return s.builder().keepNullProperties().build();
+		return s.copy().keepNullProperties().build();
 	}
 
 	@Override
 	protected Parser applySettings(Parser p) throws Exception {
-		return p.builder().build();
+		return p;
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java b/juneau-utest/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
index c3ca986..70b9543 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transforms/ByteArrayBase64SwapComboTest.java
@@ -361,12 +361,12 @@ public class ByteArrayBase64SwapComboTest extends ComboRoundTripTest {
 
 	@Override
 	protected Serializer applySettings(Serializer s) throws Exception {
-		return s.builder().swaps(ByteArraySwap.Base64.class).keepNullProperties().build();
+		return s.copy().swaps(ByteArraySwap.Base64.class).keepNullProperties().build();
 	}
 
 	@Override
 	protected Parser applySettings(Parser p) throws Exception {
-		return p.builder().swaps(ByteArraySwap.Base64.class).build();
+		return p.copy().swaps(ByteArraySwap.Base64.class).build();
 	}
 
 	public static class BeanWithByteArrayField {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transforms/DefaultSwapsTest.java b/juneau-utest/src/test/java/org/apache/juneau/transforms/DefaultSwapsTest.java
index a0b9dbf..d3cfcd5 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transforms/DefaultSwapsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transforms/DefaultSwapsTest.java
@@ -56,15 +56,15 @@ public class DefaultSwapsTest {
 	}
 
 	private void test(String expected, Object o, Class<?> configClass) throws Exception {
-		assertEquals(expected, SERIALIZER.builder().applyAnnotations(configClass).build().serialize(o));
+		assertEquals(expected, SERIALIZER.copy().applyAnnotations(configClass).build().serialize(o));
 	}
 
 	private void test(String expected, Object o, PojoSwap<?,?> swap) throws Exception {
-		assertEquals(expected, SERIALIZER.builder().swaps(swap).build().serializeToString(o));
+		assertEquals(expected, SERIALIZER.copy().swaps(swap).build().serializeToString(o));
 	}
 
 	private void test(String expected, Object o, PojoSwap<?,?> swap, Class<?> configClass) throws Exception {
-		assertEquals(expected, SERIALIZER.builder().swaps(swap).applyAnnotations(configClass).build().serializeToString(o));
+		assertEquals(expected, SERIALIZER.copy().swaps(swap).applyAnnotations(configClass).build().serializeToString(o));
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-utest/src/test/java/org/apache/juneau/transforms/SwapsAnnotationComboTest.java b/juneau-utest/src/test/java/org/apache/juneau/transforms/SwapsAnnotationComboTest.java
index 937a5c5..4d2abc8 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/transforms/SwapsAnnotationComboTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/transforms/SwapsAnnotationComboTest.java
@@ -495,7 +495,7 @@ public class SwapsAnnotationComboTest extends ComboSerializeTest {
 
 	@Override
 	protected Serializer applySettings(Serializer s) throws Exception {
-		return s.builder().swaps(
+		return s.copy().swaps(
 				ContextSwap.class,
 				ContextSwapJson.class,
 				ContextSwapXml.class,
diff --git a/juneau-utest/src/test/java/org/apache/juneau/uon/UonParserTest.java b/juneau-utest/src/test/java/org/apache/juneau/uon/UonParserTest.java
index c299132..ff02053 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/uon/UonParserTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/uon/UonParserTest.java
@@ -513,7 +513,7 @@ public class UonParserTest {
 	//====================================================================================================
 	@Test
 	public void testStreamsAutoClose() throws Exception {
-		ReaderParser p = UonParser.DEFAULT.builder().autoCloseStreams().build();
+		ReaderParser p = UonParser.DEFAULT.copy().autoCloseStreams().build();
 		Object x;
 		Reader r;
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java b/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
index 0112ea6..cc57e18 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
@@ -799,7 +799,7 @@ public class UrlEncodingParserTest {
 	public void testMultiPartParametersOnBeansViaAnnotationOnClass_usingConfig() throws Exception {
 		UrlEncodingParser p;
 		String in;
-		p = UrlEncodingParser.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build();
+		p = UrlEncodingParser.DEFAULT.copy().applyAnnotations(DTOs2.Annotations.class).build();
 		in = ""
 			+ "f01=a&f01=b"
 			+ "&f02=c&f02=d"
diff --git a/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java b/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
index dcfa3aa..81fa15c 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
@@ -25,8 +25,8 @@ import org.junit.*;
 @FixMethodOrder(NAME_ASCENDING)
 public class UrlEncodingSerializerTest {
 
-	static UrlEncodingSerializer s = UrlEncodingSerializer.DEFAULT.builder().addRootType().build();
-	static UrlEncodingSerializer sr = UrlEncodingSerializer.DEFAULT_READABLE.builder().addRootType().build();
+	static UrlEncodingSerializer s = UrlEncodingSerializer.DEFAULT.copy().addRootType().build();
+	static UrlEncodingSerializer sr = UrlEncodingSerializer.DEFAULT_READABLE.copy().addRootType().build();
 
 
 	//====================================================================================================
@@ -377,7 +377,7 @@ public class UrlEncodingSerializerTest {
 		DTOs2.B t = DTOs2.B.create();
 		String r;
 
-		s = UrlEncodingSerializer.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build();
+		s = UrlEncodingSerializer.DEFAULT.copy().applyAnnotations(DTOs2.Annotations.class).build();
 		r = s.serialize(t);
 		String e = ""
 			+ "f01=@(a,b)"
@@ -494,7 +494,7 @@ public class UrlEncodingSerializerTest {
 		DTOs2.C t = DTOs2.C.create();
 		String r;
 
-		s = UrlEncodingSerializer.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build();
+		s = UrlEncodingSerializer.DEFAULT.copy().applyAnnotations(DTOs2.Annotations.class).build();
 		r = s.serialize(t);
 		String e = ""
 			+ "f01=a&f01=b"
@@ -565,7 +565,7 @@ public class UrlEncodingSerializerTest {
 	//====================================================================================================
 	@Test
 	public void testPlainTextParams() throws Exception {
-		WriterSerializer s = UrlEncodingSerializer.DEFAULT.builder().paramFormatPlain().build();
+		WriterSerializer s = UrlEncodingSerializer.DEFAULT.copy().paramFormatPlain().build();
 
 		assertEquals("_value=foo", s.serialize("foo"));
 		assertEquals("_value='foo'", s.serialize("'foo'"));
diff --git a/juneau-utest/src/test/java/org/apache/juneau/utils/PojoQueryTest.java b/juneau-utest/src/test/java/org/apache/juneau/utils/PojoQueryTest.java
index 3186296..af51e02 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/utils/PojoQueryTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/utils/PojoQueryTest.java
@@ -41,19 +41,19 @@ public class PojoQueryTest {
 
 		PojoQuery q = new PojoQuery(in, BeanContext.DEFAULT.createSession());
 
-		sa = SearchArgs.builder().search("f=foo").build();
+		sa = SearchArgs.create().search("f=foo").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:'foo'}]");
 
-		sa = SearchArgs.builder().search("f=fo*").build();
+		sa = SearchArgs.create().search("f=fo*").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:'foo'}]");
 
-		sa = SearchArgs.builder().search("f=*ar").build();
+		sa = SearchArgs.create().search("f=*ar").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:'bar'}]");
 
-		sa = SearchArgs.builder().search("f=foo bar").build();
+		sa = SearchArgs.create().search("f=foo bar").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:'foo'},{f:'bar'}]");
 	}
@@ -88,15 +88,15 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f=2011").build();
+		sa = SearchArgs.create().search("f=2011").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T00:00:00'},{f:'2011-01-31T00:00:00'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().search("f=2011.01").build();
+		sa = SearchArgs.create().search("f=2011.01").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T00:00:00'},{f:'2011-01-31T00:00:00'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().search("f=2011.01.01").build();
+		sa = SearchArgs.create().search("f=2011.01.01").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T00:00:00'}]", s.serialize(results));
 
@@ -108,7 +108,7 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f=2011.01.01.12").build();
+		sa = SearchArgs.create().search("f=2011.01.01.12").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T12:00:00'},{f:'2011-01-01T12:59:59'}]", s.serialize(results));
 
@@ -119,7 +119,7 @@ public class PojoQueryTest {
 			new B(2011, 00, 01, 12, 31, 00)
 		};
 		q = new PojoQuery(in, session);
-		sa = SearchArgs.builder().search("f=2011.01.01.12.30").build();
+		sa = SearchArgs.create().search("f=2011.01.01.12.30").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T12:30:00'},{f:'2011-01-01T12:30:59'}]", s.serialize(results));
 
@@ -129,7 +129,7 @@ public class PojoQueryTest {
 			new B(2011, 00, 01, 12, 30, 31)
 		};
 		q = new PojoQuery(in, session);
-		sa = SearchArgs.builder().search("f=2011.01.01.12.30.30").build();
+		sa = SearchArgs.create().search("f=2011.01.01.12.30.30").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T12:30:30'}]", s.serialize(results));
 
@@ -141,19 +141,19 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f>2000").build();
+		sa = SearchArgs.create().search("f>2000").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2001-01-01T00:00:00'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().search("f>=2001").build();
+		sa = SearchArgs.create().search("f>=2001").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2001-01-01T00:00:00'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().search("f<2001").build();
+		sa = SearchArgs.create().search("f<2001").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2000-12-31T00:00:00'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().search("f<=2000").build();
+		sa = SearchArgs.create().search("f<=2000").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2000-12-31T00:00:00'}]", s.serialize(results));
 
@@ -163,11 +163,11 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f>=2011.01.01.12.30").build();
+		sa = SearchArgs.create().search("f>=2011.01.01.12.30").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T12:30:00'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().search("f<2011.01.01.12.30").build();
+		sa = SearchArgs.create().search("f<2011.01.01.12.30").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T12:29:59'}]", s.serialize(results));
 
@@ -177,11 +177,11 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f>2011.01.01.12.30").build();
+		sa = SearchArgs.create().search("f>2011.01.01.12.30").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T12:31:00'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().search("f<=2011.01.01.12.30").build();
+		sa = SearchArgs.create().search("f<=2011.01.01.12.30").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2011-01-01T12:30:59'}]", s.serialize(results));
 
@@ -195,7 +195,7 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f=2001 - 2003.06.30").build();
+		sa = SearchArgs.create().search("f=2001 - 2003.06.30").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2001-01-01T00:00:00'},{f:'2003-06-30T23:59:59'}]", s.serialize(results));
 
@@ -209,7 +209,7 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f=2001 2003 2005").build();
+		sa = SearchArgs.create().search("f=2001 2003 2005").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2001-01-01T00:00:00'},{f:'2001-12-31T00:00:00'}]", s.serialize(results));
 
@@ -221,7 +221,7 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f=2001 2003 2005").build();
+		sa = SearchArgs.create().search("f=2001 2003 2005").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2003-01-01T00:00:00'},{f:'2003-12-31T00:00:00'}]", s.serialize(results));
 
@@ -233,7 +233,7 @@ public class PojoQueryTest {
 		};
 		q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f=2001 2003 2005").build();
+		sa = SearchArgs.create().search("f=2001 2003 2005").build();
 		results = q.filter(sa);
 		assertEquals("[{f:'2005-01-01T00:00:00'},{f:'2005-12-31T00:00:00'}]", s.serialize(results));
 	}
@@ -265,27 +265,27 @@ public class PojoQueryTest {
 
 		PojoQuery q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().search("f=1").build();
+		sa = SearchArgs.create().search("f=1").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:1}]");
 
-		sa = SearchArgs.builder().search("f>1").build();
+		sa = SearchArgs.create().search("f>1").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:2},{f:3}]");
 
-		sa = SearchArgs.builder().search("f>=2").build();
+		sa = SearchArgs.create().search("f>=2").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:2},{f:3}]");
 
-		sa = SearchArgs.builder().search("f<=2").build();
+		sa = SearchArgs.create().search("f<=2").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:1},{f:2}]");
 
-		sa = SearchArgs.builder().search("f<2").build();
+		sa = SearchArgs.create().search("f<2").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:1}]");
 
-		sa = SearchArgs.builder().search("f=1 3").build();
+		sa = SearchArgs.create().search("f=1 3").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f:1},{f:3}]");
 	}
@@ -313,19 +313,19 @@ public class PojoQueryTest {
 
 		PojoQuery q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().view("f1").build();
+		sa = SearchArgs.create().view("f1").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f1:'foo'},{f1:'bar'},{f1:'baz'}]");
 
-		sa = SearchArgs.builder().view("f2").build();
+		sa = SearchArgs.create().view("f2").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f2:1},{f2:2},{f2:3}]");
 
-		sa = SearchArgs.builder().view("f3").build();
+		sa = SearchArgs.create().view("f3").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f3:true},{f3:false},{f3:true}]");
 
-		sa = SearchArgs.builder().view("f3,f2,f1").build();
+		sa = SearchArgs.create().view("f3,f2,f1").build();
 		results = q.filter(sa);
 		assertObject(results).asJson().is("[{f3:true,f2:1,f1:'foo'},{f3:false,f2:2,f1:'bar'},{f3:true,f2:3,f1:'baz'}]");
 	}
@@ -363,39 +363,39 @@ public class PojoQueryTest {
 
 		PojoQuery q = new PojoQuery(in, session);
 
-		sa = SearchArgs.builder().sort("f2").view("f1, f2").build();
+		sa = SearchArgs.create().sort("f2").view("f1, f2").build();
 		results = q.filter(sa);
 		assertEquals("[{f1:2,f2:'bar'},{f1:3,f2:'baz'},{f1:1,f2:'foo'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().sort("f2-").view("f1,f2").build();
+		sa = SearchArgs.create().sort("f2-").view("f1,f2").build();
 		results = q.filter(sa);
 		assertEquals("[{f1:1,f2:'foo'},{f1:3,f2:'baz'},{f1:2,f2:'bar'}]", s.serialize(results));
 
-		sa = SearchArgs.builder().sort("f3").view("f1,f3").build();
+		sa = SearchArgs.create().sort("f3").view("f1,f3").build();
 		results = q.filter(sa);
 		assertEquals("[{f1:2,f3:false},{f1:1,f3:true},{f1:3,f3:true}]", s.serialize(results));
 
-		sa = SearchArgs.builder().sort("f3,f1+").view("f1,f3").build();
+		sa = SearchArgs.create().sort("f3,f1+").view("f1,f3").build();
 		results = q.filter(sa);
 		assertEquals("[{f1:2,f3:false},{f1:1,f3:true},{f1:3,f3:true}]", s.serialize(results));
 
-		sa = SearchArgs.builder().sort("f3,f1-").view("f1,f3").build();
+		sa = SearchArgs.create().sort("f3,f1-").view("f1,f3").build();
 		results = q.filter(sa);
 		assertEquals("[{f1:2,f3:false},{f1:3,f3:true},{f1:1,f3:true}]", s.serialize(results));
 
-		sa = SearchArgs.builder().sort("f1").view("f1").limit(1).position(0).build();
+		sa = SearchArgs.create().sort("f1").view("f1").limit(1).position(0).build();
 		results = q.filter(sa);
 		assertEquals("[{f1:1}]", s.serialize(results));
 
-		sa = SearchArgs.builder().sort("f1").view("f1").limit(3).position(0).build();
+		sa = SearchArgs.create().sort("f1").view("f1").limit(3).position(0).build();
 		results = q.filter(sa);
 		assertEquals("[{f1:1},{f1:2},{f1:3}]", s.serialize(results));
 
-		sa = SearchArgs.builder().sort("f1").view("f1").limit(1).position(2).build();
+		sa = SearchArgs.create().sort("f1").view("f1").limit(1).position(2).build();
 		results = q.filter(sa);
 		assertEquals("[{f1:3}]", s.serialize(results));
 
-		sa = SearchArgs.builder().sort("f1").view("f1").limit(100).position(2).build();
+		sa = SearchArgs.create().sort("f1").view("f1").limit(100).position(2).build();
 		results = q.filter(sa);
 		assertEquals("[{f1:3}]", s.serialize(results));
 	}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/utils/PojoRestTest.java b/juneau-utest/src/test/java/org/apache/juneau/utils/PojoRestTest.java
index 2c03211..45f1b1c 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/utils/PojoRestTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/utils/PojoRestTest.java
@@ -86,7 +86,7 @@ public class PojoRestTest {
 		Address a3 = (Address)model.get("/person1/addresses/1");
 		assertEquals("city B", a3.city);
 
-		serializer = SimpleJsonSerializer.DEFAULT.builder().addBeanTypes().addRootType().build();
+		serializer = SimpleJsonSerializer.DEFAULT.copy().addBeanTypes().addRootType().build();
 		p = new Person("some name", 123,
 			new Address("street A", "city A", "state A", 12345, true),
 			new Address("street B", "city B", "state B", 12345, false)
diff --git a/juneau-utest/src/test/java/org/apache/juneau/xml/XmlContentTest.java b/juneau-utest/src/test/java/org/apache/juneau/xml/XmlContentTest.java
index 32629a6..9703f99 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/xml/XmlContentTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/xml/XmlContentTest.java
@@ -33,7 +33,7 @@ public class XmlContentTest {
 	@Test
 	public void testContentFormat() throws Exception {
 		A t = A.newInstance(), t2;
-		XmlSerializer s1 = XmlSerializer.DEFAULT_SQ.builder().keepNullProperties().build(),
+		XmlSerializer s1 = XmlSerializer.DEFAULT_SQ.copy().keepNullProperties().build(),
 			s2 = XmlSerializer.create().sq().ws().keepNullProperties().build();
 		XmlParser p = XmlParser.DEFAULT;
 		WriterSerializerSession session;
@@ -141,7 +141,7 @@ public class XmlContentTest {
 	@Test
 	public void testXmlMixed() throws Exception {
 		B t = B.newInstance(), t2;
-		XmlSerializer s1 = XmlSerializer.DEFAULT_SQ.builder().keepNullProperties().build(),
+		XmlSerializer s1 = XmlSerializer.DEFAULT_SQ.copy().keepNullProperties().build(),
 			s2 = XmlSerializer.create().sq().ws().keepNullProperties().build();
 		XmlParser p = XmlParser.DEFAULT;
 		WriterSerializerSession session;