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 2022/02/14 17:15:00 UTC

[juneau] branch master updated: Replace AList/ASet/AMap with CollectionUtils.

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 f93668b  Replace AList/ASet/AMap with CollectionUtils.
f93668b is described below

commit f93668bea8ab3a0e8a5a160bb57240ed64ff315a
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Mon Feb 14 12:14:37 2022 -0500

    Replace AList/ASet/AMap with CollectionUtils.
---
 .../main/ConfigurablePropertyCodeGenerator.java    |   5 +-
 .../main/java/org/apache/juneau/config/Config.java |   3 +-
 .../main/java/org/apache/juneau/config/Entry.java  |  32 +-
 .../java/org/apache/juneau/config/Section.java     |   8 +-
 .../apache/juneau/config/internal/ConfigMap.java   |   4 +-
 .../juneau/config/internal/ConfigMapEntry.java     |   7 +-
 .../org/apache/juneau/config/store/FileStore.java  |   2 +-
 .../java/org/apache/juneau/dto/LinkString.java     |   7 +-
 .../java/org/apache/juneau/dto/atom/Category.java  |   8 +-
 .../java/org/apache/juneau/dto/atom/Common.java    |   6 +-
 .../org/apache/juneau/dto/atom/CommonEntry.java    |  17 +-
 .../java/org/apache/juneau/dto/atom/Content.java   |   4 +-
 .../java/org/apache/juneau/dto/atom/Entry.java     |   9 +-
 .../main/java/org/apache/juneau/dto/atom/Feed.java |  11 +-
 .../java/org/apache/juneau/dto/atom/Generator.java |   8 +-
 .../main/java/org/apache/juneau/dto/atom/Icon.java |   4 +-
 .../main/java/org/apache/juneau/dto/atom/Id.java   |   3 +-
 .../main/java/org/apache/juneau/dto/atom/Link.java |  13 +-
 .../main/java/org/apache/juneau/dto/atom/Logo.java |   4 +-
 .../java/org/apache/juneau/dto/atom/Person.java    |   8 +-
 .../java/org/apache/juneau/dto/atom/Source.java    |  10 +-
 .../main/java/org/apache/juneau/dto/atom/Text.java |   5 +-
 .../main/java/org/apache/juneau/dto/html5/A.java   |   1 -
 .../java/org/apache/juneau/dto/html5/Area.java     |   1 -
 .../java/org/apache/juneau/dto/html5/Audio.java    |   1 -
 .../java/org/apache/juneau/dto/html5/Base.java     |   1 -
 .../java/org/apache/juneau/dto/html5/Button.java   |   1 -
 .../java/org/apache/juneau/dto/html5/Embed.java    |   1 -
 .../java/org/apache/juneau/dto/html5/Form.java     |   1 -
 .../org/apache/juneau/dto/html5/HtmlElement.java   |   3 +-
 .../java/org/apache/juneau/dto/html5/Iframe.java   |   1 -
 .../main/java/org/apache/juneau/dto/html5/Img.java |   1 -
 .../java/org/apache/juneau/dto/html5/Link.java     |   1 -
 .../java/org/apache/juneau/dto/html5/Script.java   |   1 -
 .../java/org/apache/juneau/dto/html5/Source.java   |   1 -
 .../java/org/apache/juneau/dto/html5/Track.java    |   1 -
 .../java/org/apache/juneau/dto/html5/Video.java    |   1 -
 .../apache/juneau/dto/jsonschema/JsonSchema.java   |   1 -
 .../juneau/dto/jsonschema/JsonSchemaMap.java       |   3 +-
 .../org/apache/juneau/dto/swagger/Contact.java     |  19 +-
 .../juneau/dto/swagger/ExternalDocumentation.java  |  15 +-
 .../org/apache/juneau/dto/swagger/HeaderInfo.java  |  87 ++---
 .../java/org/apache/juneau/dto/swagger/Info.java   |  34 +-
 .../java/org/apache/juneau/dto/swagger/Items.java  |  79 ++--
 .../org/apache/juneau/dto/swagger/License.java     |  15 +-
 .../org/apache/juneau/dto/swagger/Operation.java   |  59 +--
 .../apache/juneau/dto/swagger/OperationMap.java    |   5 +-
 .../apache/juneau/dto/swagger/ParameterInfo.java   | 105 +++---
 .../apache/juneau/dto/swagger/ResponseInfo.java    |  23 +-
 .../org/apache/juneau/dto/swagger/SchemaInfo.java  | 131 +++----
 .../apache/juneau/dto/swagger/SecurityScheme.java  |  39 +-
 .../org/apache/juneau/dto/swagger/Swagger.java     |  73 ++--
 .../apache/juneau/dto/swagger/SwaggerElement.java  |   7 +-
 .../java/org/apache/juneau/dto/swagger/Tag.java    |  18 +-
 .../java/org/apache/juneau/dto/swagger/Xml.java    |  26 +-
 .../apache/juneau/dto/swagger/ui/SwaggerUI.java    |   5 +-
 .../java/org/apache/juneau/jena/RdfParser.java     |  20 +-
 .../org/apache/juneau/jena/RdfParserSession.java   |  19 +-
 .../java/org/apache/juneau/jena/RdfSerializer.java |  25 +-
 .../apache/juneau/jena/RdfSerializerSession.java   |  21 +-
 .../jena/annotation/RdfConfigAnnotation.java       |   6 +-
 .../java/org/apache/juneau/AnnotationApplier.java  |  10 +-
 .../main/java/org/apache/juneau/BeanBuilder.java   |   6 +-
 .../main/java/org/apache/juneau/BeanContext.java   |  15 +-
 .../java/org/apache/juneau/BeanContextable.java    |   4 +-
 .../main/java/org/apache/juneau/BeanFilter.java    |  32 +-
 .../src/main/java/org/apache/juneau/BeanMeta.java  |  25 +-
 .../java/org/apache/juneau/BeanPropertyMeta.java   |   8 +-
 .../main/java/org/apache/juneau/BeanSession.java   |   7 +-
 .../src/main/java/org/apache/juneau/ClassMeta.java |  16 +-
 .../src/main/java/org/apache/juneau/Context.java   |   5 +-
 .../src/main/java/org/apache/juneau/Value.java     |   4 +-
 .../src/main/java/org/apache/juneau/Version.java   |   5 +-
 .../juneau/assertions/FluentArrayAssertion.java    |   5 +-
 .../juneau/assertions/FluentListAssertion.java     |   3 +-
 .../juneau/assertions/FluentMapAssertion.java      |   2 +-
 .../juneau/assertions/FluentObjectAssertion.java   |   3 +-
 .../java/org/apache/juneau/collections/Args.java   |   4 +-
 .../java/org/apache/juneau/cp/BasicFileFinder.java |  12 +-
 .../apache/juneau/cp/BeanCreateMethodFinder.java   |   4 +-
 .../java/org/apache/juneau/cp/BeanCreator.java     |   4 +-
 .../main/java/org/apache/juneau/cp/BeanStore.java  |  12 +-
 .../org/apache/juneau/cp/ContextBeanCreator.java   |   4 +-
 .../org/apache/juneau/cp/DefaultClassList.java     |   4 +-
 .../org/apache/juneau/cp/DefaultSettingsMap.java   |   4 +-
 .../main/java/org/apache/juneau/cp/FileFinder.java |   5 +-
 .../org/apache/juneau/encoders/EncoderSet.java     |  13 +-
 .../org/apache/juneau/html/HtmlDocSerializer.java  |  26 +-
 .../org/apache/juneau/html/HtmlParserSession.java  |   5 +-
 .../java/org/apache/juneau/html/HtmlWidgetMap.java |   4 +-
 .../java/org/apache/juneau/http/HttpMethod.java    |   5 +-
 .../java/org/apache/juneau/http/HttpParts.java     |   3 +-
 .../juneau/http/header/BasicBooleanHeader.java     |   6 +-
 .../juneau/http/header/BasicCsvArrayHeader.java    |   6 +-
 .../apache/juneau/http/header/BasicDateHeader.java |   7 +-
 .../http/header/BasicEntityTagArrayHeader.java     |  13 +-
 .../juneau/http/header/BasicEntityTagHeader.java   |   6 +-
 .../org/apache/juneau/http/header/BasicHeader.java |   3 +-
 .../juneau/http/header/BasicIntegerHeader.java     |   6 +-
 .../apache/juneau/http/header/BasicLongHeader.java |   6 +-
 .../http/header/BasicMediaRangeArrayHeader.java    |   6 +-
 .../juneau/http/header/BasicMediaTypeHeader.java   |   6 +-
 .../juneau/http/header/BasicStringHeader.java      |   4 +-
 .../http/header/BasicStringRangeArrayHeader.java   |   6 +-
 .../apache/juneau/http/header/BasicUriHeader.java  |   6 +-
 .../apache/juneau/http/header/ClientVersion.java   |   4 +-
 .../org/apache/juneau/http/header/HeaderList.java  |  39 +-
 .../org/apache/juneau/http/header/IfRange.java     |   6 +-
 .../org/apache/juneau/http/header/MediaRange.java  |   4 +-
 .../org/apache/juneau/http/header/MediaRanges.java |   3 +-
 .../org/apache/juneau/http/header/RetryAfter.java  |   7 +-
 .../org/apache/juneau/http/header/StringRange.java |   4 +-
 .../apache/juneau/http/header/StringRanges.java    |   3 +-
 .../java/org/apache/juneau/http/header/Thrown.java |   8 +-
 .../apache/juneau/http/part/BasicBooleanPart.java  |   4 +-
 .../apache/juneau/http/part/BasicCsvArrayPart.java |  12 +-
 .../org/apache/juneau/http/part/BasicDatePart.java |   8 +-
 .../apache/juneau/http/part/BasicIntegerPart.java  |   4 +-
 .../org/apache/juneau/http/part/BasicLongPart.java |   4 +-
 .../apache/juneau/http/part/BasicStringPart.java   |   3 +-
 .../org/apache/juneau/http/part/BasicUriPart.java  |   4 +-
 .../java/org/apache/juneau/http/part/PartList.java |  35 +-
 .../juneau/http/remote/RrpcInterfaceMeta.java      |  10 +-
 .../org/apache/juneau/httppart/HttpPartSchema.java | 176 ++++-----
 .../httppart/bean/RequestBeanPropertyMeta.java     |   4 +-
 .../juneau/httppart/bean/ResponseBeanMeta.java     |   6 +-
 .../httppart/bean/ResponseBeanPropertyMeta.java    |   4 +-
 .../java/org/apache/juneau/internal/AList.java     | 410 ---------------------
 .../main/java/org/apache/juneau/internal/AMap.java | 301 ---------------
 .../main/java/org/apache/juneau/internal/ASet.java | 324 ----------------
 .../org/apache/juneau/internal/ASortedMap.java     | 254 -------------
 .../org/apache/juneau/internal/ASortedSet.java     | 272 --------------
 .../org/apache/juneau/internal/ArrayBuilder.java   |   2 +-
 .../apache/juneau/internal/CollectionUtils.java    | 292 +++++++++++++++
 .../org/apache/juneau/internal/ListBuilder.java    |  34 +-
 .../org/apache/juneau/internal/MapBuilder.java     |  17 +-
 .../apache/juneau/internal/ReverseIterable.java    |  71 ----
 .../org/apache/juneau/internal/SetBuilder.java     |  16 +-
 .../org/apache/juneau/internal/StringUtils.java    |  45 +++
 .../java/org/apache/juneau/internal/SystemEnv.java |   3 +-
 .../org/apache/juneau/json/JsonParserSession.java  |   3 +-
 .../juneau/jsonschema/JsonSchemaGenerator.java     |   4 +-
 .../org/apache/juneau/jsonschema/SchemaUtils.java  |   3 +-
 .../org/apache/juneau/jsonschema/TypeCategory.java |  16 +-
 .../juneau/msgpack/MsgPackParserSession.java       |   3 +-
 .../apache/juneau/oapi/OpenApiParserSession.java   |   5 +-
 .../main/java/org/apache/juneau/parser/Parser.java |   6 +-
 .../java/org/apache/juneau/parser/ParserSet.java   |  15 +-
 .../org/apache/juneau/pojotools/SearchArgs.java    |   4 +-
 .../org/apache/juneau/reflect/AnnotationInfo.java  |   5 +-
 .../java/org/apache/juneau/reflect/ClassInfo.java  |  46 +--
 .../java/org/apache/juneau/reflect/ParamInfo.java  |   3 +-
 .../org/apache/juneau/serializer/Serializer.java   |   7 +-
 .../apache/juneau/serializer/SerializerSet.java    |  19 +-
 .../apache/juneau/serializer/WriterSerializer.java |   6 +-
 .../juneau/soap/SoapXmlSerializerSession.java      |   4 +-
 .../java/org/apache/juneau/svl/VarResolver.java    |   4 +-
 .../java/org/apache/juneau/svl/vars/SwitchVar.java |   5 +-
 .../java/org/apache/juneau/swap/AutoListSwap.java  |   6 +-
 .../java/org/apache/juneau/swap/AutoMapSwap.java   |   7 +-
 .../org/apache/juneau/swap/AutoNumberSwap.java     |   5 +-
 .../org/apache/juneau/swap/AutoObjectSwap.java     |   6 +-
 .../java/org/apache/juneau/swap/SurrogateSwap.java |   4 +-
 .../org/apache/juneau/uon/UonParserSession.java    |   3 +-
 .../java/org/apache/juneau/uon/UonSerializer.java  |   5 +-
 .../urlencoding/UrlEncodingParserSession.java      |   4 +-
 .../java/org/apache/juneau/utils/BeanDiff.java     |   6 +-
 .../java/org/apache/juneau/utils/PojoQuery.java    |   4 +-
 .../org/apache/juneau/utils/ReflectionMap.java     |  21 +-
 .../java/org/apache/juneau/utils/SearchArgs.java   |  16 +-
 .../java/org/apache/juneau/xml/XmlBeanMeta.java    |  16 +-
 .../main/java/org/apache/juneau/xml/XmlParser.java |   8 +-
 .../org/apache/juneau/xml/XmlParserSession.java    |   3 +-
 .../java/org/apache/juneau/xml/XmlSerializer.java  |  11 +-
 .../apache/juneau/doc/internal/DocGenerator.java   |   3 +-
 .../apache/juneau/microservice/Microservice.java   |  17 +-
 .../juneau/microservice/console/ConfigCommand.java |   2 +-
 .../juneau/microservice/console/ExitCommand.java   |   2 +-
 .../juneau/microservice/console/HelpCommand.java   |   2 +-
 .../microservice/console/RestartCommand.java       |   2 +-
 .../microservice/resources/ConfigResource.java     |  13 +-
 .../microservice/resources/DirectoryResource.java  |  13 +-
 .../microservice/resources/LogEntryFormatter.java  |   5 +-
 .../juneau/microservice/resources/LogParser.java   |   7 +-
 .../microservice/resources/LogsResource.java       |  11 +-
 .../microservice/resources/SampleRootResource.java |   4 +-
 .../microservice/resources/ShutdownResource.java   |   4 +-
 .../apache/juneau/rest/test/ConfigResource.java    |   6 +-
 .../juneau/rest/test/LargePojosResource.java       |   6 +-
 .../java/org/apache/juneau/rest/test/Root.java     |   4 +-
 .../apache/juneau/rest/test/TestMicroservice.java  |   2 +-
 .../rest/test/client/ThirdPartyProxyResource.java  |  62 ++--
 .../rest/test/client/ThirdPartyProxyTest.java      | 232 ++++++------
 .../apache/juneau/rest/client/ResponseHeader.java  |   4 +-
 .../org/apache/juneau/rest/client/RestClient.java  |  16 +-
 .../org/apache/juneau/rest/client/RestRequest.java |  10 +-
 .../juneau/rest/client/remote/RemoteMeta.java      |   6 +-
 .../apache/juneau/rest/mock/MockRestClient.java    |  12 +-
 .../juneau/rest/mock/MockServletRequest.java       |   7 +-
 .../juneau/rest/springboot/SpringBeanStore.java    |   8 +-
 .../java/org/apache/juneau/rest/RestChildren.java  |   8 +-
 .../java/org/apache/juneau/rest/RestContext.java   |  35 +-
 .../java/org/apache/juneau/rest/RestOpContext.java |  30 +-
 .../org/apache/juneau/rest/RestOperations.java     |  10 +-
 .../java/org/apache/juneau/rest/RestRequest.java   |   8 +-
 .../java/org/apache/juneau/rest/RestResponse.java  |  14 +-
 .../org/apache/juneau/rest/arg/FormDataArg.java    |   4 +-
 .../java/org/apache/juneau/rest/arg/HeaderArg.java |   4 +-
 .../java/org/apache/juneau/rest/arg/PathArg.java   |   4 +-
 .../java/org/apache/juneau/rest/arg/QueryArg.java  |   4 +-
 .../apache/juneau/rest/arg/ResponseHeaderArg.java  |   4 +-
 .../org/apache/juneau/rest/arg/RestOpArgList.java  |   5 +-
 .../juneau/rest/converter/RestConverterList.java   |  12 +-
 .../apache/juneau/rest/guard/RestGuardList.java    |  12 +-
 .../juneau/rest/httppart/BasicNamedAttribute.java  |   5 +-
 .../juneau/rest/httppart/RequestAttribute.java     |   6 +-
 .../apache/juneau/rest/httppart/RequestBody.java   |   5 +-
 .../juneau/rest/httppart/RequestFormParams.java    |  14 +-
 .../juneau/rest/httppart/RequestHeaders.java       |  12 +-
 .../juneau/rest/httppart/RequestHttpPart.java      |  12 +-
 .../juneau/rest/httppart/RequestPathParams.java    |  12 +-
 .../juneau/rest/httppart/RequestQueryParams.java   |  12 +-
 .../org/apache/juneau/rest/logging/RestLogger.java |   3 +-
 .../juneau/rest/matcher/RestMatcherList.java       |   9 +-
 .../rest/processor/ResponseProcessorList.java      |   3 +-
 .../juneau/rest/staticfile/BasicStaticFiles.java   |   7 +-
 .../apache/juneau/rest/staticfile/StaticFiles.java |   4 +-
 .../apache/juneau/rest/stats/MethodExecStats.java  |   4 +-
 .../apache/juneau/rest/stats/MethodExecStore.java  |   4 +-
 .../org/apache/juneau/rest/stats/ThrownStats.java  |   5 +-
 .../org/apache/juneau/rest/stats/ThrownStore.java  |   8 +-
 .../rest/swagger/BasicSwaggerProviderSession.java  |   6 +-
 .../juneau/rest/swagger/SwaggerProvider.java       |   9 +-
 .../org/apache/juneau/rest/util/RestUtils.java     | 101 ++---
 .../java/org/apache/juneau/rest/util/UrlPath.java  |   7 +-
 .../juneau/rest/util/UrlPathMatcherList.java       |   9 +-
 .../juneau/rest/widget/ContentTypeMenuItem.java    |   2 +-
 .../apache/juneau/rest/widget/ThemeMenuItem.java   |   2 +-
 .../pojos/PrimitiveAtomicObjectsBean.java          |   8 +-
 .../testutils/pojos/PrimitiveObjectsBean.java      |  26 +-
 .../org/apache/juneau/testutils/pojos/XBeans.java  |  83 ++---
 .../java/org/apache/juneau/BeanConfigTest.java     |   4 +-
 .../test/java/org/apache/juneau/BeanMapTest.java   |   4 +-
 .../test/java/org/apache/juneau/BenchmarkTest.java |   5 +-
 .../test/java/org/apache/juneau/ComboInput.java    |   8 +-
 .../apache/juneau/ReadWriteOnlyPropertiesTest.java |  18 +-
 .../juneau/SerializerPropertiesComboTest.java      |  11 +-
 .../test/java/org/apache/juneau/Version_Test.java  |   5 +-
 .../juneau/a/rttests/RoundTripBeanMapsTest.java    |   6 +-
 .../a/rttests/RoundTripBeanPropertiesTest.java     |   9 +-
 .../juneau/a/rttests/RoundTripClassesTest.java     |   6 +-
 .../apache/juneau/a/rttests/RoundTripEnumTest.java |  18 +-
 .../a/rttests/RoundTripOptionalObjectsTest.java    |  48 +--
 .../a/rttests/RoundTripPrimitivesBeansTest.java    |  20 +-
 .../a/rttests/RoundTripSimpleObjectsTest.java      |   7 +-
 .../juneau/a/rttests/RoundTripToOMapsTest.java     |   6 +-
 .../a/rttests/RoundTripTransformBeansTest.java     |  10 +-
 .../juneau/assertions/AnyAssertion_Test.java       |  13 +-
 .../assertions/AssertionPredicates_Test.java       |   4 +-
 .../apache/juneau/assertions/Assertions_Test.java  |  17 +-
 .../juneau/assertions/BeanListAssertion_Test.java  |  18 +-
 .../assertions/CollectionAssertion_Test.java       |  21 +-
 .../juneau/assertions/ListAssertion_Test.java      |  21 +-
 .../juneau/assertions/MapAssertion_Test.java       |  18 +-
 .../assertions/StringListAssertion_Test.java       |  19 +-
 .../apache/juneau/config/ConfigInterfaceTest.java  |  50 +--
 .../java/org/apache/juneau/config/ConfigTest.java  |   4 +-
 .../java/org/apache/juneau/cp/FileFinder_Test.java |  13 +-
 .../apache/juneau/dto/html5/Html5ComboTest.java    |  14 +-
 .../apache/juneau/dto/swagger/HeaderInfo_Test.java |  18 +-
 .../org/apache/juneau/dto/swagger/Items_Test.java  |  16 +-
 .../apache/juneau/dto/swagger/Operation_Test.java  | 100 ++---
 .../juneau/dto/swagger/ParameterInfo_Test.java     |  16 +-
 .../juneau/dto/swagger/ResponseInfo_Test.java      |  32 +-
 .../apache/juneau/dto/swagger/SchemaInfo_Test.java |  56 +--
 .../juneau/dto/swagger/SecurityScheme_Test.java    |  16 +-
 .../apache/juneau/dto/swagger/Swagger_Test.java    | 142 +++----
 .../java/org/apache/juneau/html/Common_Test.java   |  13 +-
 .../apache/juneau/http/BasicHttpResource_Test.java |   4 +-
 .../org/apache/juneau/http/BasicPart_Test.java     |   4 +-
 .../org/apache/juneau/http/HttpHeaders_Test.java   |   4 +-
 .../juneau/http/MediaRanges_FindMatch_Test.java    |   6 +-
 .../org/apache/juneau/http/MediaRanges_Test.java   |  10 +-
 .../apache/juneau/http/SerializedHeader_Test.java  |   8 +-
 .../juneau/http/SerializedHttpEntity_Test.java     |   4 +-
 .../apache/juneau/http/SerializedPart_Test.java    |   8 +-
 .../org/apache/juneau/http/StringRanges_Test.java  |   5 +-
 .../org/apache/juneau/http/header/Accept_Test.java |   3 +-
 .../org/apache/juneau/http/header/Allow_Test.java  |   3 +-
 .../http/header/BasicCsvArrayHeader_Test.java      |   7 +-
 .../header/BasicEntityTagArrayHeader_Test.java     |   3 +-
 .../header/BasicMediaRangeArrayHeader_Test.java    |   9 +-
 .../juneau/http/header/ContentLanguage_Test.java   |   3 +-
 .../juneau/http/header/ContentType_Match_Test.java |   4 +-
 .../apache/juneau/http/header/HeaderList_Test.java |  22 +-
 .../apache/juneau/http/header/IfMatch_Test.java    |   3 +-
 .../juneau/http/header/IfNoneMatch_Test.java       |   3 +-
 .../apache/juneau/http/header/Upgrade_Test.java    |   3 +-
 .../org/apache/juneau/http/header/Via_Test.java    |   3 +-
 .../org/apache/juneau/http/part/PartList_Test.java |  22 +-
 .../http/remote/Remote_BodyAnnotation_Test.java    |  14 +-
 .../remote/Remote_FormDataAnnotation_Test.java     |  32 +-
 .../http/remote/Remote_HeaderAnnotation_Test.java  |  32 +-
 .../http/remote/Remote_PathAnnotation_Test.java    |  34 +-
 .../http/remote/Remote_QueryAnnotation_Test.java   |  32 +-
 .../juneau/http/remote/RrpcInterfaceTest.java      | 130 +++----
 .../juneau/httppart/HttpPartSchema_Body_Test.java  |  11 +-
 .../httppart/HttpPartSchema_FormData_Test.java     |  11 +-
 .../httppart/HttpPartSchema_Header_Test.java       |  11 +-
 .../juneau/httppart/HttpPartSchema_Path_Test.java  |  11 +-
 .../juneau/httppart/HttpPartSchema_Query_Test.java |  11 +-
 .../HttpPartSchema_ResponseHeader_Test.java        |  10 +-
 .../httppart/HttpPartSchema_Response_Test.java     |  10 +-
 .../httppart/OpenApiPartSerializer_Test.java       | 329 ++++++++---------
 .../java/org/apache/juneau/jena/CommonTest.java    |  12 +-
 .../java/org/apache/juneau/json/CommonTest.java    |  12 +-
 .../java/org/apache/juneau/oapi/OpenApiTest.java   |  10 +-
 .../apache/juneau/pojotools/PojoSearcherTest.java  | 259 ++++++-------
 .../apache/juneau/pojotools/PojoSorterTest.java    |  30 +-
 .../apache/juneau/pojotools/PojoViewerTest.java    |  46 +--
 .../org/apache/juneau/reflect/ClassInfoTest.java   |   8 +-
 .../org/apache/juneau/reflect/ParamInfoTest.java   |   3 +-
 .../java/org/apache/juneau/rest/Swagger_Test.java  |   4 +-
 .../apache/juneau/rest/annotation/Body_Test.java   |   6 +-
 .../juneau/rest/annotation/Response_Test.java      |   6 +-
 .../juneau/rest/annotation/RestHook_Test.java      |   4 +-
 .../rest/client/RestClient_BasicCalls_Test.java    |  32 +-
 .../client/RestClient_CallbackStrings_Test.java    |   4 +-
 .../client/RestClient_Config_BeanContext_Test.java |   4 +-
 .../client/RestClient_Config_Serializer_Test.java  |   8 +-
 .../rest/client/RestClient_FormData_Test.java      |  10 +-
 .../rest/client/RestClient_Headers_Test.java       |   6 +-
 .../juneau/rest/client/RestClient_Query_Test.java  |  12 +-
 .../juneau/rest/guards/RoleMatcher_Test.java       |   4 +-
 .../apache/juneau/rest/mock/PathResolverTest.java  |   7 +-
 .../juneau/serializer/ReaderObjectComboTest.java   |  14 +-
 .../org/apache/juneau/svl/ResolvingOMapTest.java   |  18 +-
 .../apache/juneau/transform/AutoListSwapTest.java  |   5 +-
 .../apache/juneau/transform/AutoMapSwapTest.java   |   4 +-
 .../juneau/transform/AutoObjectSwapTest.java       |   4 +-
 .../juneau/transforms/BeanDictionaryComboTest.java |  26 +-
 .../transforms/ByteArrayBase64SwapComboTest.java   |  18 +-
 .../apache/juneau/transforms/DefaultSwapsTest.java |   6 +-
 .../juneau/transforms/ReaderObjectSwapTest.java    |  15 +-
 .../java/org/apache/juneau/uon/Common_UonTest.java |  12 +-
 .../juneau/urlencoding/Common_UrlEncodingTest.java |  12 +-
 .../java/org/apache/juneau/urlencoding/DTOs.java   |  43 +--
 .../java/org/apache/juneau/urlencoding/DTOs2.java  |  43 +--
 .../urlencoding/UrlEncodingSerializerTest.java     |   6 +-
 .../java/org/apache/juneau/utils/BeanDiffTest.java |   6 +-
 .../org/apache/juneau/utils/PojoQueryTest.java     |   8 +-
 .../org/apache/juneau/utils/StringUtilsTest.java   |  51 +++
 .../java/org/apache/juneau/xml/CommonTest.java     |  12 +-
 .../org/apache/juneau/xml/XmlCollapsedTest.java    |  26 +-
 .../test/java/org/apache/juneau/xml/XmlTest.java   |   4 +-
 355 files changed, 3170 insertions(+), 4313 deletions(-)

diff --git a/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java b/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
index 55b8a2a..f2c3ae9 100644
--- a/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
+++ b/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
@@ -11,6 +11,7 @@
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 
 import java.io.*;
@@ -24,7 +25,7 @@ import org.apache.juneau.reflect.*;
 
 public class ConfigurablePropertyCodeGenerator {
 
-	static Set<Class<?>> ignoreClasses = ASet.of(
+	static Set<Class<?>> ignoreClasses = set(
 		org.apache.http.entity.AbstractHttpEntity.class,
 		org.apache.http.entity.BasicHttpEntity.class,
 		org.apache.http.message.AbstractHttpMessage.class,
@@ -100,7 +101,7 @@ public class ConfigurablePropertyCodeGenerator {
 			StringBuilder sb = new StringBuilder();
 			ClassInfo ci = ClassInfo.of(c);
 			String cName = ci.getSimpleName();
-			Set<String> ignore = ASet.of();
+			Set<String> ignore = set();
 			FluentSetters fs = ci.getAnnotation(FluentSetters.class);
 			if (! fs.returns().isEmpty())
 				cName = fs.returns();
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 9df86f3..cb2f6c5 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
@@ -15,6 +15,7 @@ package org.apache.juneau.config;
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 import static java.util.Collections.*;
 
@@ -130,7 +131,7 @@ public final class Config extends Context implements ConfigEventListener {
 			l.add(cmd + ".cfg");
 		}
 
-		Set<File> files = ASortedSet.of(new File(".").listFiles());
+		Set<File> files = sortedSet(new File(".").listFiles());
 		for (File f : files)
 			if (f.getName().endsWith(".cfg"))
 				l.add(f.getName());
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
index ae6c31a..33ba24e 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.config;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.BinaryFormat.*;
-import static java.util.Optional.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -209,7 +209,7 @@ public class Entry {
 			if (type == OMap.class) return (Optional<T>)asMap();
 			if (type == OList.class) return (Optional<T>)asList();
 			if (isEmpty()) return empty();
-			if (isSimpleType(type)) return ofNullable((T)config.beanSession.convertToType(v, (Class<?>)type));
+			if (isSimpleType(type)) return optional((T)config.beanSession.convertToType(v, (Class<?>)type));
 
 			if (parser instanceof JsonParser) {
 				char s1 = firstNonWhitespaceChar(v);
@@ -218,7 +218,7 @@ public class Entry {
 				else if (s1 != '[' && s1 != '{' && ! "null".equals(v))
 					v = '\'' + v + '\'';
 			}
-			return ofNullable(parser.parse(v, type, args));
+			return optional(parser.parse(v, type, args));
 		} catch (ParseException e) {
 			throw new BeanRuntimeException(e, null, "Value could not be parsed.");
 		}
@@ -251,7 +251,7 @@ public class Entry {
 	 * @return This entry as a string, or {@link Optional#empty()} if the entry does not exist.
 	 */
 	public Optional<String> asString() {
- 		return isPresent() ? of(config.varSession.resolve(value)) : empty();
+ 		return optional(isPresent() ? config.varSession.resolve(value) : null);
 	}
 
 	/**
@@ -268,12 +268,12 @@ public class Entry {
 		char s1 = firstNonWhitespaceChar(v), s2 = lastNonWhitespaceChar(v);
 		if (s1 == '[' && s2 == ']' && config.parser instanceof JsonParser) {
 			try {
-				return ofNullable(config.parser.parse(v, String[].class));
+				return optional(config.parser.parse(v, String[].class));
 			} catch (ParseException e) {
 				throw new BeanRuntimeException(e);
 			}
 		}
-		return of(split(v));
+		return optional(split(v));
 	}
 
 	/**
@@ -307,7 +307,7 @@ public class Entry {
 	 * @return The value, or {@link Optional#empty()} if the value does not exist or the value is empty.
 	 */
 	public Optional<Integer> asInteger() {
-		return isEmpty() ? empty() : of(parseIntWithSuffix(toString()));
+		return optional(isEmpty() ? null : parseIntWithSuffix(toString()));
 	}
 
 
@@ -320,7 +320,7 @@ public class Entry {
 	 * @return The value, or {@link Optional#empty()} if the value does not exist or the value is empty.
 	 */
 	public Optional<Boolean> asBoolean() {
-		return isEmpty() ? empty() : of(Boolean.parseBoolean(toString()));
+		return optional(isEmpty() ? null : Boolean.parseBoolean(toString()));
 	}
 
 	/**
@@ -354,7 +354,7 @@ public class Entry {
 	 * @return The value, or {@link Optional#empty()} if the value does not exist or the value is empty.
 	 */
 	public Optional<Long> asLong() {
-		return isEmpty() ? empty() : of(parseLongWithSuffix(toString()));
+		return optional(isEmpty() ? null : parseLongWithSuffix(toString()));
 	}
 
 
@@ -373,7 +373,7 @@ public class Entry {
 	 * @return The value, or {@link Optional#empty()} if the value does not exist or the value is empty.
 	 */
 	public Optional<Double> asDouble() {
-		return isEmpty() ? empty() : of(Double.valueOf(toString()));
+		return optional(isEmpty() ? null : Double.valueOf(toString()));
 	}
 
 
@@ -392,7 +392,7 @@ public class Entry {
 	 * @return The value, or {@link Optional#empty()} if the value does not exist or the value is empty.
 	 */
 	public Optional<Float> asFloat() {
-		return isEmpty() ? empty() : of(Float.valueOf(toString()));
+		return optional(isEmpty() ? null : Float.valueOf(toString()));
 	}
 
 
@@ -410,10 +410,10 @@ public class Entry {
 		if (s.indexOf('\n') != -1) s = s.replaceAll("\n", "");
 		try {
 			if (config.binaryFormat == HEX)
-				return of(fromHex(s));
+				return optional(fromHex(s));
 			if (config.binaryFormat == SPACED_HEX)
-				return of(fromSpacedHex(s));
-			return of(base64Decode(s));
+				return optional(fromSpacedHex(s));
+			return optional(base64Decode(s));
 		} catch (Exception e) {
 			throw new BeanRuntimeException(e, null, "Value could not be converted to a byte array.");
 		}
@@ -454,7 +454,7 @@ public class Entry {
 			if (s1 != '{' && ! "null".equals(s))
 				s = '{' + s + '}';
 		}
-		return of(OMap.ofText(s, parser));
+		return optional(OMap.ofText(s, parser));
 	}
 
 	/**
@@ -493,7 +493,7 @@ public class Entry {
 			if (s1 != '[' && ! "null".equals(s))
 				s = '[' + s + ']';
 		}
-		return of(OList.ofText(s, parser));
+		return optional(OList.ofText(s, parser));
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Section.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Section.java
index 88907d9..315f6b5 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Section.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Section.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.config;
 
 import static org.apache.juneau.assertions.Assertions.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static java.util.Optional.*;
 
 import java.beans.*;
 import java.lang.reflect.*;
@@ -122,7 +122,7 @@ public class Section {
 			}
 		}
 
-		return of(bm.getBean());
+		return optional(bm.getBean());
 	}
 
 	/**
@@ -138,7 +138,7 @@ public class Section {
 		OMap om = new OMap();
 		for (String k : keys)
 			om.put(k, config.get(name + '/' + k).as(Object.class).orElse(null));
-		return of(om);
+		return optional(om);
 	}
 
 	/**
@@ -223,7 +223,7 @@ public class Section {
 			}
 		};
 
-		return ofNullable((T)Proxy.newProxyInstance(c.getClassLoader(), new Class[] { c }, h));
+		return optional((T)Proxy.newProxyInstance(c.getClassLoader(), new Class[] { c }, h));
 	}
 
 	/**
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
index 918af7c..ffcdd9b 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
@@ -14,6 +14,7 @@ package org.apache.juneau.config.internal;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.config.event.ConfigEventType.*;
 
 import java.io.*;
@@ -122,8 +123,7 @@ public class ConfigMap implements ConfigStoreListener {
 		}
 
 		List<Import> irl = new ArrayList<>(imports.size());
-		for (ConfigMap ic : AList.of(imports.values()).riterable())
-			irl.add(new Import(ic).register(listeners));
+		forEachReverse(listFrom(imports.values()), x -> irl.add(new Import(x).register(listeners)));
 		this.imports.addAll(irl);
 
 		// Add [blank] section.
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
index 87c7b47..f9ae3db 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.config.internal;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
@@ -52,7 +53,7 @@ public class ConfigMapEntry {
 
 		i = line.indexOf('#');
 		if (i != -1) {
-			String[] l2 = StringUtils.split(line, '#', 2);
+			String[] l2 = split(line, '#', 2);
 			line = l2[0];
 			if (l2.length == 2)
 				this.comment = l2[1].trim();
@@ -64,7 +65,7 @@ public class ConfigMapEntry {
 
 		this.value = StringUtils.replaceUnicodeSequences(line.trim());
 
-		this.preLines = AList.unmodifiable(preLines);
+		this.preLines = preLines == null ? emptyList() : unmodifiable(copyOf(preLines));
 	}
 
 	ConfigMapEntry(String key, String value, String modifiers, String comment, List<String> preLines) {
@@ -73,7 +74,7 @@ public class ConfigMapEntry {
 		this.value = value;
 		this.comment = comment;
 		this.modifiers = modifiers;
-		this.preLines = AList.unmodifiable(preLines);
+		this.preLines = preLines == null ? emptyList() : unmodifiable(copyOf(preLines));
 	}
 
 	/**
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
index 4442db4..d1cc510 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
@@ -385,7 +385,7 @@ public class FileStore extends ConfigStore {
 		try {
 			dir = new File(directory).getCanonicalFile();
 			dir.mkdirs();
-			exts = StringUtils.split(extensions);
+			exts = split(extensions);
 			watcher = enableWatcher ? new WatcherThread(dir, watcherSensitivity) : null;
 			if (watcher != null)
 				watcher.start();
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
index 54c809b..426e88a 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
@@ -12,9 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+import static org.apache.juneau.internal.ObjectUtils.eq;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static org.apache.juneau.internal.ObjectUtils.*;
 
 import java.text.*;
 import java.util.*;
@@ -109,7 +110,7 @@ public class LinkString implements Comparable<LinkString> {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> name() {
-		return Optional.ofNullable(name);
+		return optional(name);
 	}
 
 	/**
@@ -167,7 +168,7 @@ public class LinkString implements Comparable<LinkString> {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<java.net.URI> uri() {
-		return Optional.ofNullable(uri);
+		return optional(uri);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
index 3200df2..16225f7 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
@@ -104,7 +104,7 @@ public class Category extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> term() {
-		return Optional.ofNullable(term);
+		return optional(term);
 	}
 
 	/**
@@ -163,7 +163,7 @@ public class Category extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> scheme() {
-		return Optional.ofNullable(scheme);
+		return optional(scheme);
 	}
 
 	/**
@@ -218,7 +218,7 @@ public class Category extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> label() {
-		return Optional.ofNullable(label);
+		return optional(label);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
index df0d3d1..df6dc23 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.xml.*;
@@ -89,7 +89,7 @@ public abstract class Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> base() {
-		return Optional.ofNullable(base);
+		return optional(base);
 	}
 
 	/**
@@ -144,7 +144,7 @@ public abstract class Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> lang() {
-		return Optional.ofNullable(lang);
+		return optional(lang);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
index c6fffbc..97d3ab1 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.dto.atom.Utils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.util.*;
@@ -106,7 +107,7 @@ public class CommonEntry extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Person[]> authors() {
-		return Optional.ofNullable(authors);
+		return optional(authors);
 	}
 
 	/**
@@ -161,7 +162,7 @@ public class CommonEntry extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Category[]> categories() {
-		return Optional.ofNullable(categories);
+		return optional(categories);
 	}
 
 	/**
@@ -216,7 +217,7 @@ public class CommonEntry extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Person[]> contributors() {
-		return Optional.ofNullable(contributors);
+		return optional(contributors);
 	}
 
 	/**
@@ -270,7 +271,7 @@ public class CommonEntry extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Id> id() {
-		return Optional.ofNullable(id);
+		return optional(id);
 	}
 
 	/**
@@ -341,7 +342,7 @@ public class CommonEntry extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Link[]> links() {
-		return Optional.ofNullable(links);
+		return optional(links);
 	}
 
 	/**
@@ -395,7 +396,7 @@ public class CommonEntry extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Text> rights() {
-		return Optional.ofNullable(rights);
+		return optional(rights);
 	}
 
 	/**
@@ -465,7 +466,7 @@ public class CommonEntry extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Text> title() {
-		return Optional.ofNullable(title);
+		return optional(title);
 	}
 
 	/**
@@ -535,7 +536,7 @@ public class CommonEntry extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Calendar> updated() {
-		return Optional.ofNullable(updated);
+		return optional(updated);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
index c6c1d92..0c8877c 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.xml.annotation.*;
@@ -133,7 +133,7 @@ public class Content extends Text {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> src() {
-		return Optional.ofNullable(src);
+		return optional(src);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
index 9b82390..d99a314 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.dto.atom.Utils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -121,7 +122,7 @@ public class Entry extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Content> content() {
-		return Optional.ofNullable(content);
+		return optional(content);
 	}
 
 	/**
@@ -175,7 +176,7 @@ public class Entry extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Calendar> published() {
-		return Optional.ofNullable(published);
+		return optional(published);
 	}
 
 	/**
@@ -245,7 +246,7 @@ public class Entry extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Source> source() {
-		return Optional.ofNullable(source);
+		return optional(source);
 	}
 
 	/**
@@ -299,7 +300,7 @@ public class Entry extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Text> summary() {
-		return Optional.ofNullable(summary);
+		return optional(summary);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
index 2931671..f64b58e 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.util.*;
@@ -127,7 +128,7 @@ public class Feed extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Generator> generator() {
-		return Optional.ofNullable(generator);
+		return optional(generator);
 	}
 
 	/**
@@ -181,7 +182,7 @@ public class Feed extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Icon> icon() {
-		return Optional.ofNullable(icon);
+		return optional(icon);
 	}
 
 	/**
@@ -235,7 +236,7 @@ public class Feed extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Logo> logo() {
-		return Optional.ofNullable(logo);
+		return optional(logo);
 	}
 
 	/**
@@ -289,7 +290,7 @@ public class Feed extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Text> subtitle() {
-		return Optional.ofNullable(subtitle);
+		return optional(subtitle);
 	}
 
 	/**
@@ -360,7 +361,7 @@ public class Feed extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Entry[]> entries() {
-		return Optional.ofNullable(entries);
+		return optional(entries);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Generator.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Generator.java
index 621d8f5..4174b5c 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Generator.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Generator.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
@@ -106,7 +106,7 @@ public class Generator extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> uri() {
-		return Optional.ofNullable(uri);
+		return optional(uri);
 	}
 
 	/**
@@ -161,7 +161,7 @@ public class Generator extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> version() {
-		return Optional.ofNullable(version);
+		return optional(version);
 	}
 
 	/**
@@ -216,7 +216,7 @@ public class Generator extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> text() {
-		return Optional.ofNullable(text);
+		return optional(text);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Icon.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Icon.java
index 433bda4..cdf97d0 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Icon.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Icon.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -110,7 +110,7 @@ public class Icon extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> uri() {
-		return Optional.ofNullable(uri);
+		return optional(uri);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Id.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Id.java
index 09e7959..3aa38ce 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Id.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Id.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.util.*;
@@ -94,7 +95,7 @@ public class Id extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> text() {
-		return Optional.ofNullable(text);
+		return optional(text);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Link.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Link.java
index b91de86..08ae013 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Link.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Link.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.util.*;
@@ -109,7 +110,7 @@ public class Link extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> href() {
-		return Optional.ofNullable(href);
+		return optional(href);
 	}
 
 	/**
@@ -164,7 +165,7 @@ public class Link extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> rel() {
-		return Optional.ofNullable(rel);
+		return optional(rel);
 	}
 
 	/**
@@ -228,7 +229,7 @@ public class Link extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> type() {
-		return Optional.ofNullable(type);
+		return optional(type);
 	}
 
 	/**
@@ -283,7 +284,7 @@ public class Link extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> hreflang() {
-		return Optional.ofNullable(hreflang);
+		return optional(hreflang);
 	}
 
 	/**
@@ -338,7 +339,7 @@ public class Link extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> title() {
-		return Optional.ofNullable(title);
+		return optional(title);
 	}
 
 	/**
@@ -393,7 +394,7 @@ public class Link extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> length() {
-		return Optional.ofNullable(length);
+		return optional(length);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Logo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Logo.java
index 424c1ec..545b978 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Logo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Logo.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -113,7 +113,7 @@ public class Logo extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> uri() {
-		return Optional.ofNullable(uri);
+		return optional(uri);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Person.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Person.java
index 809f904..92bbf38 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Person.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Person.java
@@ -12,10 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -98,7 +98,7 @@ public class Person extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> name() {
-		return Optional.ofNullable(name);
+		return optional(name);
 	}
 
 	/**
@@ -159,7 +159,7 @@ public class Person extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> uri() {
-		return Optional.ofNullable(uri);
+		return optional(uri);
 	}
 
 	/**
@@ -213,7 +213,7 @@ public class Person extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> email() {
-		return Optional.ofNullable(email);
+		return optional(email);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Source.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Source.java
index aae93f4..0687851 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Source.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Source.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 
 /**
@@ -91,7 +93,7 @@ public class Source extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Generator> generator() {
-		return Optional.ofNullable(generator);
+		return optional(generator);
 	}
 
 	/**
@@ -145,7 +147,7 @@ public class Source extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Icon> icon() {
-		return Optional.ofNullable(icon);
+		return optional(icon);
 	}
 
 	/**
@@ -199,7 +201,7 @@ public class Source extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Logo> logo() {
-		return Optional.ofNullable(logo);
+		return optional(logo);
 	}
 
 	/**
@@ -253,7 +255,7 @@ public class Source extends CommonEntry {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Text> subtitle() {
-		return Optional.ofNullable(subtitle);
+		return optional(subtitle);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Text.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Text.java
index c6edb6b..3e2c28c 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Text.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Text.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.atom;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.util.*;
@@ -118,7 +119,7 @@ public class Text extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> type() {
-		return Optional.ofNullable(type);
+		return optional(type);
 	}
 
 	/**
@@ -173,7 +174,7 @@ public class Text extends Common {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> text() {
-		return Optional.ofNullable(text);
+		return optional(text);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/A.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/A.java
index d478e6b..249c71c 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/A.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/A.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Area.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Area.java
index 322a3b2..c6fe46c 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Area.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Area.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Audio.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Audio.java
index d10012a..4d83276 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Audio.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Audio.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Base.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Base.java
index a9d309a..9463daf 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Base.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Base.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Button.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Button.java
index 2e5ca62..beebecc 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Button.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Button.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Embed.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Embed.java
index 40c6ec4..5a2aeff 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Embed.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Embed.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Form.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Form.java
index dda1422..0f3774b 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Form.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Form.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
index 1d8e862..60e9d87 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
@@ -12,11 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.html5;
 
-import static org.apache.juneau.xml.annotation.XmlFormat.*;
 import static org.apache.juneau.html.annotation.HtmlFormat.*;
+import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 import java.util.Map.*;
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Iframe.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Iframe.java
index 7166ed6..0de683c 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Iframe.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Iframe.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Img.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Img.java
index fa99e08..a8b0b0e 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Img.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Img.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Link.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Link.java
index f2b8084..feb7cab 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Link.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Link.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Script.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Script.java
index 12036b8..784a0ce 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Script.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Script.java
@@ -15,7 +15,6 @@ package org.apache.juneau.dto.html5;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Source.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Source.java
index 11a2b1a..f132cbe 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Source.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Source.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Track.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Track.java
index 7679214..14e0eb2 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Track.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Track.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Video.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Video.java
index bc6fac4..3f4e06e 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Video.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/Video.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.dto.html5;
 
 import java.net.*;
-import java.net.URI;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
index 10087e8..677be60 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchemaMap.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchemaMap.java
index 975fa98..c046013 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchemaMap.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchemaMap.java
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.jsonschema;
 
-import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.ThrowableUtils.*;
+
 import java.io.*;
 import java.net.*;
 import java.util.concurrent.*;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Contact.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Contact.java
index 4e4d9e0..8ecbb69 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Contact.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Contact.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
@@ -124,7 +124,7 @@ public class Contact extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> email() {
-		return Optional.ofNullable(getEmail());
+		return optional(getEmail());
 	}
 
 	/**
@@ -183,7 +183,7 @@ public class Contact extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> name() {
-		return Optional.ofNullable(getName());
+		return optional(getName());
 	}
 
 	/**
@@ -241,7 +241,7 @@ public class Contact extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> url() {
-		return Optional.ofNullable(getUrl());
+		return optional(getUrl());
 	}
 
 	/**
@@ -320,10 +320,11 @@ public class Contact extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(email != null, "email")
-			.appendIf(name != null, "name")
-			.appendIf(url != null, "url");
+		Set<String> s = setBuilder(String.class)
+			.addIf(email != null, "email")
+			.addIf(name != null, "name")
+			.addIf(url != null, "url")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java
index 22cbb5b..76f6733 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ExternalDocumentation.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -122,7 +122,7 @@ public class ExternalDocumentation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -181,7 +181,7 @@ public class ExternalDocumentation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> url() {
-		return Optional.ofNullable(getUrl());
+		return optional(getUrl());
 	}
 
 	/**
@@ -261,9 +261,10 @@ public class ExternalDocumentation extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(description != null, "description")
-			.appendIf(url != null, "url");
+		Set<String> s = setBuilder(String.class)
+			.addIf(description != null, "description")
+			.addIf(url != null, "url")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java
index 0f2d044..3bac104 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java
@@ -12,10 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -182,7 +182,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> collectionFormat() {
-		return Optional.ofNullable(getCollectionFormat());
+		return optional(getCollectionFormat());
 	}
 
 	/**
@@ -268,7 +268,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Object> _default() {
-		return Optional.ofNullable(getDefault());
+		return optional(getDefault());
 	}
 
 	/**
@@ -331,7 +331,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -392,7 +392,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<Object>> _enum() {
-		return Optional.ofNullable(getEnum());
+		return optional(getEnum());
 	}
 
 	/**
@@ -450,7 +450,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Object> example() {
-		return Optional.ofNullable(getExample());
+		return optional(getExample());
 	}
 
 	/**
@@ -496,7 +496,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> exclusiveMaximum() {
-		return Optional.ofNullable(getExclusiveMaximum());
+		return optional(getExclusiveMaximum());
 	}
 
 	/**
@@ -555,7 +555,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> exclusiveMinimum() {
-		return Optional.ofNullable(getExclusiveMinimum());
+		return optional(getExclusiveMinimum());
 	}
 
 	/**
@@ -623,7 +623,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> format() {
-		return Optional.ofNullable(getFormat());
+		return optional(getFormat());
 	}
 
 	/**
@@ -682,7 +682,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Items> items() {
-		return Optional.ofNullable(getItems());
+		return optional(getItems());
 	}
 
 	/**
@@ -754,7 +754,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> maximum() {
-		return Optional.ofNullable(getMaximum());
+		return optional(getMaximum());
 	}
 
 	/**
@@ -813,7 +813,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxItems() {
-		return Optional.ofNullable(getMaxItems());
+		return optional(getMaxItems());
 	}
 
 	/**
@@ -872,7 +872,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxLength() {
-		return Optional.ofNullable(getMaxLength());
+		return optional(getMaxLength());
 	}
 
 	/**
@@ -931,7 +931,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> minimum() {
-		return Optional.ofNullable(getMinimum());
+		return optional(getMinimum());
 	}
 
 	/**
@@ -990,7 +990,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minItems() {
-		return Optional.ofNullable(getMinItems());
+		return optional(getMinItems());
 	}
 
 	/**
@@ -1049,7 +1049,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minLength() {
-		return Optional.ofNullable(getMinLength());
+		return optional(getMinLength());
 	}
 
 	/**
@@ -1108,7 +1108,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> multipleOf() {
-		return Optional.ofNullable(getMultipleOf());
+		return optional(getMultipleOf());
 	}
 
 	/**
@@ -1168,7 +1168,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> pattern() {
-		return Optional.ofNullable(getPattern());
+		return optional(getPattern());
 	}
 
 	/**
@@ -1217,7 +1217,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> ref() {
-		return Optional.ofNullable(getRef());
+		return optional(getRef());
 	}
 
 	/**
@@ -1285,7 +1285,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> type() {
-		return Optional.ofNullable(getType());
+		return optional(getType());
 	}
 
 	/**
@@ -1342,7 +1342,7 @@ public class HeaderInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> uniqueItems() {
-		return Optional.ofNullable(getUniqueItems());
+		return optional(getUniqueItems());
 	}
 
 	/**
@@ -1434,27 +1434,28 @@ public class HeaderInfo extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(collectionFormat != null, "collectionFormat")
-			.appendIf(_default != null, "default")
-			.appendIf(description != null, "description")
-			.appendIf(_enum != null, "enum")
-			.appendIf(example != null, "example")
-			.appendIf(exclusiveMaximum != null, "exclusiveMaximum")
-			.appendIf(exclusiveMinimum != null, "exclusiveMinimum")
-			.appendIf(format != null, "format")
-			.appendIf(items != null, "items")
-			.appendIf(maximum != null, "maximum")
-			.appendIf(maxItems != null, "maxItems")
-			.appendIf(maxLength != null, "maxLength")
-			.appendIf(minimum != null, "minimum")
-			.appendIf(minItems != null, "minItems")
-			.appendIf(minLength != null, "minLength")
-			.appendIf(multipleOf != null, "multipleOf")
-			.appendIf(pattern != null, "pattern")
-			.appendIf(ref != null, "$ref")
-			.appendIf(type != null, "type")
-			.appendIf(uniqueItems != null, "uniqueItems");
+		Set<String> s = setBuilder(String.class)
+			.addIf(collectionFormat != null, "collectionFormat")
+			.addIf(_default != null, "default")
+			.addIf(description != null, "description")
+			.addIf(_enum != null, "enum")
+			.addIf(example != null, "example")
+			.addIf(exclusiveMaximum != null, "exclusiveMaximum")
+			.addIf(exclusiveMinimum != null, "exclusiveMinimum")
+			.addIf(format != null, "format")
+			.addIf(items != null, "items")
+			.addIf(maximum != null, "maximum")
+			.addIf(maxItems != null, "maxItems")
+			.addIf(maxLength != null, "maxLength")
+			.addIf(minimum != null, "minimum")
+			.addIf(minItems != null, "minItems")
+			.addIf(minLength != null, "minLength")
+			.addIf(multipleOf != null, "multipleOf")
+			.addIf(pattern != null, "pattern")
+			.addIf(ref != null, "$ref")
+			.addIf(type != null, "type")
+			.addIf(uniqueItems != null, "uniqueItems")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 
 	}
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Info.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Info.java
index 41fea77..766f7f9 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Info.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Info.java
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
@@ -152,7 +153,7 @@ public class Info extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Contact> contact() {
-		return Optional.ofNullable(getContact());
+		return optional(getContact());
 	}
 
 	/**
@@ -232,7 +233,7 @@ public class Info extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -291,7 +292,7 @@ public class Info extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<License> license() {
-		return Optional.ofNullable(getLicense());
+		return optional(getLicense());
 	}
 
 	/**
@@ -369,7 +370,7 @@ public class Info extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> siteName() {
-		return Optional.ofNullable(getSiteName());
+		return optional(getSiteName());
 	}
 
 	/**
@@ -426,7 +427,7 @@ public class Info extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> termsOfService() {
-		return Optional.ofNullable(getTermsOfService());
+		return optional(getTermsOfService());
 	}
 
 	/**
@@ -483,7 +484,7 @@ public class Info extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> title() {
-		return Optional.ofNullable(getTitle());
+		return optional(getTitle());
 	}
 
 	/**
@@ -541,7 +542,7 @@ public class Info extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> version() {
-		return Optional.ofNullable(getVersion());
+		return optional(getVersion());
 	}
 
 	/**
@@ -597,14 +598,15 @@ public class Info extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(contact != null, "contact")
-			.appendIf(description != null, "description")
-			.appendIf(license != null, "license")
-			.appendIf(siteName != null, "siteName")
-			.appendIf(termsOfService != null, "termsOfService")
-			.appendIf(title != null, "title")
-			.appendIf(version != null, "version");
+		Set<String> s = setBuilder(String.class)
+			.addIf(contact != null, "contact")
+			.addIf(description != null, "description")
+			.addIf(license != null, "license")
+			.addIf(siteName != null, "siteName")
+			.addIf(termsOfService != null, "termsOfService")
+			.addIf(title != null, "title")
+			.addIf(version != null, "version")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Items.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Items.java
index 17a657a..ced6696 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Items.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Items.java
@@ -12,10 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -182,7 +182,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> collectionFormat() {
-		return Optional.ofNullable(getCollectionFormat());
+		return optional(getCollectionFormat());
 	}
 
 	/**
@@ -268,7 +268,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Object> _default() {
-		return Optional.ofNullable(getDefault());
+		return optional(getDefault());
 	}
 
 	/**
@@ -335,7 +335,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<Object>> _enum() {
-		return Optional.ofNullable(getEnum());
+		return optional(getEnum());
 	}
 
 	/**
@@ -393,7 +393,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> exclusiveMaximum() {
-		return Optional.ofNullable(getExclusiveMaximum());
+		return optional(getExclusiveMaximum());
 	}
 
 	/**
@@ -452,7 +452,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> exclusiveMinimum() {
-		return Optional.ofNullable(getExclusiveMinimum());
+		return optional(getExclusiveMinimum());
 	}
 
 	/**
@@ -520,7 +520,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> format() {
-		return Optional.ofNullable(getFormat());
+		return optional(getFormat());
 	}
 
 	/**
@@ -579,7 +579,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Items> items() {
-		return Optional.ofNullable(getItems());
+		return optional(getItems());
 	}
 
 	/**
@@ -651,7 +651,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> maximum() {
-		return Optional.ofNullable(getMaximum());
+		return optional(getMaximum());
 	}
 
 	/**
@@ -710,7 +710,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxItems() {
-		return Optional.ofNullable(getMaxItems());
+		return optional(getMaxItems());
 	}
 
 	/**
@@ -769,7 +769,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxLength() {
-		return Optional.ofNullable(getMaxLength());
+		return optional(getMaxLength());
 	}
 
 	/**
@@ -828,7 +828,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> minimum() {
-		return Optional.ofNullable(getMinimum());
+		return optional(getMinimum());
 	}
 
 	/**
@@ -887,7 +887,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minItems() {
-		return Optional.ofNullable(getMinItems());
+		return optional(getMinItems());
 	}
 
 	/**
@@ -946,7 +946,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minLength() {
-		return Optional.ofNullable(getMinLength());
+		return optional(getMinLength());
 	}
 
 	/**
@@ -1005,7 +1005,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> multipleOf() {
-		return Optional.ofNullable(getMultipleOf());
+		return optional(getMultipleOf());
 	}
 
 	/**
@@ -1065,7 +1065,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> pattern() {
-		return Optional.ofNullable(getPattern());
+		return optional(getPattern());
 	}
 
 	/**
@@ -1114,7 +1114,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> ref() {
-		return Optional.ofNullable(getRef());
+		return optional(getRef());
 	}
 
 	/**
@@ -1178,7 +1178,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> type() {
-		return Optional.ofNullable(getType());
+		return optional(getType());
 	}
 
 	/**
@@ -1235,7 +1235,7 @@ public class Items extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> uniqueItems() {
-		return Optional.ofNullable(getUniqueItems());
+		return optional(getUniqueItems());
 	}
 
 	/**
@@ -1323,25 +1323,26 @@ public class Items extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(collectionFormat != null, "collectionFormat")
-			.appendIf(_default != null, "default")
-			.appendIf(_enum != null, "enum")
-			.appendIf(exclusiveMaximum != null, "exclusiveMaximum")
-			.appendIf(exclusiveMinimum != null, "exclusiveMinimum")
-			.appendIf(format != null, "format")
-			.appendIf(items != null, "items")
-			.appendIf(maximum != null, "maximum")
-			.appendIf(maxItems != null, "maxItems")
-			.appendIf(maxLength != null, "maxLength")
-			.appendIf(minimum != null, "minimum")
-			.appendIf(minItems != null, "minItems")
-			.appendIf(minLength != null, "minLength")
-			.appendIf(multipleOf != null, "multipleOf")
-			.appendIf(pattern != null, "pattern")
-			.appendIf(ref != null, "$ref")
-			.appendIf(type != null, "type")
-			.appendIf(uniqueItems != null, "uniqueItems");
+		Set<String> s = setBuilder(String.class)
+			.addIf(collectionFormat != null, "collectionFormat")
+			.addIf(_default != null, "default")
+			.addIf(_enum != null, "enum")
+			.addIf(exclusiveMaximum != null, "exclusiveMaximum")
+			.addIf(exclusiveMinimum != null, "exclusiveMinimum")
+			.addIf(format != null, "format")
+			.addIf(items != null, "items")
+			.addIf(maximum != null, "maximum")
+			.addIf(maxItems != null, "maxItems")
+			.addIf(maxLength != null, "maxLength")
+			.addIf(minimum != null, "minimum")
+			.addIf(minItems != null, "minItems")
+			.addIf(minLength != null, "minLength")
+			.addIf(multipleOf != null, "multipleOf")
+			.addIf(pattern != null, "pattern")
+			.addIf(ref != null, "$ref")
+			.addIf(type != null, "type")
+			.addIf(uniqueItems != null, "uniqueItems")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/License.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/License.java
index 2483843..394de5b 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/License.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/License.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -121,7 +121,7 @@ public class License extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> name() {
-		return Optional.ofNullable(getName());
+		return optional(getName());
 	}
 
 	/**
@@ -180,7 +180,7 @@ public class License extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<URI> url() {
-		return Optional.ofNullable(getUrl());
+		return optional(getUrl());
 	}
 
 	/**
@@ -257,9 +257,10 @@ public class License extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(name != null, "name")
-			.appendIf(url != null, "url");
+		Set<String> s = setBuilder(String.class)
+			.addIf(name != null, "name")
+			.addIf(url != null, "url")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Operation.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Operation.java
index 3e56f00..180de69 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Operation.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Operation.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ConverterUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
+import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
@@ -263,7 +263,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<MediaType>> consumes() {
-		return Optional.ofNullable(getConsumes());
+		return optional(getConsumes());
 	}
 
 	/**
@@ -361,7 +361,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> deprecated() {
-		return Optional.ofNullable(getDeprecated());
+		return optional(getDeprecated());
 	}
 
 	/**
@@ -436,7 +436,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -495,7 +495,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<ExternalDocumentation> externalDocs() {
-		return Optional.ofNullable(getExternalDocs());
+		return optional(getExternalDocs());
 	}
 
 	/**
@@ -577,7 +577,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> operationId() {
-		return Optional.ofNullable(getOperationId());
+		return optional(getOperationId());
 	}
 
 	/**
@@ -654,7 +654,7 @@ public class Operation extends SwaggerElement {
 	 * @return The matching parameter info, or <jk>null</jk> if not found.
 	 */
 	public Optional<ParameterInfo> parameter(String in, String name) {
-		return Optional.ofNullable(getParameter(in, name));
+		return optional(getParameter(in, name));
 	}
 
 	/**
@@ -694,7 +694,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<List<ParameterInfo>> parameters() {
-		return Optional.ofNullable(getParameters());
+		return optional(getParameters());
 	}
 
 	/**
@@ -797,7 +797,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<MediaType>> produces() {
-		return Optional.ofNullable(getProduces());
+		return optional(getProduces());
 	}
 
 	/**
@@ -891,7 +891,7 @@ public class Operation extends SwaggerElement {
 	 * @return The response info as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<ResponseInfo> response(String status) {
-		return Optional.ofNullable(getResponse(status));
+		return optional(getResponse(status));
 	}
 
 	/**
@@ -943,7 +943,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,ResponseInfo>> responses() {
-		return Optional.ofNullable(getResponses());
+		return optional(getResponses());
 	}
 
 	/**
@@ -1041,7 +1041,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<String>> schemes() {
-		return Optional.ofNullable(getSchemes());
+		return optional(getSchemes());
 	}
 
 	/**
@@ -1144,7 +1144,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<List<Map<String,List<String>>>> security() {
-		return Optional.ofNullable(getSecurity());
+		return optional(getSecurity());
 	}
 
 	/**
@@ -1228,7 +1228,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> summary() {
-		return Optional.ofNullable(getSummary());
+		return optional(getSummary());
 	}
 
 	/**
@@ -1299,7 +1299,7 @@ public class Operation extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<String>> tags() {
-		return Optional.ofNullable(getTags());
+		return optional(getTags());
 	}
 
 	/**
@@ -1393,19 +1393,20 @@ public class Operation extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(consumes != null, "consumes")
-			.appendIf(deprecated != null, "deprecated")
-			.appendIf(description != null, "description")
-			.appendIf(externalDocs != null, "externalDocs")
-			.appendIf(operationId != null, "operationId")
-			.appendIf(parameters != null, "parameters")
-			.appendIf(produces != null, "produces")
-			.appendIf(responses != null, "responses")
-			.appendIf(schemes != null, "schemes")
-			.appendIf(security != null, "security")
-			.appendIf(summary != null, "summary")
-			.appendIf(tags != null, "tags");
+		Set<String> s = setBuilder(String.class)
+			.addIf(consumes != null, "consumes")
+			.addIf(deprecated != null, "deprecated")
+			.addIf(description != null, "description")
+			.addIf(externalDocs != null, "externalDocs")
+			.addIf(operationId != null, "operationId")
+			.addIf(parameters != null, "parameters")
+			.addIf(produces != null, "produces")
+			.addIf(responses != null, "responses")
+			.addIf(schemes != null, "schemes")
+			.addIf(security != null, "security")
+			.addIf(summary != null, "summary")
+			.addIf(tags != null, "tags")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java
index 75cc21d..f809233 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
@@ -45,7 +46,9 @@ public class OperationMap extends TreeMap<String,Operation> {
 	private static final long serialVersionUID = 1L;
 
 	private static final Comparator<String> OP_SORTER = new Comparator<String>() {
-		private final Map<String,String> methods = AMap.of("get","0","put","1","post","2","delete","3","options","4","head","5","patch","6");
+		private final Map<String,String> methods = mapBuilder(String.class,String.class)
+			.add("get","0").add("put","1").add("post","2").add("delete","3").add("options","4").add("head","5").add("patch","6")
+			.build();
 
 		@Override
 		public int compare(String o1, String o2) {
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ParameterInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ParameterInfo.java
index 4129a99..5f46a5c 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ParameterInfo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ParameterInfo.java
@@ -12,11 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.ArrayUtils.*;
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.ArrayUtils.contains;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -295,7 +295,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> allowEmptyValue() {
-		return Optional.ofNullable(getAllowEmptyValue());
+		return optional(getAllowEmptyValue());
 	}
 
 	/**
@@ -386,7 +386,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> collectionFormat() {
-		return Optional.ofNullable(getCollectionFormat());
+		return optional(getCollectionFormat());
 	}
 
 	/**
@@ -462,7 +462,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Object> _default() {
-		return Optional.ofNullable(getDefault());
+		return optional(getDefault());
 	}
 
 	/**
@@ -522,7 +522,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -585,7 +585,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<Object>> _enum() {
-		return Optional.ofNullable(getEnum());
+		return optional(getEnum());
 	}
 
 	/**
@@ -641,7 +641,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> exclusiveMaximum() {
-		return Optional.ofNullable(getExclusiveMaximum());
+		return optional(getExclusiveMaximum());
 	}
 
 	/**
@@ -698,7 +698,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> exclusiveMinimum() {
-		return Optional.ofNullable(getExclusiveMinimum());
+		return optional(getExclusiveMinimum());
 	}
 
 	/**
@@ -764,7 +764,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> format() {
-		return Optional.ofNullable(getFormat());
+		return optional(getFormat());
 	}
 
 	/**
@@ -837,7 +837,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> in() {
-		return Optional.ofNullable(getIn());
+		return optional(getIn());
 	}
 
 	/**
@@ -904,7 +904,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Items> items() {
-		return Optional.ofNullable(getItems());
+		return optional(getItems());
 	}
 
 	/**
@@ -974,7 +974,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> maximum() {
-		return Optional.ofNullable(getMaximum());
+		return optional(getMaximum());
 	}
 
 	/**
@@ -1031,7 +1031,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxItems() {
-		return Optional.ofNullable(getMaxItems());
+		return optional(getMaxItems());
 	}
 
 	/**
@@ -1088,7 +1088,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxLength() {
-		return Optional.ofNullable(getMaxLength());
+		return optional(getMaxLength());
 	}
 
 	/**
@@ -1145,7 +1145,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> minimum() {
-		return Optional.ofNullable(getMinimum());
+		return optional(getMinimum());
 	}
 
 	/**
@@ -1202,7 +1202,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minItems() {
-		return Optional.ofNullable(getMinItems());
+		return optional(getMinItems());
 	}
 
 	/**
@@ -1259,7 +1259,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minLength() {
-		return Optional.ofNullable(getMinLength());
+		return optional(getMinLength());
 	}
 
 	/**
@@ -1318,7 +1318,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> multipleOf() {
-		return Optional.ofNullable(getMultipleOf());
+		return optional(getMultipleOf());
 	}
 
 	/**
@@ -1397,7 +1397,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> name() {
-		return Optional.ofNullable(getName());
+		return optional(getName());
 	}
 
 	/**
@@ -1446,7 +1446,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> pattern() {
-		return Optional.ofNullable(getPattern());
+		return optional(getPattern());
 	}
 
 	/**
@@ -1504,7 +1504,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> required() {
-		return Optional.ofNullable(getRequired());
+		return optional(getRequired());
 	}
 
 	/**
@@ -1582,7 +1582,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<SchemaInfo> schema() {
-		return Optional.ofNullable(getSchema());
+		return optional(getSchema());
 	}
 
 	/**
@@ -1677,7 +1677,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> type() {
-		return Optional.ofNullable(getType());
+		return optional(getType());
 	}
 
 	/**
@@ -1735,7 +1735,7 @@ public class ParameterInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> uniqueItems() {
-		return Optional.ofNullable(getUniqueItems());
+		return optional(getUniqueItems());
 	}
 
 	/**
@@ -1833,32 +1833,33 @@ public class ParameterInfo extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(allowEmptyValue != null, "allowEmptyValue")
-			.appendIf(collectionFormat != null, "collectionFormat")
-			.appendIf(_default != null, "default")
-			.appendIf(description != null, "description")
-			.appendIf(_enum != null, "enum")
-			.appendIf(example != null, "example")
-			.appendIf(examples != null, "examples")
-			.appendIf(exclusiveMaximum != null, "exclusiveMaximum")
-			.appendIf(exclusiveMinimum != null, "exclusiveMinimum")
-			.appendIf(format != null, "format")
-			.appendIf(in != null, "in")
-			.appendIf(items != null, "items")
-			.appendIf(maximum != null, "maximum")
-			.appendIf(maxItems != null, "maxItems")
-			.appendIf(maxLength != null, "maxLength")
-			.appendIf(minimum != null, "minimum")
-			.appendIf(minItems != null, "minItems")
-			.appendIf(minLength != null, "minLength")
-			.appendIf(multipleOf != null, "multipleOf")
-			.appendIf(name != null, "name")
-			.appendIf(pattern != null, "pattern")
-			.appendIf(required != null, "required")
-			.appendIf(schema != null, "schema")
-			.appendIf(type != null, "type")
-			.appendIf(uniqueItems != null, "uniqueItems");
+		Set<String> s = setBuilder(String.class)
+			.addIf(allowEmptyValue != null, "allowEmptyValue")
+			.addIf(collectionFormat != null, "collectionFormat")
+			.addIf(_default != null, "default")
+			.addIf(description != null, "description")
+			.addIf(_enum != null, "enum")
+			.addIf(example != null, "example")
+			.addIf(examples != null, "examples")
+			.addIf(exclusiveMaximum != null, "exclusiveMaximum")
+			.addIf(exclusiveMinimum != null, "exclusiveMinimum")
+			.addIf(format != null, "format")
+			.addIf(in != null, "in")
+			.addIf(items != null, "items")
+			.addIf(maximum != null, "maximum")
+			.addIf(maxItems != null, "maxItems")
+			.addIf(maxLength != null, "maxLength")
+			.addIf(minimum != null, "minimum")
+			.addIf(minItems != null, "minItems")
+			.addIf(minLength != null, "minLength")
+			.addIf(multipleOf != null, "multipleOf")
+			.addIf(name != null, "name")
+			.addIf(pattern != null, "pattern")
+			.addIf(required != null, "required")
+			.addIf(schema != null, "schema")
+			.addIf(type != null, "type")
+			.addIf(uniqueItems != null, "uniqueItems")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
index 4428efa..d4a434e 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
@@ -171,7 +171,7 @@ public class ResponseInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -254,7 +254,7 @@ public class ResponseInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,Object>> examples() {
-		return Optional.ofNullable(getExamples());
+		return optional(getExamples());
 	}
 
 	/**
@@ -350,7 +350,7 @@ public class ResponseInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,HeaderInfo>> headers() {
-		return Optional.ofNullable(getHeaders());
+		return optional(getHeaders());
 	}
 
 	/**
@@ -405,7 +405,7 @@ public class ResponseInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<HeaderInfo> header(String name) {
-		return Optional.ofNullable(getHeader(name));
+		return optional(getHeader(name));
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
@@ -448,7 +448,7 @@ public class ResponseInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<SchemaInfo> schema() {
-		return Optional.ofNullable(getSchema());
+		return optional(getSchema());
 	}
 
 	/**
@@ -519,11 +519,12 @@ public class ResponseInfo extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(description != null, "description")
-			.appendIf(examples != null, "examples")
-			.appendIf(headers != null, "headers")
-			.appendIf(schema != null, "schema");
+		Set<String> s = setBuilder(String.class)
+			.addIf(description != null, "description")
+			.addIf(examples != null, "examples")
+			.addIf(headers != null, "headers")
+			.addIf(schema != null, "schema")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
index 520a183..9be7faa 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ConverterUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
+import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
@@ -193,7 +193,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<SchemaInfo> additionalProperties() {
-		return Optional.ofNullable(getAdditionalProperties());
+		return optional(getAdditionalProperties());
 	}
 
 	/**
@@ -265,7 +265,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<Object>> allOf() {
-		return Optional.ofNullable(getAllOf());
+		return optional(getAllOf());
 	}
 
 	/**
@@ -333,7 +333,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Object> _default() {
-		return Optional.ofNullable(getDefault());
+		return optional(getDefault());
 	}
 
 	/**
@@ -381,7 +381,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -427,7 +427,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> discriminator() {
-		return Optional.ofNullable(getDiscriminator());
+		return optional(getDiscriminator());
 	}
 
 	/**
@@ -486,7 +486,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<Object>> _enum() {
-		return Optional.ofNullable(getEnum());
+		return optional(getEnum());
 	}
 
 	/**
@@ -544,7 +544,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Object> example() {
-		return Optional.ofNullable(getExample());
+		return optional(getExample());
 	}
 
 	/**
@@ -590,7 +590,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> exclusiveMaximum() {
-		return Optional.ofNullable(getExclusiveMaximum());
+		return optional(getExclusiveMaximum());
 	}
 
 	/**
@@ -649,7 +649,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> exclusiveMinimum() {
-		return Optional.ofNullable(getExclusiveMinimum());
+		return optional(getExclusiveMinimum());
 	}
 
 	/**
@@ -708,7 +708,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<ExternalDocumentation> externalDocs() {
-		return Optional.ofNullable(getExternalDocs());
+		return optional(getExternalDocs());
 	}
 
 	/**
@@ -784,7 +784,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> format() {
-		return Optional.ofNullable(getFormat());
+		return optional(getFormat());
 	}
 
 	/**
@@ -842,7 +842,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Items> items() {
-		return Optional.ofNullable(getItems());
+		return optional(getItems());
 	}
 
 	/**
@@ -906,7 +906,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> maximum() {
-		return Optional.ofNullable(getMaximum());
+		return optional(getMaximum());
 	}
 
 	/**
@@ -965,7 +965,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxItems() {
-		return Optional.ofNullable(getMaxItems());
+		return optional(getMaxItems());
 	}
 
 	/**
@@ -1024,7 +1024,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxLength() {
-		return Optional.ofNullable(getMaxLength());
+		return optional(getMaxLength());
 	}
 
 	/**
@@ -1083,7 +1083,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> maxProperties() {
-		return Optional.ofNullable(getMaxProperties());
+		return optional(getMaxProperties());
 	}
 
 	/**
@@ -1142,7 +1142,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> minimum() {
-		return Optional.ofNullable(getMinimum());
+		return optional(getMinimum());
 	}
 
 	/**
@@ -1201,7 +1201,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minItems() {
-		return Optional.ofNullable(getMinItems());
+		return optional(getMinItems());
 	}
 
 	/**
@@ -1260,7 +1260,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minLength() {
-		return Optional.ofNullable(getMinLength());
+		return optional(getMinLength());
 	}
 
 	/**
@@ -1319,7 +1319,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Integer> minProperties() {
-		return Optional.ofNullable(getMinProperties());
+		return optional(getMinProperties());
 	}
 
 	/**
@@ -1378,7 +1378,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Number> multipleOf() {
-		return Optional.ofNullable(getMultipleOf());
+		return optional(getMultipleOf());
 	}
 
 	/**
@@ -1438,7 +1438,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> pattern() {
-		return Optional.ofNullable(getPattern());
+		return optional(getPattern());
 	}
 
 	/**
@@ -1497,7 +1497,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,SchemaInfo>> properties() {
-		return Optional.ofNullable(getProperties());
+		return optional(getProperties());
 	}
 
 	/**
@@ -1554,7 +1554,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> readOnly() {
-		return Optional.ofNullable(getReadOnly());
+		return optional(getReadOnly());
 	}
 
 	/**
@@ -1615,7 +1615,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> ref() {
-		return Optional.ofNullable(getRef());
+		return optional(getRef());
 	}
 
 	/**
@@ -1661,7 +1661,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> required() {
-		return Optional.ofNullable(getRequired());
+		return optional(getRequired());
 	}
 
 	/**
@@ -1735,7 +1735,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<String>> requiredProperties() {
-		return Optional.ofNullable(getRequiredProperties());
+		return optional(getRequiredProperties());
 	}
 
 	/**
@@ -1792,7 +1792,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> title() {
-		return Optional.ofNullable(getTitle());
+		return optional(getTitle());
 	}
 
 	/**
@@ -1848,7 +1848,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> type() {
-		return Optional.ofNullable(getType());
+		return optional(getType());
 	}
 
 	/**
@@ -1904,7 +1904,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> uniqueItems() {
-		return Optional.ofNullable(getUniqueItems());
+		return optional(getUniqueItems());
 	}
 
 	/**
@@ -1963,7 +1963,7 @@ public class SchemaInfo extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Xml> xml() {
-		return Optional.ofNullable(getXml());
+		return optional(getXml());
 	}
 
 	/**
@@ -2082,38 +2082,39 @@ public class SchemaInfo extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(additionalProperties != null, "additionalProperties")
-			.appendIf(allOf != null, "allOf")
-			.appendIf(_default != null, "default")
-			.appendIf(description != null, "description")
-			.appendIf(discriminator != null, "discriminator")
-			.appendIf(_enum != null, "enum")
-			.appendIf(example != null, "example")
-			.appendIf(exclusiveMaximum != null, "exclusiveMaximum")
-			.appendIf(exclusiveMinimum != null, "exclusiveMinimum")
-			.appendIf(externalDocs != null, "externalDocs")
-			.appendIf(format != null, "format")
-			.appendIf(items != null, "items")
-			.appendIf(maximum != null, "maximum")
-			.appendIf(maxItems != null, "maxItems")
-			.appendIf(maxLength != null, "maxLength")
-			.appendIf(maxProperties != null, "maxProperties")
-			.appendIf(minimum != null, "minimum")
-			.appendIf(minItems != null, "minItems")
-			.appendIf(minLength != null, "minLength")
-			.appendIf(minProperties != null, "minProperties")
-			.appendIf(multipleOf != null, "multipleOf")
-			.appendIf(pattern != null, "pattern")
-			.appendIf(properties != null, "properties")
-			.appendIf(readOnly != null, "readOnly")
-			.appendIf(ref != null, "$ref")
-			.appendIf(required != null, "required")
-			.appendIf(requiredProperties != null, "requiredProperties")
-			.appendIf(title != null, "title")
-			.appendIf(type != null, "type")
-			.appendIf(uniqueItems != null, "uniqueItems")
-			.appendIf(xml != null, "xml");
+		Set<String> s = setBuilder(String.class)
+			.addIf(additionalProperties != null, "additionalProperties")
+			.addIf(allOf != null, "allOf")
+			.addIf(_default != null, "default")
+			.addIf(description != null, "description")
+			.addIf(discriminator != null, "discriminator")
+			.addIf(_enum != null, "enum")
+			.addIf(example != null, "example")
+			.addIf(exclusiveMaximum != null, "exclusiveMaximum")
+			.addIf(exclusiveMinimum != null, "exclusiveMinimum")
+			.addIf(externalDocs != null, "externalDocs")
+			.addIf(format != null, "format")
+			.addIf(items != null, "items")
+			.addIf(maximum != null, "maximum")
+			.addIf(maxItems != null, "maxItems")
+			.addIf(maxLength != null, "maxLength")
+			.addIf(maxProperties != null, "maxProperties")
+			.addIf(minimum != null, "minimum")
+			.addIf(minItems != null, "minItems")
+			.addIf(minLength != null, "minLength")
+			.addIf(minProperties != null, "minProperties")
+			.addIf(multipleOf != null, "multipleOf")
+			.addIf(pattern != null, "pattern")
+			.addIf(properties != null, "properties")
+			.addIf(readOnly != null, "readOnly")
+			.addIf(ref != null, "$ref")
+			.addIf(required != null, "required")
+			.addIf(requiredProperties != null, "requiredProperties")
+			.addIf(title != null, "title")
+			.addIf(type != null, "type")
+			.addIf(uniqueItems != null, "uniqueItems")
+			.addIf(xml != null, "xml")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
index bdc2f09..bd4901f 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
@@ -12,10 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.ArrayUtils.*;
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.ArrayUtils.contains;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.util.*;
@@ -155,7 +155,7 @@ public class SecurityScheme extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> authorizationUrl() {
-		return Optional.ofNullable(getAuthorizationUrl());
+		return optional(getAuthorizationUrl());
 	}
 
 	/**
@@ -214,7 +214,7 @@ public class SecurityScheme extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -279,7 +279,7 @@ public class SecurityScheme extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> flow() {
-		return Optional.ofNullable(getFlow());
+		return optional(getFlow());
 	}
 
 	/**
@@ -349,7 +349,7 @@ public class SecurityScheme extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> in() {
-		return Optional.ofNullable(getIn());
+		return optional(getIn());
 	}
 
 	/**
@@ -412,7 +412,7 @@ public class SecurityScheme extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> name() {
-		return Optional.ofNullable(getName());
+		return optional(getName());
 	}
 
 	/**
@@ -486,7 +486,7 @@ public class SecurityScheme extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,String>> scopes() {
-		return Optional.ofNullable(getScopes());
+		return optional(getScopes());
 	}
 
 	/**
@@ -559,7 +559,7 @@ public class SecurityScheme extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> tokenUrl() {
-		return Optional.ofNullable(getTokenUrl());
+		return optional(getTokenUrl());
 	}
 
 	/**
@@ -629,7 +629,7 @@ public class SecurityScheme extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> type() {
-		return Optional.ofNullable(getType());
+		return optional(getType());
 	}
 
 	/**
@@ -694,15 +694,16 @@ public class SecurityScheme extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(authorizationUrl != null, "authorizationUrl")
-			.appendIf(description != null, "description")
-			.appendIf(flow != null, "flow")
-			.appendIf(in != null, "in")
-			.appendIf(name != null, "name")
-			.appendIf(scopes != null, "scopes")
-			.appendIf(tokenUrl != null, "tokenUrl")
-			.appendIf(type != null, "type");
+		Set<String> s = setBuilder(String.class)
+			.addIf(authorizationUrl != null, "authorizationUrl")
+			.addIf(description != null, "description")
+			.addIf(flow != null, "flow")
+			.addIf(in != null, "in")
+			.addIf(name != null, "name")
+			.addIf(scopes != null, "scopes")
+			.addIf(tokenUrl != null, "tokenUrl")
+			.addIf(type != null, "type")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
index 8b98865..711b4ae 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
@@ -12,10 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.util.*;
@@ -206,7 +206,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> basePath() {
-		return Optional.ofNullable(getBasePath());
+		return optional(getBasePath());
 	}
 
 	/**
@@ -285,7 +285,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<MediaType>> consumes() {
-		return Optional.ofNullable(getConsumes());
+		return optional(getConsumes());
 	}
 
 	/**
@@ -404,7 +404,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,OMap>> definitions() {
-		return Optional.ofNullable(getDefinitions());
+		return optional(getDefinitions());
 	}
 
 	/**
@@ -476,7 +476,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<ExternalDocumentation> externalDocs() {
-		return Optional.ofNullable(getExternalDocs());
+		return optional(getExternalDocs());
 	}
 
 	/**
@@ -557,7 +557,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> host() {
-		return Optional.ofNullable(getHost());
+		return optional(getHost());
 	}
 
 	/**
@@ -619,7 +619,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Info> info() {
-		return Optional.ofNullable(getInfo());
+		return optional(getInfo());
 	}
 
 	/**
@@ -726,7 +726,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,ParameterInfo>> parameters() {
-		return Optional.ofNullable(getParameters());
+		return optional(getParameters());
 	}
 
 	/**
@@ -837,7 +837,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,OperationMap>> paths() {
-		return Optional.ofNullable(getPaths());
+		return optional(getPaths());
 	}
 
 	/**
@@ -927,7 +927,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<MediaType>> produces() {
-		return Optional.ofNullable(getProduces());
+		return optional(getProduces());
 	}
 
 	/**
@@ -1046,7 +1046,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,ResponseInfo>> responses() {
-		return Optional.ofNullable(getResponses());
+		return optional(getResponses());
 	}
 
 	/**
@@ -1148,7 +1148,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<String>> schemes() {
-		return Optional.ofNullable(getSchemes());
+		return optional(getSchemes());
 	}
 
 	/**
@@ -1254,7 +1254,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<List<Map<String,List<String>>>> security() {
-		return Optional.ofNullable(getSecurity());
+		return optional(getSecurity());
 	}
 
 	/**
@@ -1358,7 +1358,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Map<String,SecurityScheme>> securityDefinitions() {
-		return Optional.ofNullable(getSecurityDefinitions());
+		return optional(getSecurityDefinitions());
 	}
 
 	/**
@@ -1430,7 +1430,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> swagger() {
-		return Optional.ofNullable(getSwagger());
+		return optional(getSwagger());
 	}
 
 	/**
@@ -1512,7 +1512,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Set<Tag>> tags() {
-		return Optional.ofNullable(getTags());
+		return optional(getTags());
 	}
 
 	/**
@@ -1567,7 +1567,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The operation map for the specified path as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<OperationMap> path(String path) {
-		return Optional.ofNullable(getPath(path));
+		return optional(getPath(path));
 	}
 
 	/**
@@ -1592,7 +1592,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The operation for the specified path and operation id as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Operation> operation(String path, String operation) {
-		return Optional.ofNullable(getOperation(path, operation));
+		return optional(getOperation(path, operation));
 	}
 
 	/**
@@ -1634,7 +1634,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The operation for the specified path and operation id as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<ResponseInfo> responseInfo(String path, String operation, String status) {
-		return Optional.ofNullable(getResponseInfo(path, operation, status));
+		return optional(getResponseInfo(path, operation, status));
 	}
 
 	/**
@@ -1667,7 +1667,7 @@ public class Swagger extends SwaggerElement {
 	 * @return The parameter information as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<ParameterInfo> parameterInfo(String path, String method, String in, String name) {
-		return Optional.of(getParameterInfo(path, method, in, name));
+		return optional(getParameterInfo(path, method, in, name));
 	}
 
 
@@ -1724,22 +1724,23 @@ public class Swagger extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(basePath != null, "basePath")
-			.appendIf(consumes != null, "consumes")
-			.appendIf(definitions != null, "definitions")
-			.appendIf(externalDocs != null, "externalDocs")
-			.appendIf(host != null, "host")
-			.appendIf(info != null, "info")
-			.appendIf(parameters != null, "parameters")
-			.appendIf(paths != null, "paths")
-			.appendIf(produces != null, "produces")
-			.appendIf(responses != null, "responses")
-			.appendIf(schemes != null, "schemes")
-			.appendIf(security != null, "security")
-			.appendIf(securityDefinitions != null, "securityDefinitions")
-			.appendIf(swagger != null, "swagger")
-			.appendIf(tags != null, "tags");
+		Set<String> s = setBuilder(String.class)
+			.addIf(basePath != null, "basePath")
+			.addIf(consumes != null, "consumes")
+			.addIf(definitions != null, "definitions")
+			.addIf(externalDocs != null, "externalDocs")
+			.addIf(host != null, "host")
+			.addIf(info != null, "info")
+			.addIf(parameters != null, "parameters")
+			.addIf(paths != null, "paths")
+			.addIf(produces != null, "produces")
+			.addIf(responses != null, "responses")
+			.addIf(schemes != null, "schemes")
+			.addIf(security != null, "security")
+			.addIf(securityDefinitions != null, "securityDefinitions")
+			.addIf(swagger != null, "swagger")
+			.addIf(tags != null, "tags")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
index 44ffbc8..c7e1be9 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
@@ -12,13 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
 
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.internal.ASet;
 import org.apache.juneau.json.*;
 
 /**
@@ -153,8 +153,9 @@ public abstract class SwaggerElement {
 	 * 	<br>Never <jk>null</jk>.
 	 */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(strict, "strict");
+		Set<String> s = setBuilder(String.class)
+			.addIf(strict, "strict")
+			.build();
 		s.addAll(extraKeys());
 		return s;
 	}
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Tag.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Tag.java
index 7924ac7..3db993c 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Tag.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Tag.java
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
@@ -124,7 +125,7 @@ public class Tag extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> description() {
-		return Optional.ofNullable(getDescription());
+		return optional(getDescription());
 	}
 
 	/**
@@ -182,7 +183,7 @@ public class Tag extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<ExternalDocumentation> externalDocs() {
-		return Optional.ofNullable(getExternalDocs());
+		return optional(getExternalDocs());
 	}
 
 	/**
@@ -261,7 +262,7 @@ public class Tag extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> name() {
-		return Optional.ofNullable(getName());
+		return optional(getName());
 	}
 
 	/**
@@ -309,10 +310,11 @@ public class Tag extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(description != null, "description")
-			.appendIf(externalDocs != null, "externalDocs")
-			.appendIf(name != null, "name");
+		Set<String> s = setBuilder(String.class)
+			.addIf(description != null, "description")
+			.addIf(externalDocs != null, "externalDocs")
+			.addIf(name != null, "name")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Xml.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Xml.java
index a3d040e..79cbb72 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Xml.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Xml.java
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger;
 
-import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
@@ -133,7 +134,7 @@ public class Xml extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> attribute() {
-		return Optional.ofNullable(getAttribute());
+		return optional(getAttribute());
 	}
 
 	/**
@@ -209,7 +210,7 @@ public class Xml extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> name() {
-		return Optional.ofNullable(getName());
+		return optional(getName());
 	}
 
 	/**
@@ -267,7 +268,7 @@ public class Xml extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> namespace() {
-		return Optional.ofNullable(getNamespace());
+		return optional(getNamespace());
 	}
 
 	/**
@@ -325,7 +326,7 @@ public class Xml extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<String> prefix() {
-		return Optional.ofNullable(getPrefix());
+		return optional(getPrefix());
 	}
 
 	/**
@@ -396,7 +397,7 @@ public class Xml extends SwaggerElement {
 	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
 	 */
 	public Optional<Boolean> wrapped() {
-		return Optional.ofNullable(getWrapped());
+		return optional(getWrapped());
 	}
 
 	/**
@@ -473,12 +474,13 @@ public class Xml extends SwaggerElement {
 
 	@Override /* SwaggerElement */
 	public Set<String> keySet() {
-		ASet<String> s = ASet.<String>of()
-			.appendIf(attribute != null, "attribute")
-			.appendIf(name != null, "name")
-			.appendIf(namespace != null, "namespace")
-			.appendIf(prefix != null, "prefix")
-			.appendIf(wrapped != null, "wrapped");
+		Set<String> s = setBuilder(String.class)
+			.addIf(attribute != null, "attribute")
+			.addIf(name != null, "name")
+			.addIf(namespace != null, "namespace")
+			.addIf(prefix != null, "prefix")
+			.addIf(wrapped != null, "wrapped")
+			.build();
 		return new MultiSet<>(s, super.keySet());
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
index 5442268..7726d43 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.dto.swagger.ui;
 
-import static org.apache.juneau.dto.html5.HtmlBuilder.*;
 import static java.util.Collections.*;
+import static org.apache.juneau.dto.html5.HtmlBuilder.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 import java.util.Map;
@@ -44,7 +45,7 @@ public class SwaggerUI extends ObjectSwap<Swagger,Div> {
 		.caching(Boolean.getBoolean("RestContext.disableClasspathResourceCaching.b") ? -1 : 1_000_000)
 		.build();
 
-	private static final Set<String> STANDARD_METHODS = ASet.of("get", "put", "post", "delete", "options");
+	private static final Set<String> STANDARD_METHODS = set("get", "put", "post", "delete", "options");
 
 	/**
 	 * This UI applies to HTML requests only.
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 f2b532a..e39b344 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
@@ -12,23 +12,21 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
-import static org.apache.juneau.collections.OMap.filteredMap;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.nio.charset.Charset;
+import static org.apache.juneau.collections.OMap.*;
+
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import java.nio.charset.*;
 import java.util.*;
 import java.util.concurrent.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.http.header.MediaType;
-import org.apache.juneau.internal.Cache;
-import org.apache.juneau.internal.FluentSetter;
-import org.apache.juneau.internal.FluentSetters;
-import org.apache.juneau.jena.annotation.Rdf;
+import org.apache.juneau.http.header.*;
+import org.apache.juneau.internal.*;
+import org.apache.juneau.jena.annotation.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.utils.HashKey;
-import org.apache.juneau.utils.ThrowingFunction;
+import org.apache.juneau.utils.*;
 import org.apache.juneau.xml.*;
 
 /**
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
index 6c4e7d9..ca79314 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
@@ -12,22 +12,23 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.jena.Constants.*;
 
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.nio.charset.Charset;
+import java.io.*;
+import java.lang.reflect.*;
+import java.nio.charset.*;
 import java.util.*;
-import java.util.function.Consumer;
+import java.util.function.*;
 
 import org.apache.jena.rdf.model.*;
 import org.apache.jena.util.iterator.*;
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.http.header.MediaType;
-import org.apache.juneau.httppart.HttpPartSchema;
-import org.apache.juneau.internal.FluentSetters;
+import org.apache.juneau.http.header.*;
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.*;
@@ -260,7 +261,7 @@ public class RdfParserSession extends ReaderParserSession {
 		}
 
 		if (roots.isEmpty())
-			return type.isOptional() ? (T)Optional.empty() : null;
+			return type.isOptional() ? (T)empty() : null;
 
 		if (roots.size() > 1)
 			throw new ParseException(this, "Too many root nodes found in model:  {0}", roots.size());
@@ -394,7 +395,7 @@ public class RdfParserSession extends ReaderParserSession {
 			sType = eType;
 
 		if (sType.isOptional())
-			return (T)Optional.ofNullable(parseAnything(eType.getElementType(), n, outer, pMeta));
+			return (T)optional(parseAnything(eType.getElementType(), n, outer, pMeta));
 
 		setCurrentClass(sType);
 
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 de26208..8d7111d 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
@@ -12,25 +12,22 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
-import static java.util.Optional.*;
-import static org.apache.juneau.collections.OMap.filteredMap;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.nio.charset.Charset;
+import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import java.nio.charset.*;
 import java.util.*;
 import java.util.concurrent.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.http.header.MediaType;
-import org.apache.juneau.internal.AList;
-import org.apache.juneau.internal.Cache;
-import org.apache.juneau.internal.FluentSetter;
-import org.apache.juneau.internal.FluentSetters;
+import org.apache.juneau.http.header.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.jena.annotation.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.utils.HashKey;
-import org.apache.juneau.utils.ThrowingFunction;
+import org.apache.juneau.utils.*;
 import org.apache.juneau.xml.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -132,7 +129,7 @@ public class RdfSerializer extends WriterSerializer implements RdfMetaProvider {
 			collectionFormat = copyFrom.collectionFormat;
 			juneauNs = copyFrom.juneauNs;
 			juneauBpNs = copyFrom.juneauBpNs;
-			namespaces = copyFrom.namespaces.length == 0 ? null : AList.of(copyFrom.namespaces);
+			namespaces = copyFrom.namespaces.length == 0 ? null : list(copyFrom.namespaces);
 			jenaSettings = new TreeMap<>(copyFrom.jenaSettings);
 		}
 
@@ -1883,7 +1880,7 @@ public class RdfSerializer extends WriterSerializer implements RdfMetaProvider {
 		juneauNs = builder.juneauNs;
 		juneauBpNs = builder.juneauBpNs;
 		collectionFormat = builder.collectionFormat;
-		namespaces = ofNullable(builder.namespaces).map(x -> x.toArray(new Namespace[0])).orElse(new Namespace[0]);
+		namespaces = optional(builder.namespaces).map(x -> x.toArray(new Namespace[0])).orElse(new Namespace[0]);
 		addBeanTypesRdf = builder.addBeanTypesRdf;
 		jenaSettings = new TreeMap<>(builder.jenaSettings);
 
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
index 0ee5979..b9ccbd8 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
@@ -12,24 +12,25 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
-import static org.apache.juneau.jena.Constants.*;
-import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
+import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.jena.Constants.*;
 
 import java.io.*;
-import java.lang.reflect.Method;
-import java.nio.charset.Charset;
+import java.lang.reflect.*;
+import java.nio.charset.*;
 import java.util.*;
-import java.util.function.Consumer;
+import java.util.function.*;
 
 import org.apache.jena.rdf.model.*;
 import org.apache.juneau.*;
-import org.apache.juneau.http.header.MediaType;
-import org.apache.juneau.httppart.HttpPartSchema;
+import org.apache.juneau.http.header.*;
+import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.jena.annotation.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.svl.VarResolverSession;
+import org.apache.juneau.svl.*;
 import org.apache.juneau.swap.*;
 import org.apache.juneau.xml.*;
 import org.apache.juneau.xml.annotation.*;
@@ -52,7 +53,9 @@ public final class RdfSerializerSession extends WriterSerializerSession {
 	/**
 	 * Maps RDF writer names to property prefixes that apply to them.
 	 */
-	static final Map<String,String> LANG_PROP_MAP = AMap.of("RDF/XML","rdfXml.","RDF/XML-ABBREV","rdfXml.","N3","n3.","N3-PP","n3.","N3-PLAIN","n3.","N3-TRIPLES","n3.","TURTLE","n3.","N-TRIPLE","ntriple.");
+	static final Map<String,String> LANG_PROP_MAP = mapBuilder(String.class,String.class)
+		.add("RDF/XML","rdfXml.").add("RDF/XML-ABBREV","rdfXml.").add("N3","n3.").add("N3-PP","n3.").add("N3-PLAIN","n3.").add("N3-TRIPLES","n3.").add("TURTLE","n3.").add("N-TRIPLE","ntriple.")
+		.build();
 
 	//-----------------------------------------------------------------------------------------------------------------
 	// Static
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfConfigAnnotation.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfConfigAnnotation.java
index 1022289..39eb62d 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfConfigAnnotation.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/annotation/RdfConfigAnnotation.java
@@ -13,12 +13,10 @@
 package org.apache.juneau.jena.annotation;
 
 import org.apache.juneau.*;
-import org.apache.juneau.jena.RdfCollectionFormat;
-import org.apache.juneau.jena.RdfParser;
-import org.apache.juneau.jena.RdfSerializer;
+import org.apache.juneau.jena.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.xml.Namespace;
+import org.apache.juneau.xml.*;
 
 /**
  * Utility classes and methods for the {@link RdfConfig @RdfConfig} annotation.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
index 8c7f3a1..6fedfd7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
@@ -13,7 +13,7 @@
 package org.apache.juneau;
 
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.lang.annotation.*;
 import java.nio.charset.*;
@@ -146,7 +146,7 @@ public abstract class AnnotationApplier<A extends Annotation, B> {
 	 */
 	protected Optional<String> string(String in) {
 		in = vr.resolve(in);
-		return isEmpty(in) ? Optional.empty() : Optional.of(in);
+		return optional(isEmpty(in) ? null : in);
 	}
 
 	/**
@@ -156,7 +156,7 @@ public abstract class AnnotationApplier<A extends Annotation, B> {
 	 * @return An optional containing the specified value.
 	 */
 	protected <T> Optional<Class<T>> type(Class<T> in) {
-		return in.getSimpleName().equals("Null") ? Optional.empty() : Optional.of(in);
+		return optional(in.getSimpleName().equals("Null") ? null : in);
 	}
 
 	/**
@@ -169,7 +169,7 @@ public abstract class AnnotationApplier<A extends Annotation, B> {
 	 * @return The array wrapped in an {@link Optional}.
 	 */
 	protected Optional<String[]> strings(String[] in) {
-		return ofNullable(in.length == 0 ? null : Arrays.stream(in).map(x -> vr.resolve(x)).filter(x -> isNotEmpty(x)).toArray(String[]::new));
+		return optional(in.length == 0 ? null : Arrays.stream(in).map(x -> vr.resolve(x)).filter(x -> isNotEmpty(x)).toArray(String[]::new));
 	}
 
 	/**
@@ -254,7 +254,7 @@ public abstract class AnnotationApplier<A extends Annotation, B> {
 	 * @return The array wrapped in an {@link Optional}.
 	 */
 	protected Optional<Class<?>[]> classes(Class<?>[] in) {
-		return Optional.ofNullable(in.length == 0 ? null : in);
+		return optional(in.length == 0 ? null : in);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
index b2030c5..f82812b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanBuilder.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 
@@ -128,7 +128,7 @@ public class BeanBuilder<T> {
 	 * @return The implementation type specified via {@link #type(Class)}.
 	 */
 	protected Optional<Class<? extends T>> type() {
-		return ofNullable(type);
+		return optional(type);
 	}
 
 	/**
@@ -153,7 +153,7 @@ public class BeanBuilder<T> {
 	 * @return The override bean specified via {@link #impl(Object)}.
 	 */
 	protected Optional<T> impl() {
-		return ofNullable(impl);
+		return optional(impl);
 	}
 
 	/**
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 cc83c07..cbf5d70 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
@@ -17,7 +17,6 @@ import static org.apache.juneau.collections.OMap.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 import static java.util.Arrays.*;
 
 import java.beans.*;
@@ -3555,14 +3554,14 @@ public class BeanContext extends Context {
 		useJavaBeanIntrospector = builder.useJavaBeanIntrospector;
 		sortProperties = builder.sortProperties;
 		findFluentSetters = builder.findFluentSetters;
-		typePropertyName = ofNullable(builder.typePropertyName).orElse("_type");
-		locale = ofNullable(builder.locale).orElseGet(()->Locale.getDefault());
+		typePropertyName = optional(builder.typePropertyName).orElse("_type");
+		locale = optional(builder.locale).orElseGet(()->Locale.getDefault());
 		timeZone = builder.timeZone;
 		mediaType = builder.mediaType;
-		beanDictionary = ofNullable(builder.beanDictionary).map(Collections::unmodifiableList).orElse(emptyList());
-		swaps = ofNullable(builder.swaps).map(Collections::unmodifiableList).orElse(emptyList());
-		notBeanClasses = ofNullable(builder.notBeanClasses).map(ArrayList::new).map(Collections::unmodifiableList).orElse(emptyList());
-		notBeanPackages = ofNullable(builder.notBeanPackages).map(ArrayList::new).map(Collections::unmodifiableList).orElse(emptyList());
+		beanDictionary = optional(builder.beanDictionary).map(Collections::unmodifiableList).orElse(emptyList());
+		swaps = optional(builder.swaps).map(Collections::unmodifiableList).orElse(emptyList());
+		notBeanClasses = optional(builder.notBeanClasses).map(ArrayList::new).map(Collections::unmodifiableList).orElse(emptyList());
+		notBeanPackages = optional(builder.notBeanPackages).map(ArrayList::new).map(Collections::unmodifiableList).orElse(emptyList());
 		propertyNamer = builder.propertyNamer != null ? builder.propertyNamer : BasicPropertyNamer.class;
 
 		notBeanClassesArray = notBeanClasses.isEmpty() ? DEFAULT_NOTBEAN_CLASSES : Stream.of(notBeanClasses, asList(DEFAULT_NOTBEAN_CLASSES)).flatMap(Collection::stream).toArray(Class[]::new);
@@ -3578,7 +3577,7 @@ public class BeanContext extends Context {
 		}
 
 		LinkedList<ObjectSwap<?,?>> _swaps = new LinkedList<>();
-		for (Object o : ofNullable(swaps).orElse(emptyList())) {
+		for (Object o : optional(swaps).orElse(emptyList())) {
 			if (o instanceof ObjectSwap) {
 				_swaps.add((ObjectSwap<?,?>)o);
 			} else {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextable.java
index d207f03..5c9330a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextable.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static java.util.Optional.*;
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.beans.*;
 import java.io.*;
@@ -2990,7 +2990,7 @@ public abstract class BeanContextable extends Context {
 	 */
 	protected BeanContextable(Builder b) {
 		super(b);
-		beanContext = ofNullable(b.bc).orElse(b.bcBuilder.build());
+		beanContext = optional(b.bc).orElseGet(()->b.bcBuilder.build());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
index 7c746db..94d0da8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
@@ -15,11 +15,11 @@ package org.apache.juneau;
 import java.beans.*;
 import java.util.*;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.cp.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.swap.*;
 
 /**
@@ -64,11 +64,11 @@ public final class BeanFilter {
 
 		Class<?> beanClass;
 		String typeName, example;
-		ASet<String>
-			properties = ASet.of(),
-			excludeProperties = ASet.of(),
-			readOnlyProperties = ASet.of(),
-			writeOnlyProperties = ASet.of();
+		Set<String>
+			properties = set(),
+			excludeProperties = set(),
+			readOnlyProperties = set(),
+			writeOnlyProperties = set();
 		Class<?> implClass, interfaceClass, stopClass;
 		boolean sortProperties, fluentSetters;
 		BeanCreator<PropertyNamer> propertyNamer = BeanCreator.of(PropertyNamer.class);
@@ -477,10 +477,9 @@ public final class BeanFilter {
 		 * @return This object.
 		 */
 		public Builder properties(String...value) {
-			this.properties = ASet.of();
+			this.properties = set();
 			for (String v : value)
-				if (!v.isEmpty())
-					properties.a(split(v));
+				split(v, x -> properties.add(x));
 			return this;
 		}
 
@@ -522,10 +521,9 @@ public final class BeanFilter {
 		 * @return This object.
 		 */
 		public Builder excludeProperties(String...value) {
-			this.excludeProperties = ASet.of();
+			this.excludeProperties = set();
 			for (String v : value)
-				if (! v.isEmpty())
-					excludeProperties.a(split(v));
+				split(v, x -> excludeProperties.add(x));
 			return this;
 		}
 
@@ -569,10 +567,9 @@ public final class BeanFilter {
 		 * @return This object.
 		 */
 		public Builder readOnlyProperties(String...value) {
-			this.readOnlyProperties = ASet.of();
+			this.readOnlyProperties = set();
 			for (String v : value)
-				if (! v.isEmpty())
-					readOnlyProperties.a(split(v));
+				split(v, x -> readOnlyProperties.add(x));
 			return this;
 		}
 
@@ -616,10 +613,9 @@ public final class BeanFilter {
 		 * @return This object.
 		 */
 		public Builder writeOnlyProperties(String...value) {
-			this.writeOnlyProperties = ASet.of();
+			this.writeOnlyProperties = set();
 			for (String v : value)
-				if (! v.isEmpty())
-					writeOnlyProperties.a(split(v));
+				split(v, x -> writeOnlyProperties.add(x));
 			return this;
 		}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index ef432a2..a47e74e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -23,7 +23,6 @@ import java.io.*;
 import java.lang.reflect.*;
 import java.util.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 
 /**
@@ -121,12 +120,12 @@ public class BeanMeta<T> {
 
 		this.beanFilter = beanFilter;
 		this.dictionaryName = b.dictionaryName;
-		this.properties = AMap.unmodifiable(b.properties);
-		this.hiddenProperties = b.hiddenProperties.unmodifiable();
-		this.getterProps = b.getterProps.unmodifiable();
-		this.setterProps = b.setterProps.unmodifiable();
+		this.properties = unmodifiable(b.properties);
+		this.hiddenProperties = unmodifiable(b.hiddenProperties);
+		this.getterProps = unmodifiable(b.getterProps);
+		this.setterProps = unmodifiable(b.setterProps);
 		this.dynaProperty = b.dynaProperty;
-		this.typeVarImpls = AMap.unmodifiable(b.typeVarImpls);
+		this.typeVarImpls = unmodifiable(b.typeVarImpls);
 		this.constructor = b.constructor;
 		this.constructorArgs = b.constructorArgs;
 		this.beanRegistry = b.beanRegistry;
@@ -142,12 +141,12 @@ public class BeanMeta<T> {
 		BeanFilter beanFilter;
 		String[] pNames;
 		Map<String,BeanPropertyMeta> properties;
-		AMap<String,BeanPropertyMeta> hiddenProperties = AMap.create();
-		AMap<Method,String> getterProps = AMap.create();
-		AMap<Method,String> setterProps = AMap.create();
+		Map<String,BeanPropertyMeta> hiddenProperties = map();
+		Map<Method,String> getterProps = map();
+		Map<Method,String> setterProps = map();
 		BeanPropertyMeta dynaProperty;
 
-		AMap<Class<?>,Class<?>[]> typeVarImpls;
+		Map<Class<?>,Class<?>[]> typeVarImpls;
 		ConstructorInfo constructor, implClassConstructor;
 		String[] constructorArgs = {};
 		PropertyNamer propertyNamer;
@@ -174,9 +173,9 @@ public class BeanMeta<T> {
 					mVis = ctx.getBeanMethodVisibility(),
 					fVis = ctx.getBeanFieldVisibility();
 
-				AList<Class<?>> bdClasses = AList.create();
+				List<Class<?>> bdClasses = list();
 				if (beanFilter != null && beanFilter.getBeanDictionary() != null)
-					bdClasses.a(beanFilter.getBeanDictionary());
+					addAll(bdClasses, beanFilter.getBeanDictionary());
 
 				Value<String> typeName = Value.empty();
 				classMeta.forEachAnnotation(Bean.class, x -> isNotEmpty(x.typeName()), x -> typeName.set(x.typeName()));
@@ -383,7 +382,7 @@ public class BeanMeta<T> {
 					}
 				}
 
-				typeVarImpls = AMap.create();
+				typeVarImpls = map();
 				findTypeVarImpls(c, typeVarImpls);
 				if (typeVarImpls.isEmpty())
 					typeVarImpls = null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index eb74c18..679174a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -169,7 +169,7 @@ public final class BeanPropertyMeta {
 
 		boolean validate(BeanContext bc, BeanRegistry parentBeanRegistry, Map<Class<?>,Class<?>[]> typeVarImpls, Set<String> bpro, Set<String> bpwo) throws Exception {
 
-			AList<Class<?>> bdClasses = AList.create();
+			List<Class<?>> bdClasses = list();
 
 			if (field == null && getter == null && setter == null)
 				return false;
@@ -192,7 +192,7 @@ public final class BeanPropertyMeta {
 				for (Beanp p : lp) {
 					if (! p.properties().isEmpty())
 						properties = split(p.properties());
-					bdClasses.a(p.dictionary());
+					addAll(bdClasses, p.dictionary());
 					if (! p.ro().isEmpty())
 						readOnly = Boolean.valueOf(p.ro());
 					if (! p.wo().isEmpty())
@@ -211,7 +211,7 @@ public final class BeanPropertyMeta {
 				for (Beanp p : lp) {
 					if (properties != null && ! p.properties().isEmpty())
 						properties = split(p.properties());
-					bdClasses.a(p.dictionary());
+					addAll(bdClasses, p.dictionary());
 					if (! p.ro().isEmpty())
 						readOnly = Boolean.valueOf(p.ro());
 					if (! p.wo().isEmpty())
@@ -231,7 +231,7 @@ public final class BeanPropertyMeta {
 						swap = getPropertySwap(p);
 					if (properties != null && ! p.properties().isEmpty())
 						properties = split(p.properties());
-					bdClasses.a(p.dictionary());
+					addAll(bdClasses, p.dictionary());
 					if (! p.ro().isEmpty())
 						readOnly = Boolean.valueOf(p.ro());
 					if (! p.wo().isEmpty())
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index cf38017..23c992c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -15,6 +15,7 @@ package org.apache.juneau;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 
 import java.io.*;
@@ -506,7 +507,7 @@ public class BeanSession extends ContextSession {
 			}
 
 			if (to.isOptional() && (! (value instanceof Optional)))
-				return (T) Optional.ofNullable(convertToMemberType(outer, value, to.getElementType()));
+				return (T) optional(convertToMemberType(outer, value, to.getElementType()));
 
 			Class<T> tc = to.getInnerClass();
 
@@ -1400,7 +1401,7 @@ public class BeanSession extends ContextSession {
 	}
 
 	/**
-	 * Creates either an {@link OMap} or {@link AMap} depending on whether the key type is
+	 * Creates either an {@link OMap} or {@link LinkedHashMap} depending on whether the key type is
 	 * String or something else.
 	 *
 	 * @param mapMeta The metadata of the map to create.
@@ -1408,7 +1409,7 @@ public class BeanSession extends ContextSession {
 	 */
 	protected Map newGenericMap(ClassMeta mapMeta) {
 		ClassMeta<?> k = mapMeta.getKeyType();
-		return (k == null || k.isString()) ? new OMap(this) : new AMap();
+		return (k == null || k.isString()) ? new OMap(this) : map();
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index 0e8a658..e1eec4f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -14,9 +14,9 @@ package org.apache.juneau;
 
 import static org.apache.juneau.ClassMeta.ClassCategory.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
-import static java.util.Optional.*;
 
 import java.io.*;
 import java.lang.annotation.*;
@@ -334,7 +334,7 @@ public final class ClassMeta<T> implements Type {
 			dictionaryName = null;
 		Throwable initException = null;
 		BeanMeta beanMeta = null;
-		AList<ObjectSwap> swaps = AList.create();
+		List<ObjectSwap> swaps = list();
 		BuilderSwap builderSwap;
 		InvocationHandler invocationHandler = null;
 		BeanRegistry beanRegistry = null;
@@ -436,7 +436,7 @@ public final class ClassMeta<T> implements Type {
 			// parse() is used by the java logging Level class.
 			// forName() is used by Class and Charset
 			String[] fromStringMethodNames = {"fromString","fromValue","valueOf","parse","parseString","forName","forString"};
-			fromStringMethod = ofNullable(
+			fromStringMethod = optional(
 				ci.getPublicMethod(
 					x -> x.isStatic()
 					&& x.isNotDeprecated()
@@ -447,7 +447,7 @@ public final class ClassMeta<T> implements Type {
 				.orElse(null);
 
 			// Find example() method if present.
-			exampleMethod = ofNullable(
+			exampleMethod = optional(
 				ci.getPublicMethod(
 					x -> x.isStatic()
 					&& x.isNotDeprecated()
@@ -529,7 +529,7 @@ public final class ClassMeta<T> implements Type {
 			MarshalledFilter marshalledFilter = findMarshalledFilter(bc);
 
 			if (swaps != null)
-				this.swaps.a(swaps);
+				addAll(this.swaps, swaps);
 
 			if (bc != null)
 				this.builderSwap = BuilderSwap.findSwapFromObjectClass(bc, c, bc.getBeanConstructorVisibility(), bc.getBeanMethodVisibility());
@@ -1704,7 +1704,7 @@ public final class ClassMeta<T> implements Type {
 	 */
 	public Optional<?> getOptionalDefault() {
 		if (isOptional())
-			return Optional.ofNullable(getElementType().getOptionalDefault());
+			return optional(getElementType().getOptionalDefault());
 		return null;
 	}
 
@@ -2084,7 +2084,7 @@ public final class ClassMeta<T> implements Type {
 		if (o == null) {
 			if (beanContext == null)
 				return info.getAnnotation(BeanContext.DEFAULT, a);
-			o = Optional.ofNullable(info.getAnnotation(beanContext, a));
+			o = optional(info.getAnnotation(beanContext, a));
 			annotationLastMap.put(a, o);
 		}
 		return o.orElse(null);
@@ -2129,7 +2129,7 @@ public final class ClassMeta<T> implements Type {
 	public <T2> Optional<T2> getProperty(String name, Function<ClassMeta<?>,T2> function) {
 		Optional<T2> t = (Optional<T2>) properties.get(name);
 		if (t == null) {
-			t = Optional.ofNullable(function.apply(this));
+			t = optional(function.apply(this));
 			properties.put(name, t);
 		}
 		return t;
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 7ea0a3d..501b134 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
@@ -16,7 +16,6 @@ import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static java.util.Optional.*;
 import static org.apache.juneau.collections.OMap.*;
 
 import java.lang.annotation.Annotation;
@@ -301,7 +300,7 @@ public abstract class Context implements AnnotationProvider {
 		 * @return The context class if it was specified.
 		 */
 		public Optional<Class<?>> getType() {
-			return Optional.ofNullable(type);
+			return optional(type);
 		}
 
 		/**
@@ -846,7 +845,7 @@ public abstract class Context implements AnnotationProvider {
 	 */
 	protected Context(Builder builder) {
 		debug = builder.debug;
-		annotations = ofNullable(builder.annotations).orElse(emptyList());
+		annotations = optional(builder.annotations).orElseGet(()->emptyList());
 
 		ReflectionMap.Builder<Annotation> rmb = ReflectionMap.create(Annotation.class);
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
index 291f9dc..6efc620 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.lang.reflect.*;
 import java.util.*;
 import java.util.function.*;
@@ -90,7 +92,7 @@ public class Value<T> {
 	 * @return The unwrapped type, or the same type if the type isn't {@link Value}.
 	 */
 	public static Type unwrap(Type t) {
-		return Optional.ofNullable(getParameterType(t)).orElse(t);
+		return optional(getParameterType(t)).orElse(t);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
index c094602..b991596 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
@@ -12,12 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
-import static java.util.Optional.*;
-
 /**
  * Represents a version string such as <js>"1.2"</js> or <js>"1.2.3"</js>
  *
@@ -91,7 +90,7 @@ public class Version implements Comparable<Version> {
 	public Optional<Integer> getPart(int index) {
 		if (index < 0 || parts.length <= index)
 			return empty();
-		return ofNullable(parts[index]);
+		return optional(parts[index]);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
index 9bd23a2..e089234 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.assertions;
 
 import static org.apache.juneau.assertions.Assertions.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static java.util.Arrays.*;
@@ -435,11 +436,11 @@ public class FluentArrayAssertion<E,R> extends FluentObjectAssertion<E[],R> {
 	}
 
 	private List<E> toList() {
-		return valueIsNull() ? null : AList.of(value());
+		return valueIsNull() ? null : list(value());
 	}
 
 	private List<E> toSortedList(Comparator<E> comparator) {
-		return valueIsNull() ? null : AList.of(value()).sortWith(comparator);
+		return valueIsNull() ? null : sortedList(comparator, value());
 	}
 
 	private E at(int index) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
index b2feec3..f83f3f0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
@@ -14,6 +14,7 @@ package org.apache.juneau.assertions;
 
 import static java.util.Arrays.*;
 import static java.util.stream.Collectors.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
@@ -362,6 +363,6 @@ public class FluentListAssertion<E,R> extends FluentCollectionAssertion<E,R> {
 	}
 
 	private List<E> toSortedList(Comparator<E> comparator) {
-		return valueIsNull() ? null : AList.of(value()).sortWith(comparator);
+		return valueIsNull() ? null : sortedList(comparator, value());
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
index 471ff28..3063878 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentMapAssertion.java
@@ -188,7 +188,7 @@ public class FluentMapAssertion<K,V,R> extends FluentObjectAssertion<Map<K,V>,R>
 	public FluentMapAssertion<K,V,R> extract(K...keys) {
 		if (valueIsNull())
 			return new FluentMapAssertion<>(this, null, returns());
-		Map<K,V> m1 = value(), m2 = AMap.create();
+		Map<K,V> m1 = value(), m2 = CollectionUtils.map();
 		if (m1 != null)
 			for (K k : keys)
 				m2.put(k, m1.get(k));
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
index 58e9636..138879b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
@@ -14,6 +14,7 @@ package org.apache.juneau.assertions;
 
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
@@ -602,7 +603,7 @@ public class FluentObjectAssertion<T,R> extends FluentAssertion<R> {
 	 * @return The value wrapped in an {@link Optional}.
 	 */
 	protected Optional<T> opt() {
-		return Optional.ofNullable(value);
+		return optional(value);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/Args.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/Args.java
index 05b40fa..230ac66 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/Args.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/Args.java
@@ -17,8 +17,6 @@ import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
-import org.apache.juneau.internal.*;
-
 /**
  * Utility class to make it easier to work with command-line arguments pass in through a
  * <c>main(String[] args)</c> method.
@@ -156,7 +154,7 @@ public final class Args extends OMap {
 	 * @param args Arguments passed in as a raw command line.
 	 */
 	public Args(String args) {
-		this(StringUtils.splitQuoted(args));
+		this(splitQuoted(args));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicFileFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicFileFinder.java
index 6aa725e..886ac83 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicFileFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicFileFinder.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.cp;
 
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.FileUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
@@ -105,12 +106,12 @@ public class BasicFileFinder implements FileFinder {
 
 	@Override /* FileFinder */
 	public final Optional<String> getString(String name) throws IOException {
-		return Optional.ofNullable(read(find(name, null).orElse(null)));
+		return optional(read(find(name, null).orElse(null)));
 	}
 
 	@Override /* FileFinder */
 	public Optional<String> getString(String name, Locale locale) throws IOException {
-		return Optional.ofNullable(read(find(name, locale).orElse(null)));
+		return optional(read(find(name, locale).orElse(null)));
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
@@ -135,7 +136,7 @@ public class BasicFileFinder implements FileFinder {
 		name = StringUtils.trimSlashesAndSpaces(name);
 
 		if (isInvalidPath(name))
-			return Optional.empty();
+			return empty();
 
 		if (locale != null)
 			localizedFiles.putIfAbsent(locale, new ConcurrentHashMap<>());
@@ -168,10 +169,7 @@ public class BasicFileFinder implements FileFinder {
 			}
 		}
 
-		if (lf == null)
-			return Optional.empty();
-
-		return Optional.of(lf.read());
+		return optional(lf == null ? null : lf.read());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
index 1e4daee..80a5438 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
@@ -13,6 +13,8 @@
 package org.apache.juneau.cp;
 
 import static org.apache.juneau.assertions.Assertions.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 import java.util.function.*;
 
@@ -210,7 +212,7 @@ public class BeanCreateMethodFinder<T> {
 	 */
 	public T run(Consumer<? super T> consumer) throws ExecutableException {
 		T t = run();
-		Optional.ofNullable(t).ifPresent(consumer);
+		optional(t).ifPresent(consumer);
 		return t;
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
index 78036c1..5ecedd1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
@@ -14,7 +14,7 @@ package org.apache.juneau.cp;
 
 import static java.util.stream.Collectors.*;
 import static org.apache.juneau.Visibility.*;
-import static java.util.Optional.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -244,7 +244,7 @@ public class BeanCreator<T> {
 	 * @return A new bean wrapped in an {@link Optional}.
 	 */
 	public Optional<T> execute() {
-		return ofNullable(silent().run());
+		return optional(silent().run());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
index df41354..2e1cfe7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.cp;
 
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static java.util.Optional.*;
 import static java.util.stream.Collectors.*;
 
 import java.lang.annotation.*;
@@ -291,8 +291,8 @@ public class BeanStore {
 	 * @param builder The builder containing the settings for this bean.
 	 */
 	protected BeanStore(Builder builder) {
-		parent = ofNullable(builder.parent);
-		outer = ofNullable(builder.outer);
+		parent = optional(builder.parent);
+		outer = optional(builder.outer);
 		readOnly = builder.readOnly;
 		threadSafe = builder.threadSafe;
 		lock = threadSafe ? new SimpleReadWriteLock() : SimpleReadWriteLock.NO_OP;
@@ -409,7 +409,7 @@ public class BeanStore {
 		try (SimpleLock x = lock.read()) {
 			BeanStoreEntry<T> e = (BeanStoreEntry<T>) unnamedEntries.get(beanType);
 			if (e != null)
-				return ofNullable(e.get());
+				return optional(e.get());
 			if (parent.isPresent())
 				return parent.get().getBean(beanType);
 			return empty();
@@ -428,7 +428,7 @@ public class BeanStore {
 		try (SimpleLock x = lock.read()) {
 			BeanStoreEntry<T> e = (BeanStoreEntry<T>)entries.stream().filter(x2 -> x2.matches(beanType, name)).findFirst().orElse(null);
 			if (e != null)
-				return ofNullable(e.get());
+				return optional(e.get());
 			if (parent.isPresent())
 				return parent.get().getBean(beanType, name);
 			return empty();
@@ -576,7 +576,7 @@ public class BeanStore {
 	 */
 	public String getMissingParams(ExecutableInfo executable) {
 		List<ParamInfo> params = executable.getParams();
-		List<String> l = AList.create();
+		List<String> l = list();
 		loop: for (int i = 0; i < params.size(); i++) {
 			ParamInfo pi = params.get(i);
 			ClassInfo pt = pi.getParameterType();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ContextBeanCreator.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ContextBeanCreator.java
index c680069..beccb81 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ContextBeanCreator.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ContextBeanCreator.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.cp;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -105,7 +105,7 @@ public class ContextBeanCreator<T> {
 	 * @return An optional containing the builder if it exists.
 	 */
 	public <T2 extends Context.Builder> Optional<T2> builder(Class<T2> c) {
-		return ofNullable(c.isInstance(builder) ? c.cast(builder) : null);
+		return optional(c.isInstance(builder) ? c.cast(builder) : null);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultClassList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultClassList.java
index cbdbed7..4bd504e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultClassList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultClassList.java
@@ -14,7 +14,7 @@ package org.apache.juneau.cp;
 
 import static java.util.Arrays.*;
 import static org.apache.juneau.assertions.Assertions.*;
-import static java.util.Optional.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -98,7 +98,7 @@ public class DefaultClassList {
 		assertArgNotNull("type", type);
 		for (Class<?> e : entries)
 			if (e != null && type.isAssignableFrom(e))
-				return Optional.of((Class<? extends T>)e);
+				return optional((Class<? extends T>)e);
 		return empty();
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultSettingsMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultSettingsMap.java
index 8f37f4f..4d03d66 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultSettingsMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultSettingsMap.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.cp;
 
-import static java.util.Optional.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -88,7 +88,7 @@ public class DefaultSettingsMap {
 	 */
 	@SuppressWarnings("unchecked")
 	public <T> Optional<T> get(Class<T> type, String name) {
-		return ofNullable((T)entries.get(name));
+		return optional((T)entries.get(name));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
index 64a9d5c..707a5ae 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.cp;
 
 import static org.apache.juneau.assertions.Assertions.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.io.*;
 import java.nio.file.*;
@@ -136,8 +137,8 @@ public interface FileFinder {
 			super(BasicFileFinder.class, beanStore);
 			roots = new LinkedHashSet<>();
 			cachingLimit = -1;
-			include = AList.of(Pattern.compile(".*"));
-			exclude = AList.create();
+			include = list(Pattern.compile(".*"));
+			exclude = list();
 		}
 
 		@Override /* BeanBuilder */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
index 911a2ba..ffdf693 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
@@ -14,6 +14,7 @@ package org.apache.juneau.encoders;
 
 import static java.util.Arrays.*;
 import static org.apache.juneau.http.HttpHeaders.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static java.util.stream.Collectors.*;
 import static java.util.Collections.*;
@@ -131,7 +132,7 @@ public final class EncoderSet {
 		 */
 		protected Builder(BeanStore beanStore) {
 			super(EncoderSet.class, beanStore);
-			entries = AList.create();
+			entries = list();
 		}
 
 		/**
@@ -141,7 +142,7 @@ public final class EncoderSet {
 		 */
 		protected Builder(Builder copyFrom) {
 			super(copyFrom);
-			entries = AList.of(copyFrom.entries);
+			entries = copyOf(copyFrom.entries);
 		}
 
 		@Override /* BeanBuilder */
@@ -173,7 +174,7 @@ public final class EncoderSet {
 		 * @throws IllegalArgumentException if any class does not extend from {@link Encoder}.
 		 */
 		public Builder add(Class<?>...values) {
-			List<Object> l = AList.create();
+			List<Object> l = list();
 			for (Class<?> v : values)
 				if (v.getSimpleName().equals("NoInherit"))
 					clear();
@@ -203,7 +204,7 @@ public final class EncoderSet {
 		 * @throws IllegalArgumentException if any class does not extend from {@link Encoder}.
 		 */
 		public Builder set(Class<?>...values) {
-			List<Object> l = AList.create();
+			List<Object> l = list();
 			for (Class<?> v : values) {
 				if (v.getSimpleName().equals("Inherit")) {
 					l.addAll(entries);
@@ -319,8 +320,8 @@ public final class EncoderSet {
 	protected EncoderSet(Builder builder) {
 		entries = builder.entries.stream().map(x -> instantiate(builder.beanStore(), x)).toArray(Encoder[]::new);
 
-		List<String> lc = AList.create();
-		List<Encoder> l = AList.create();
+		List<String> lc = list();
+		List<Encoder> l = list();
 		for (Encoder e : entries) {
 			for (String c: e.getCodings()) {
 				lc.add(c);
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 3755d94..8d71f46 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
@@ -12,11 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.html;
 
-import static java.util.Optional.*;
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static java.util.Collections.*;
-
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.nio.charset.*;
@@ -86,6 +84,8 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	// Static
 	//-------------------------------------------------------------------------------------------------------------------
 
+	private static final String[] EMPTY_ARRAY = new String[0];
+
 	/** Default serializer, all default settings. */
 	public static final HtmlDocSerializer DEFAULT = new HtmlDocSerializer(create());
 
@@ -1643,20 +1643,20 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 */
 	public HtmlDocSerializer(Builder builder) {
 		super(builder);
-		style = ofNullable(builder.style).map(x -> toArray(x)).orElse(new String[0]);
-		stylesheet = ofNullable(builder.stylesheet).map(x -> toArray(x)).orElse(new String[0]);
-		script = ofNullable(builder.script).map(x -> toArray(x)).orElse(new String[0]);
-		head = ofNullable(builder.head).map(x -> toArray(x)).orElse(new String[0]);
-		header = ofNullable(builder.header).map(x -> toArray(x)).orElse(new String[0]);
-		nav = ofNullable(builder.nav).map(x -> toArray(x)).orElse(new String[0]);
-		aside = ofNullable(builder.aside).map(x -> toArray(x)).orElse(new String[0]);
-		footer = ofNullable(builder.footer).map(x -> toArray(x)).orElse(new String[0]);
-		navlinks = ofNullable(builder.navlinks).map(x -> toArray(x)).orElse(new String[0]);
+		style = optional(builder.style).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
+		stylesheet = optional(builder.stylesheet).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
+		script = optional(builder.script).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
+		head = optional(builder.head).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
+		header = optional(builder.header).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
+		nav = optional(builder.nav).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
+		aside = optional(builder.aside).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
+		footer = optional(builder.footer).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
+		navlinks = optional(builder.navlinks).map(x -> toArray(x)).orElse(EMPTY_ARRAY);
 		asideFloat = builder.asideFloat;
 		noResultsMessage = builder.noResultsMessage;
 		nowrap = builder.nowrap;
 		template = builder.template;
-		widgets = builder.widgets == null ? emptyList() : new ArrayList<>(builder.widgets);
+		widgets = builder.widgets == null ? emptyList() : copyOf(builder.widgets);
 
 		templateBean = newInstance(template);
 		widgetMap = new HtmlWidgetMap();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index 67cbfef..c511356 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -14,6 +14,7 @@ package org.apache.juneau.html;
 
 import static javax.xml.stream.XMLStreamConstants.*;
 import static org.apache.juneau.html.HtmlTag.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.IOException;
@@ -53,7 +54,7 @@ public final class HtmlParserSession extends XmlParserSession {
 	// Static
 	//-------------------------------------------------------------------------------------------------------------------
 
-	private static final Set<String> whitespaceElements = ASet.of("br","bs","sp","ff");
+	private static final Set<String> whitespaceElements = set("br","bs","sp","ff");
 
 	/**
 	 * Creates a new builder for this object.
@@ -258,7 +259,7 @@ public final class HtmlParserSession extends XmlParserSession {
 			sType = eType;
 
 		if (sType.isOptional())
-			return (T)Optional.ofNullable(parseAnything(eType.getElementType(), r, outer, isRoot, pMeta));
+			return (T)optional(parseAnything(eType.getElementType(), r, outer, isRoot, pMeta));
 
 		setCurrentClass(sType);
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetMap.java
index 78b9236..5985c01 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetMap.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.html;
 
-import org.apache.juneau.internal.*;
+import java.util.*;
 
 /**
  * A collection of {@link HtmlWidget} objects keyed by their names.
@@ -25,7 +25,7 @@ import org.apache.juneau.internal.*;
  *
  * @serial exclude
  */
-public class HtmlWidgetMap extends AMap<String,HtmlWidget> {
+public class HtmlWidgetMap extends LinkedHashMap<String,HtmlWidget> {
 	private static final long serialVersionUID = 1L;
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java
index 3ac8b04..93d1afd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethod.java
@@ -12,12 +12,11 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
 
-import org.apache.juneau.internal.*;
-
 /**
  * Represents valid HTTP 1.1 method name static strings per the RFC 2616 spec.
  *
@@ -65,7 +64,7 @@ public class HttpMethod {
 	/** Represents any HTTP method. */
 	public static final String ANY = "*";
 
-	private static final Set<String> NO_BODY_METHODS = ASet.unmodifiable("GET","HEAD","DELETE","CONNECT","OPTIONS","TRACE");
+	private static final Set<String> NO_BODY_METHODS = unmodifiable(set("GET","HEAD","DELETE","CONNECT","OPTIONS","TRACE"));
 
 	/**
 	 * Returns <jk>true</jk> if specified http method has content.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
index b8b0cab..18b0c3c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.http;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.time.*;
@@ -476,7 +477,7 @@ public class HttpParts {
 			case HEADER: return type.getProperty("HttpPart.header.name", HEADER_NAME_FUNCTION);
 			case PATH: return type.getProperty("HttpPart.path.name", PATH_NAME_FUNCTION);
 			case QUERY: return type.getProperty("HttpPart.query.name", QUERY_NAME_FUNCTION);
-			default: return Optional.empty();
+			default: return empty();
 		}
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicBooleanHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicBooleanHeader.java
index e5288e7..6ca007f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicBooleanHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicBooleanHeader.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -157,9 +157,7 @@ public class BasicBooleanHeader extends BasicHeader {
 	 * @return The header value as a boolean.
 	 */
 	public Optional<Boolean> asBoolean() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
index 6eeb2f2..151825d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static java.util.Collections.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -156,9 +156,9 @@ public class BasicCsvArrayHeader extends BasicHeader {
 	 */
 	public Optional<List<String>> asList() {
 		if (value != null)
-			return ofNullable(value);
+			return optional(value);
 		if (supplier != null)
-			return ofNullable(supplier.get());
+			return optional(supplier.get());
 		return empty();
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
index b5ec84a..a929880 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
@@ -15,9 +15,8 @@ package org.apache.juneau.http.header;
 import static java.time.format.DateTimeFormatter.*;
 import static java.time.temporal.ChronoUnit.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
-
 import java.time.*;
 import java.util.*;
 import java.util.function.*;
@@ -158,9 +157,7 @@ public class BasicDateHeader extends BasicHeader {
 	 * @return This header value as a {@link ZonedDateTime}, or {@link Optional#empty()} if the header could not be parsed.
 	 */
 	public Optional<ZonedDateTime> asZonedDateTime() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagArrayHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagArrayHeader.java
index f4e4c3f..86535b2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagArrayHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagArrayHeader.java
@@ -12,9 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.stream.Collectors.*;
-import static java.util.Optional.*;
 import static java.util.Collections.*;
 
 import java.util.*;
@@ -156,9 +155,7 @@ public class BasicEntityTagArrayHeader extends BasicHeader {
 	 * @return this header value as an array of {@link EntityTag} objects, or {@link Optional#empty()} if the value was <jk>null</jk>..
 	 */
 	public Optional<List<EntityTag>> asEntityTags() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	private static String serialize(List<EntityTag> value) {
@@ -166,6 +163,10 @@ public class BasicEntityTagArrayHeader extends BasicHeader {
 	}
 
 	private List<EntityTag> parse(String value) {
-		return value == null ? null : Arrays.asList(split(value, ',')).stream().map(x -> EntityTag.of(x)).collect(toList());
+		if (value == null)
+			return null;
+		List<EntityTag> list = new ArrayList<>();
+		split(value, x -> list.add(EntityTag.of(x)));
+		return list;
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagHeader.java
index d6245da..2f97106 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagHeader.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -154,9 +154,7 @@ public class BasicEntityTagHeader extends BasicHeader {
 	 * @return This header as an {@link EntityTag}, or {@link Optional#empty()} if the value is <jk>null</jk>.
 	 */
 	public Optional<EntityTag> asEntityTag() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	private static String serialize(EntityTag value) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
index 9a88de6..76d8a51 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
@@ -14,6 +14,7 @@ package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.StringUtils.isEmpty;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import java.io.*;
 import java.util.*;
@@ -202,7 +203,7 @@ public class BasicHeader implements Header, Cloneable, Serializable {
 	 * @return The value of this header as a string, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<String> asString() {
-		return Optional.ofNullable(getValue());
+		return optional(getValue());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicIntegerHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicIntegerHeader.java
index 602b6b8..1bcdd67 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicIntegerHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicIntegerHeader.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -158,9 +158,7 @@ public class BasicIntegerHeader extends BasicHeader {
 	 * @return The header value as an integer, or {@link Optional#empty()} if the value is <jk>null</jk>.
 	 */
 	public Optional<Integer> asInteger() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicLongHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicLongHeader.java
index c759c52..5610918 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicLongHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicLongHeader.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -159,9 +159,7 @@ public class BasicLongHeader extends BasicHeader {
 	 * @return The header value as a long, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<Long> asLong() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicMediaRangeArrayHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicMediaRangeArrayHeader.java
index bbe6578..44bc4b9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicMediaRangeArrayHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicMediaRangeArrayHeader.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -129,9 +129,7 @@ public class BasicMediaRangeArrayHeader extends BasicStringHeader {
 	 * @return This header as a {@link MediaRanges} object, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<MediaRanges> asMediaRanges() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicMediaTypeHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicMediaTypeHeader.java
index e8b9dd6..c30a569 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicMediaTypeHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicMediaTypeHeader.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -139,9 +139,7 @@ public class BasicMediaTypeHeader extends BasicStringHeader {
 	 * @return This header as a {@link MediaType} object, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<MediaType> asMediaType() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringHeader.java
index 1caf095..39cf6bf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringHeader.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -136,7 +136,7 @@ public class BasicStringHeader extends BasicHeader {
 
 	@Override /* BasicHeader */
 	public Optional<String> asString() {
-		return ofNullable(getValue());
+		return optional(getValue());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringRangeArrayHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringRangeArrayHeader.java
index d5cf18b..92252ca 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringRangeArrayHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicStringRangeArrayHeader.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -155,9 +155,7 @@ public class BasicStringRangeArrayHeader extends BasicHeader {
 	 * @return An unmodifiable list of type ranges, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<StringRanges> asRanges() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
index 6a25e7d..c22395c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.net.*;
 import java.util.*;
@@ -154,9 +154,7 @@ public class BasicUriHeader extends BasicHeader {
 	 * @return This header as a {@link URI}, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<URI> asURI() {
-		if (supplier != null)
-			return ofNullable(supplier.get());
-		return ofNullable(value);
+		return optional(supplier == null ? value : supplier.get());
 	}
 
 	private static String serialize(URI value) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/ClientVersion.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/ClientVersion.java
index 87baef5..933fdba 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/ClientVersion.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/ClientVersion.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
-import static java.util.Optional.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
@@ -160,7 +160,7 @@ public class ClientVersion extends BasicStringHeader {
 	 * @return The header value as a {@link Version} object, or {@link Optional#empty()} if the value is <jk>null</jk>.
 	 */
 	public Optional<Version> asVersion() {
-		return ofNullable(value);
+		return optional(value);
 	}
 
 	/**
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 634be42..762cf56 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
@@ -15,6 +15,7 @@ package org.apache.juneau.http.header;
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 
 import java.util.*;
@@ -1132,16 +1133,16 @@ public class HeaderList {
 			for (int i = 0; i < entries.size(); i++) {
 				Header x = entries.get(i);
 				if (eq(x.getName(), name))
-					return Optional.of(x);
+					return optional(x);
 			}
 			if (defaultEntries != null) {
 				for (int i = 0; i < defaultEntries.size(); i++) {
 					Header x = defaultEntries.get(i);
 					if (eq(x.getName(), name))
-						return Optional.of(x);
+						return optional(x);
 				}
 			}
-			return Optional.empty();
+			return empty();
 		}
 
 		/**
@@ -1157,16 +1158,16 @@ public class HeaderList {
 			for (int i = entries.size() - 1; i >= 0; i--) {
 				Header x = entries.get(i);
 				if (eq(x.getName(), name))
-					return Optional.of(x);
+					return optional(x);
 			}
 			if (defaultEntries != null) {
 				for (int i = defaultEntries.size() - 1; i >= 0; i--) {
 					Header x = defaultEntries.get(i);
 					if (eq(x.getName(), name))
-						return Optional.of(x);
+						return optional(x);
 				}
 			}
-			return Optional.empty();
+			return empty();
 		}
 
 		// <FluentSetters>
@@ -1306,10 +1307,10 @@ public class HeaderList {
 		}
 
 		if (first == null)
-			return Optional.empty();
+			return empty();
 
 		if (rest == null)
-			return Optional.of(first);
+			return optional(first);
 
 		CharArrayBuffer sb = new CharArrayBuffer(128);
 		sb.append(first.getValue());
@@ -1318,7 +1319,7 @@ public class HeaderList {
 			sb.append(rest.get(i).getValue());
 		}
 
-		return Optional.of(new BasicHeader(name, sb.toString()));
+		return optional(new BasicHeader(name, sb.toString()));
 	}
 
 	/**
@@ -1365,10 +1366,10 @@ public class HeaderList {
 		}
 
 		if (first == null)
-			return Optional.empty();
+			return empty();
 
 		if (rest == null)
-			return Optional.of(HeaderBeanMeta.of(type).construct(name, first.getValue()));
+			return optional(HeaderBeanMeta.of(type).construct(name, first.getValue()));
 
 		CharArrayBuffer sb = new CharArrayBuffer(128);
 		sb.append(first.getValue());
@@ -1377,7 +1378,7 @@ public class HeaderList {
 			sb.append(rest.get(i).getValue());
 		}
 
-		return Optional.of(HeaderBeanMeta.of(type).construct(name, sb.toString()));
+		return optional(HeaderBeanMeta.of(type).construct(name, sb.toString()));
 	}
 
 	/**
@@ -1412,7 +1413,7 @@ public class HeaderList {
 	 * Header name comparison is case insensitive.
 	 * Headers with null values are ignored.
 	 * Each call creates a new array not backed by this list.
-	 * 
+	 *
 	 * <p>
 	 * As a general rule, it's more efficient to use the other methods with consumers to
 	 * get headers.
@@ -1440,7 +1441,7 @@ public class HeaderList {
 	 * <p>
 	 * As a general rule, it's more efficient to use the other methods with consumers to
 	 * get headers.
-	 * 
+	 *
 	 * @return An array of all the headers in this list, never <jk>null</jk>.
 	 */
 	public Header[] getAll() {
@@ -1469,9 +1470,9 @@ public class HeaderList {
 		for (int i = 0; i < entries.length; i++) {
 			Header x = entries[i];
 			if (eq(x.getName(), name))
-				return Optional.of(x);
+				return optional(x);
 		}
-		return Optional.empty();
+		return empty();
 	}
 
 	/**
@@ -1487,9 +1488,9 @@ public class HeaderList {
 		for (int i = entries.length - 1; i >= 0; i--) {
 			Header x = entries[i];
 			if (eq(x.getName(), name))
-				return Optional.of(x);
+				return optional(x);
 		}
-		return Optional.empty();
+		return empty();
 	}
 
 	/**
@@ -1516,7 +1517,7 @@ public class HeaderList {
 
 	/**
 	 * Returns all the string values for all headers with the specified name.
-	 * 
+	 *
 	 * @param name The header name.
 	 * @return An array containing all values.  Never <jk>null</jk>.
 	 */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfRange.java
index 85ce412..44a9f23 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/IfRange.java
@@ -15,8 +15,8 @@ package org.apache.juneau.http.header;
 import static java.time.format.DateTimeFormatter.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
-import static java.util.Optional.*;
 
 import java.time.*;
 import java.util.*;
@@ -225,9 +225,9 @@ public class IfRange extends BasicDateHeader {
 	public Optional<EntityTag> asEntityTag() {
 		if (supplier != null) {
 			Object o = supplier.get();
-			return ofNullable(o instanceof EntityTag ? (EntityTag)o : null);
+			return optional(o instanceof EntityTag ? (EntityTag)o : null);
 		}
-		return ofNullable(value);
+		return optional(value);
 	}
 
 	private static boolean isEtag(String s) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRange.java
index 06362d8..3ed1d7e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRange.java
@@ -13,11 +13,11 @@
 package org.apache.juneau.http.header;
 
 import static org.apache.juneau.http.HttpParts.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
 import org.apache.http.*;
-import org.apache.juneau.internal.*;
 
 
 /**
@@ -48,7 +48,7 @@ public class MediaRange extends MediaType {
 
 		// The media type consists of everything up to the q parameter.
 		// The q parameter and stuff after is part of the range.
-		List<NameValuePair> extensions = AList.create();
+		List<NameValuePair> extensions = list();
 		boolean foundQ = false;
 		for (NameValuePair p : e.getParameters()) {
 			if (p.getName().equals("q")) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRanges.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRanges.java
index c8ccf55..f80e08c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRanges.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRanges.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
@@ -94,7 +95,7 @@ public class MediaRanges {
 	 */
 	public MediaRanges(HeaderElement[] e) {
 
-		List<MediaRange> l = AList.create();
+		List<MediaRange> l = list();
 		for (HeaderElement e2 : e)
 			l.add(new MediaRange(e2));
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/RetryAfter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/RetryAfter.java
index 4b76a37..6dd5f8b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/RetryAfter.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/RetryAfter.java
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
-import static java.time.format.DateTimeFormatter.*;import static java.util.Optional.*;
+import static java.time.format.DateTimeFormatter.*;
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
@@ -220,8 +221,8 @@ public class RetryAfter extends BasicDateHeader {
 	public Optional<Integer> asInteger() {
 		if (supplier != null) {
 			Object o = supplier.get();
-			return ofNullable(o instanceof Integer ? (Integer)o : null);
+			return optional(o instanceof Integer ? (Integer)o : null);
 		}
-		return ofNullable(value);
+		return optional(value);
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
index 538c1af..6c3fc8c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.http.HttpParts.*;
@@ -21,7 +22,6 @@ import java.util.*;
 import org.apache.http.*;
 import org.apache.http.message.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.internal.*;
 
 /**
  * Represents a single value in a comma-delimited header value that optionally contains a quality metric for
@@ -69,7 +69,7 @@ public class StringRange {
 
 		// The media type consists of everything up to the q parameter.
 		// The q parameter and stuff after is part of the range.
-		List<NameValuePair> extensions = AList.create();
+		List<NameValuePair> extensions = list();
 		for (NameValuePair p : e.getParameters()) {
 			if (p.getName().equals("q")) {
 				qValue = Float.parseFloat(p.getValue());
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRanges.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRanges.java
index 7ac59e8..88ec4e6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRanges.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRanges.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
@@ -100,7 +101,7 @@ public class StringRanges {
 	 */
 	public StringRanges(HeaderElement[] e) {
 
-		List<StringRange> l = AList.create();
+		List<StringRange> l = list();
 		for (HeaderElement e2 : e)
 			l.add(new StringRange(e2));
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/Thrown.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/Thrown.java
index 129eb71..0644d21 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/Thrown.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/Thrown.java
@@ -14,8 +14,8 @@ package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static java.util.Collections.*;
-import static java.util.Optional.*;
 import static java.util.stream.Collectors.*;
 
 import java.util.*;
@@ -111,9 +111,7 @@ public class Thrown extends BasicCsvArrayHeader {
 	public Thrown(String value) {
 		super(NAME, value);
 		List<Part> l = new ArrayList<>();
-		if (value != null)
-			for (String s : split(value))
-				l.add(new Part(s));
+		split(value, x -> l.add(new Part(x)));
 		this.value = value == null ? null : unmodifiableList(l);
 	}
 
@@ -134,7 +132,7 @@ public class Thrown extends BasicCsvArrayHeader {
 	 * @return The class name portion of the header, or <jk>null</jk> if not there.
 	 */
 	public Optional<List<Part>> asParts() {
-		return ofNullable(value);
+		return optional(value);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicBooleanPart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicBooleanPart.java
index 9f5803d..4fabfcb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicBooleanPart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicBooleanPart.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -107,7 +107,7 @@ public class BasicBooleanPart extends BasicPart {
 	 * @return The part value as a boolean.
 	 */
 	public Optional<Boolean> asBoolean() {
-		return ofNullable(getParsedValue());
+		return optional(getParsedValue());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
index 3a23771..045b9bc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -21,7 +21,6 @@ import java.util.function.*;
 
 import org.apache.http.*;
 import org.apache.juneau.assertions.*;
-import org.apache.juneau.internal.*;
 
 /**
  * A {@link NameValuePair} that consists of a comma-delimited list of string values.
@@ -159,7 +158,7 @@ public class BasicCsvArrayPart extends BasicPart {
 	 */
 	public Optional<List<String>> asList() {
 		List<String> l = getParsedValue();
-		return ofNullable(l == null ? null : Collections.unmodifiableList(l));
+		return optional(unmodifiable(l));
 	}
 
 	private List<String> getParsedValue() {
@@ -170,7 +169,7 @@ public class BasicCsvArrayPart extends BasicPart {
 		if (o == null)
 			return null;
 
-		AList<String> l = AList.create();
+		List<String> l = list();
 		if (o instanceof Collection) {
 			for (Object o2 : (Collection<?>)o)
 				l.add(stringify(o2));
@@ -178,9 +177,8 @@ public class BasicCsvArrayPart extends BasicPart {
 			for (int i = 0; i < Array.getLength(o); i++)
 				l.add(stringify(Array.get(o, i)));
 		} else {
-			for (String s : split(o.toString()))
-				l.add(s);
+			split(o.toString(), x -> l.add(x));
 		}
-		return l.unmodifiable();
+		return unmodifiable(l);
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicDatePart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicDatePart.java
index a42563e..02cb131 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicDatePart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicDatePart.java
@@ -14,8 +14,8 @@ package org.apache.juneau.http.part;
 
 import static java.time.format.DateTimeFormatter.*;
 import static java.time.temporal.ChronoUnit.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.time.*;
 import java.util.*;
@@ -118,7 +118,7 @@ public class BasicDatePart extends BasicPart {
 	 */
 	public Optional<Calendar> asCalendar() {
 		ZonedDateTime zdt = getParsedValue();
-		return ofNullable(zdt == null ? null : GregorianCalendar.from(zdt));
+		return optional(zdt).map(GregorianCalendar::from);
 	}
 
 	/**
@@ -128,7 +128,7 @@ public class BasicDatePart extends BasicPart {
 	 */
 	public Optional<java.util.Date> asDate() {
 		Calendar c = asCalendar().orElse(null);
-		return ofNullable(c == null ? null : c.getTime());
+		return optional(c).map(Calendar::getTime);
 	}
 
 	/**
@@ -137,7 +137,7 @@ public class BasicDatePart extends BasicPart {
 	 * @return This part value as a {@link ZonedDateTime}, or {@link Optional#empty()} if the part could not be parsed.
 	 */
 	public Optional<ZonedDateTime> asZonedDateTime() {
-		return ofNullable(getParsedValue());
+		return optional(getParsedValue());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
index d2169d4..4ad86cd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.http.part;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -108,7 +108,7 @@ public class BasicIntegerPart extends BasicPart {
 	 * @return The part value as an integer, or {@link Optional#empty()} if the value is <jk>null</jk>.
 	 */
 	public Optional<Integer> asInteger() {
-		return ofNullable(getParsedValue());
+		return optional(getParsedValue());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicLongPart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
index aa948b6..3833e02 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.http.part;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.util.*;
 import java.util.function.*;
@@ -108,7 +108,7 @@ public class BasicLongPart extends BasicPart {
 	 * @return The part value as a long, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<Long> asLong() {
-		return ofNullable(getParsedValue());
+		return optional(getParsedValue());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicStringPart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicStringPart.java
index 983f8a7..2b46973 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicStringPart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicStringPart.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
@@ -112,7 +113,7 @@ public class BasicStringPart extends BasicPart {
 	 * @return The value of this part as a string, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<String> asString() {
-		return Optional.ofNullable(getParsedValue());
+		return optional(getParsedValue());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicUriPart.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicUriPart.java
index c66110f..169194b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicUriPart.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/BasicUriPart.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Optional.*;
 
 import java.net.*;
 import java.util.*;
@@ -98,7 +98,7 @@ public class BasicUriPart extends BasicPart {
 	 * @return This header as a {@link URI}, or {@link Optional#empty()} if the value is <jk>null</jk>
 	 */
 	public Optional<URI> asURI() {
-		return ofNullable(getParsedValue());
+		return optional(getParsedValue());
 	}
 
 	private URI getParsedValue() {
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 7c10152..d21bb2a 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
@@ -15,6 +15,7 @@ package org.apache.juneau.http.part;
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 
 import java.util.*;
@@ -1116,16 +1117,16 @@ public class PartList {
 			for (int i = 0; i < entries.size(); i++) {
 				NameValuePair x = entries.get(i);
 				if (eq(x.getName(), name))
-					return Optional.of(x);
+					return optional(x);
 			}
 			if (defaultEntries != null) {
 				for (int i = 0; i < defaultEntries.size(); i ++) {
 					NameValuePair x = defaultEntries.get(i);
 					if (eq(x.getName(), name))
-						return Optional.of(x);
+						return optional(x);
 				}
 			}
-			return Optional.empty();
+			return empty();
 		}
 
 		/**
@@ -1138,16 +1139,16 @@ public class PartList {
 			for (int i = entries.size() - 1; i >= 0; i--) {
 				NameValuePair x = entries.get(i);
 				if (eq(x.getName(), name))
-					return Optional.of(x);
+					return optional(x);
 			}
 			if (defaultEntries != null) {
 				for (int i = defaultEntries.size() - 1; i >= 0; i--) {
 					NameValuePair x = defaultEntries.get(i);
 					if (eq(x.getName(), name))
-						return Optional.of(x);
+						return optional(x);
 				}
 			}
-			return Optional.empty();
+			return empty();
 		}
 
 		// <FluentSetters>
@@ -1287,10 +1288,10 @@ public class PartList {
 		}
 
 		if (first == null)
-			return Optional.empty();
+			return empty();
 
 		if (rest == null)
-			return Optional.of(first);
+			return optional(first);
 
 		CharArrayBuffer sb = new CharArrayBuffer(128);
 		sb.append(first.getValue());
@@ -1299,7 +1300,7 @@ public class PartList {
 			sb.append(rest.get(i).getValue());
 		}
 
-		return Optional.of(new BasicPart(name, sb.toString()));
+		return optional(new BasicPart(name, sb.toString()));
 	}
 
 	/**
@@ -1346,10 +1347,10 @@ public class PartList {
 		}
 
 		if (first == null)
-			return Optional.empty();
+			return empty();
 
 		if (rest == null)
-			return Optional.of(PartBeanMeta.of(type).construct(name, first.getValue()));
+			return optional(PartBeanMeta.of(type).construct(name, first.getValue()));
 
 		CharArrayBuffer sb = new CharArrayBuffer(128);
 		sb.append(first.getValue());
@@ -1358,7 +1359,7 @@ public class PartList {
 			sb.append(rest.get(i).getValue());
 		}
 
-		return Optional.of(PartBeanMeta.of(type).construct(name, sb.toString()));
+		return optional(PartBeanMeta.of(type).construct(name, sb.toString()));
 	}
 
 	/**
@@ -1391,7 +1392,7 @@ public class PartList {
 	 * The returned array maintains the relative order in which the parts were added.
 	 * Each call creates a new array not backed by this list.
 	 *
-	 * @return 
+	 * @return
 	 * 	An array of all the parts in this list, or an empty array if no parts are present.
 	 */
 	public NameValuePair[] getAll() {
@@ -1440,9 +1441,9 @@ public class PartList {
 		for (int i = 0; i < entries.length; i++) {
 			NameValuePair x = entries[i];
 			if (eq(x.getName(), name))
-				return Optional.of(x);
+				return optional(x);
 		}
-		return Optional.empty();
+		return empty();
 	}
 
 	/**
@@ -1458,9 +1459,9 @@ public class PartList {
 		for (int i = entries.length - 1; i >= 0; i--) {
 			NameValuePair x = entries[i];
 			if (eq(x.getName(), name))
-				return Optional.of(x);
+				return optional(x);
 		}
-		return Optional.empty();
+		return empty();
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
index 8c0bd4c..9e48ce4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
@@ -12,12 +12,12 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.remote;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 
 /**
@@ -55,18 +55,18 @@ public class RrpcInterfaceMeta {
 
 		ci.forEachAnnotation(Remote.class, x -> isNotEmpty(x.path()), x -> path.set(trimSlashes(x.path())));
 
-		AMap<Method,RrpcInterfaceMethodMeta> methods = AMap.create();
+		Map<Method,RrpcInterfaceMethodMeta> methods = map();
 		ci.forEachPublicMethod(
 			x -> true,
 			x -> methods.put(x.inner(), new RrpcInterfaceMethodMeta(uri, x.inner()))
 		);
 
-		AMap<String,RrpcInterfaceMethodMeta> methodsByPath = AMap.create();
+		Map<String,RrpcInterfaceMethodMeta> methodsByPath = map();
 		for (RrpcInterfaceMethodMeta rmm : methods.values())
 			methodsByPath.put(rmm.getPath(), rmm);
 
-		this.methods = methods.unmodifiable();
-		this.methodsByPath = methodsByPath.unmodifiable();
+		this.methods = unmodifiable(methods);
+		this.methodsByPath = unmodifiable(methodsByPath);
 		this.path = path.get();
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
index 8d95ece..6c682b4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
@@ -18,6 +18,7 @@ import static org.apache.juneau.httppart.HttpPartFormat.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.lang.annotation.*;
 import java.lang.reflect.*;
@@ -2772,7 +2773,7 @@ public class HttpPartSchema {
 		 * @return This object.
 		 */
 		public Builder _enum(String...values) {
-			return _enum(ASet.of(values));
+			return _enum(set(values));
 		}
 
 		/**
@@ -3291,61 +3292,62 @@ public class HttpPartSchema {
 
 		// Validation.
 		List<String> errors = new ArrayList<>();
-		AList<String> notAllowed = AList.create();
+		ListBuilder<String> notAllowed = listBuilder(String.class);
 		boolean invalidFormat = false;
 		switch (type) {
 			case STRING: {
-				notAllowed.appendIf(properties != null, "properties");
-				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(exclusiveMaximum, "exclusiveMaximum");
-				notAllowed.appendIf(exclusiveMinimum, "exclusiveMinimum");
-				notAllowed.appendIf(uniqueItems, "uniqueItems");
-				notAllowed.appendIf(collectionFormat != HttpPartCollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
-				notAllowed.appendIf(items != null, "items");
-				notAllowed.appendIf(maximum != null, "maximum");
-				notAllowed.appendIf(minimum != null, "minimum");
-				notAllowed.appendIf(multipleOf != null, "multipleOf");
-				notAllowed.appendIf(maxItems != null, "maxItems");
-				notAllowed.appendIf(minItems != null, "minItems");
-				notAllowed.appendIf(minProperties != null, "minProperties");
+				notAllowed
+					.addIf(properties != null, "properties")
+					.addIf(additionalProperties != null, "additionalProperties")
+					.addIf(exclusiveMaximum, "exclusiveMaximum")
+					.addIf(exclusiveMinimum, "exclusiveMinimum")
+					.addIf(uniqueItems, "uniqueItems")
+					.addIf(collectionFormat != HttpPartCollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat")
+					.addIf(items != null, "items")
+					.addIf(maximum != null, "maximum")
+					.addIf(minimum != null, "minimum")
+					.addIf(multipleOf != null, "multipleOf")
+					.addIf(maxItems != null, "maxItems")
+					.addIf(minItems != null, "minItems")
+					.addIf(minProperties != null, "minProperties");
 				invalidFormat = ! format.isOneOf(HttpPartFormat.BYTE, HttpPartFormat.BINARY, HttpPartFormat.BINARY_SPACED, HttpPartFormat.DATE, HttpPartFormat.DATE_TIME, HttpPartFormat.PASSWORD, HttpPartFormat.UON, HttpPartFormat.NO_FORMAT);
 				break;
 			}
 			case ARRAY: {
-				notAllowed.appendIf(properties != null, "properties");
-				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(exclusiveMaximum, "exclusiveMaximum");
-				notAllowed.appendIf(exclusiveMinimum, "exclusiveMinimum");
-				notAllowed.appendIf(pattern != null, "pattern");
-				notAllowed.appendIf(maximum != null, "maximum");
-				notAllowed.appendIf(minimum != null, "minimum");
-				notAllowed.appendIf(multipleOf != null, "multipleOf");
-				notAllowed.appendIf(maxLength != null, "maxLength");
-				notAllowed.appendIf(minLength != null, "minLength");
-				notAllowed.appendIf(maxProperties != null, "maxProperties");
-				notAllowed.appendIf(minProperties != null, "minProperties");
+				notAllowed.addIf(properties != null, "properties")
+					.addIf(additionalProperties != null, "additionalProperties")
+					.addIf(exclusiveMaximum, "exclusiveMaximum")
+					.addIf(exclusiveMinimum, "exclusiveMinimum")
+					.addIf(pattern != null, "pattern")
+					.addIf(maximum != null, "maximum")
+					.addIf(minimum != null, "minimum")
+					.addIf(multipleOf != null, "multipleOf")
+					.addIf(maxLength != null, "maxLength")
+					.addIf(minLength != null, "minLength")
+					.addIf(maxProperties != null, "maxProperties")
+					.addIf(minProperties != null, "minProperties");
 				invalidFormat = ! format.isOneOf(HttpPartFormat.NO_FORMAT, HttpPartFormat.UON);
 				break;
 			}
 			case BOOLEAN: {
-				notAllowed.appendIf(! _enum.isEmpty(), "_enum");
-				notAllowed.appendIf(properties != null, "properties");
-				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(exclusiveMaximum, "exclusiveMaximum");
-				notAllowed.appendIf(exclusiveMinimum, "exclusiveMinimum");
-				notAllowed.appendIf(uniqueItems, "uniqueItems");
-				notAllowed.appendIf(collectionFormat != HttpPartCollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
-				notAllowed.appendIf(pattern != null, "pattern");
-				notAllowed.appendIf(items != null, "items");
-				notAllowed.appendIf(maximum != null, "maximum");
-				notAllowed.appendIf(minimum != null, "minimum");
-				notAllowed.appendIf(multipleOf != null, "multipleOf");
-				notAllowed.appendIf(maxItems != null, "maxItems");
-				notAllowed.appendIf(maxLength != null, "maxLength");
-				notAllowed.appendIf(maxProperties != null, "maxProperties");
-				notAllowed.appendIf(minItems != null, "minItems");
-				notAllowed.appendIf(minLength != null, "minLength");
-				notAllowed.appendIf(minProperties != null, "minProperties");
+				notAllowed.addIf(! _enum.isEmpty(), "_enum")
+					.addIf(properties != null, "properties")
+					.addIf(additionalProperties != null, "additionalProperties")
+					.addIf(exclusiveMaximum, "exclusiveMaximum")
+					.addIf(exclusiveMinimum, "exclusiveMinimum")
+					.addIf(uniqueItems, "uniqueItems")
+					.addIf(collectionFormat != HttpPartCollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat")
+					.addIf(pattern != null, "pattern")
+					.addIf(items != null, "items")
+					.addIf(maximum != null, "maximum")
+					.addIf(minimum != null, "minimum")
+					.addIf(multipleOf != null, "multipleOf")
+					.addIf(maxItems != null, "maxItems")
+					.addIf(maxLength != null, "maxLength")
+					.addIf(maxProperties != null, "maxProperties")
+					.addIf(minItems != null, "minItems")
+					.addIf(minLength != null, "minLength")
+					.addIf(minProperties != null, "minProperties");
 				invalidFormat = ! format.isOneOf(HttpPartFormat.NO_FORMAT, HttpPartFormat.UON);
 				break;
 			}
@@ -3353,50 +3355,50 @@ public class HttpPartSchema {
 				break;
 			}
 			case INTEGER: {
-				notAllowed.appendIf(properties != null, "properties");
-				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(uniqueItems, "uniqueItems");
-				notAllowed.appendIf(collectionFormat != HttpPartCollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
-				notAllowed.appendIf(pattern != null, "pattern");
-				notAllowed.appendIf(items != null, "items");
-				notAllowed.appendIf(maxItems != null, "maxItems");
-				notAllowed.appendIf(maxLength != null, "maxLength");
-				notAllowed.appendIf(maxProperties != null, "maxProperties");
-				notAllowed.appendIf(minItems != null, "minItems");
-				notAllowed.appendIf(minLength != null, "minLength");
-				notAllowed.appendIf(minProperties != null, "minProperties");
+				notAllowed.addIf(properties != null, "properties")
+					.addIf(additionalProperties != null, "additionalProperties")
+					.addIf(uniqueItems, "uniqueItems")
+					.addIf(collectionFormat != HttpPartCollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat")
+					.addIf(pattern != null, "pattern")
+					.addIf(items != null, "items")
+					.addIf(maxItems != null, "maxItems")
+					.addIf(maxLength != null, "maxLength")
+					.addIf(maxProperties != null, "maxProperties")
+					.addIf(minItems != null, "minItems")
+					.addIf(minLength != null, "minLength")
+					.addIf(minProperties != null, "minProperties");
 				invalidFormat = ! format.isOneOf(HttpPartFormat.NO_FORMAT, HttpPartFormat.UON, HttpPartFormat.INT32, HttpPartFormat.INT64);
 				break;
 			}
 			case NUMBER: {
-				notAllowed.appendIf(properties != null, "properties");
-				notAllowed.appendIf(additionalProperties != null, "additionalProperties");
-				notAllowed.appendIf(uniqueItems, "uniqueItems");
-				notAllowed.appendIf(collectionFormat != HttpPartCollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat");
-				notAllowed.appendIf(pattern != null, "pattern");
-				notAllowed.appendIf(items != null, "items");
-				notAllowed.appendIf(maxItems != null, "maxItems");
-				notAllowed.appendIf(maxLength != null, "maxLength");
-				notAllowed.appendIf(maxProperties != null, "maxProperties");
-				notAllowed.appendIf(minItems != null, "minItems");
-				notAllowed.appendIf(minLength != null, "minLength");
-				notAllowed.appendIf(minProperties != null, "minProperties");
+				notAllowed.addIf(properties != null, "properties")
+					.addIf(additionalProperties != null, "additionalProperties")
+					.addIf(uniqueItems, "uniqueItems")
+					.addIf(collectionFormat != HttpPartCollectionFormat.NO_COLLECTION_FORMAT, "collectionFormat")
+					.addIf(pattern != null, "pattern")
+					.addIf(items != null, "items")
+					.addIf(maxItems != null, "maxItems")
+					.addIf(maxLength != null, "maxLength")
+					.addIf(maxProperties != null, "maxProperties")
+					.addIf(minItems != null, "minItems")
+					.addIf(minLength != null, "minLength")
+					.addIf(minProperties != null, "minProperties");
 				invalidFormat = ! format.isOneOf(HttpPartFormat.NO_FORMAT, HttpPartFormat.UON, HttpPartFormat.FLOAT, HttpPartFormat.DOUBLE);
 				break;
 			}
 			case OBJECT: {
-				notAllowed.appendIf(exclusiveMaximum, "exclusiveMaximum");
-				notAllowed.appendIf(exclusiveMinimum, "exclusiveMinimum");
-				notAllowed.appendIf(uniqueItems, "uniqueItems");
-				notAllowed.appendIf(pattern != null, "pattern");
-				notAllowed.appendIf(items != null, "items");
-				notAllowed.appendIf(maximum != null, "maximum");
-				notAllowed.appendIf(minimum != null, "minimum");
-				notAllowed.appendIf(multipleOf != null, "multipleOf");
-				notAllowed.appendIf(maxItems != null, "maxItems");
-				notAllowed.appendIf(maxLength != null, "maxLength");
-				notAllowed.appendIf(minItems != null, "minItems");
-				notAllowed.appendIf(minLength != null, "minLength");
+				notAllowed.addIf(exclusiveMaximum, "exclusiveMaximum")
+					.addIf(exclusiveMinimum, "exclusiveMinimum")
+					.addIf(uniqueItems, "uniqueItems")
+					.addIf(pattern != null, "pattern")
+					.addIf(items != null, "items")
+					.addIf(maximum != null, "maximum")
+					.addIf(minimum != null, "minimum")
+					.addIf(multipleOf != null, "multipleOf")
+					.addIf(maxItems != null, "maxItems")
+					.addIf(maxLength != null, "maxLength")
+					.addIf(minItems != null, "minItems")
+					.addIf(minLength != null, "minLength");
 				invalidFormat = ! format.isOneOf(HttpPartFormat.NO_FORMAT);
 				break;
 			}
@@ -3404,8 +3406,9 @@ public class HttpPartSchema {
 				break;
 		}
 
-		if (! notAllowed.isEmpty())
-			errors.add("Attributes not allow for type='"+type+"': " + StringUtils.join(notAllowed, ","));
+		List<String> notAllowed2 = notAllowed.build();
+		if (! notAllowed2.isEmpty())
+			errors.add("Attributes not allow for type='"+type+"': " + StringUtils.join(notAllowed2, ","));
 		if (invalidFormat)
 			errors.add("Invalid format for type='"+type+"': '"+format+"'");
 		if (exclusiveMaximum && maximum == null)
@@ -4050,19 +4053,18 @@ public class HttpPartSchema {
 			isNotEmpty |= ss.length > 0;
 		if (! isNotEmpty)
 			return null;
-		Set<String> set = ASet.of();
+		Set<String> set = set();
 		for (String[] ss : s)
 			if (ss != null)
 				for (String ss2 : ss)
-					for (String ss3 : split(ss2, ','))
-						set.add(trim(ss3));
+					split(ss2, x -> set.add(x));
 		return set.isEmpty() ? null : set;
 	}
 
 	final static Set<String> toSet(String s) {
 		if (isEmpty(s))
 			return null;
-		Set<String> set = ASet.of();
+		Set<String> set = set();
 		try {
 			for (Object o : StringUtils.parseListOrCdl(s))
 				set.add(o.toString());
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanPropertyMeta.java
index 23aded7..1f7d748 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanPropertyMeta.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.httppart.bean;
 
-import static java.util.Optional.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.lang.annotation.*;
 import java.lang.reflect.*;
@@ -54,7 +54,7 @@ public class RequestBeanPropertyMeta {
 		this.partType = b.partType;
 		this.schema = b.schema;
 		this.getter = b.getter;
-		this.serializer = ofNullable(schema.getSerializer() == null ? serializer : BeanCreator.of(HttpPartSerializer.class).type(schema.getSerializer()).run());
+		this.serializer = optional(schema.getSerializer() == null ? serializer : BeanCreator.of(HttpPartSerializer.class).type(schema.getSerializer()).run());
 		this.parser = schema.getParser() == null ? parser : BeanCreator.of(HttpPartParser.class).type(schema.getParser()).run();
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
index e7c117f..610489f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
@@ -13,9 +13,9 @@
 package org.apache.juneau.httppart.bean;
 
 import static org.apache.juneau.httppart.bean.Utils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.httppart.HttpPartType.*;
 import static org.apache.juneau.annotation.InvalidAnnotationException.*;
-import static java.util.Optional.*;
 
 import java.io.*;
 import java.lang.reflect.*;
@@ -110,8 +110,8 @@ public class ResponseBeanMeta {
 	ResponseBeanMeta(Builder b) {
 		this.cm = b.cm;
 		this.code = b.code;
-		this.partSerializer = ofNullable(b.partSerializer).map(x -> HttpPartSerializer.creator().type(x).apply(b.annotations).create());
-		this.partParser = ofNullable(b.partParser).map(x -> HttpPartParser.creator().type(x).apply(b.annotations).create());
+		this.partSerializer = optional(b.partSerializer).map(x -> HttpPartSerializer.creator().type(x).apply(b.annotations).create());
+		this.partParser = optional(b.partParser).map(x -> HttpPartParser.creator().type(x).apply(b.annotations).create());
 		this.schema = b.schema.build();
 
 		Map<String,ResponseBeanPropertyMeta> properties = new LinkedHashMap<>();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanPropertyMeta.java
index 4ea141f..1891601 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanPropertyMeta.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.httppart.bean;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.lang.reflect.*;
 import java.util.*;
 import org.apache.juneau.http.annotation.*;
@@ -92,7 +94,7 @@ public class ResponseBeanPropertyMeta {
 	 * @return The HTTP part name, or <jk>null</jk> if it doesn't have a part name.
 	 */
 	public Optional<String> getPartName() {
-		return Optional.ofNullable(schema == null ? null : schema.getName());
+		return optional(schema == null ? null : schema.getName());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/AList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/AList.java
deleted file mode 100644
index f6c5ab8..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/AList.java
+++ /dev/null
@@ -1,410 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.internal;
-
-import static java.util.Collections.*;
-import static org.apache.juneau.internal.ConsumerUtils.*;
-import java.lang.reflect.*;
-import java.util.*;
-import java.util.function.*;
-
-import org.apache.juneau.json.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * A fluent {@link ArrayList}.
- *
- * <p>
- * Provides various convenience methods for creating and populating a list with minimal code.
- *
- * <h5 class='figure'>Examples:</h5>
- * <p class='bjava'>
- * 	<jc>// A list of strings.</jc>
- * 	AList&lt;String&gt; <jv>list</jv> = AList.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>);
- *
- * 	<jc>// Append to list.</jc>
- * 	<jv>list</jv>.append(<js>"baz"</js>, <js>"qux"</js>);
- *
- * 	<jc>// Create an unmodifiable view of this list.</jc>
- * 	List&lt;String&gt; <jv>list2</jv> = <jv>list</jv>.unmodifiable();
- *
- * 	<jc>// Convert it to an array.</jc>
- * 	String[] <jv>array</jv> = <jv>list</jv>.asArray();
- *
- * 	<jc>// Convert to simplified JSON.</jc>
- * 	String <jv>json</jv> = <jv>list</jv>.asString();
- *
- * 	<jc>// Convert to XML.</jc>
- * 	String <jv>json</jv> = <jv>list</jv>.asString(XmlSerializer.<jsf>DEFAULT</jsm>);
- * </p>
- *
- * <ul class='spaced-list'>
- * 	<li class='warn'>This class is not thread safe.
- * </ul>
- *
- * <ul class='seealso'>
- * 	<li class='extlink'>{@source}
- * </ul>
- *
- * @param <T> The entry type.
- * @serial exclude
- */
-@SuppressWarnings({"unchecked"})
-public class AList<T> extends ArrayList<T> {
-
-	private static final long serialVersionUID = 1L;
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Constructors
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Constructor.
-	 *
-	 * <p>
-	 * Creates an array list of default size.
-	 */
-	public AList() {}
-
-	/**
-	 * Constructor.
-	 *
-	 * <p>
-	 * Creates an array list of default size.
-	 * @param capacity Initial capacity.
-	 */
-	public AList(int capacity) {
-		super(capacity);
-	}
-
-	/**
-	 * Copy constructor.
-	 *
-	 * @param c Initial contents.  Can be <jk>null</jk>.
-	 */
-	public AList(Collection<T> c) {
-		super(c == null ? emptyList() : c);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Creators
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Convenience method for creating an empty list of objects.
-	 *
-	 * <p>
-	 * Creates an array list of default size.
-	 *
-	 * @return A new list.
-	 */
-	public static <T> AList<T> create() {
-		return new AList<>();
-	}
-
-	/**
-	 * Convenience method for creating a list of objects.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	@SafeVarargs
-	public static <T> AList<T> of(T...values) {
-		return new AList<T>(values.length).a(values);
-	}
-
-	/**
-	 * Convenience method for creating a list of objects.
-	 *
-	 * <p>
-	 * Creates a list with the same capacity as the array.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	public static <T> AList<T> of(Collection<T> values) {
-		values = values == null ? emptyList() : values;
-		return new AList<T>(values.size()).a(values);
-	}
-
-	/**
-	 * Convenience method for creating a list of collection objects.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	public static <T extends Collection<?>> AList<T> ofCollections(T...values) {
-		AList<T> l = new AList<>();
-		for (T v : values)
-			l.add(v);
-		return l;
-	}
-
-	/**
-	 * Convenience method for creating a list of collection objects.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	public static <T> AList<T[]> ofArrays(T[]...values) {
-		AList<T[]> l = new AList<>();
-		for (T[] v : values)
-			l.add(v);
-		return l;
-	}
-
-	/**
-	 * Creates a copy of the collection if it's not <jk>null</jk>.
-	 *
-	 * @param values The initial values.
-	 * @return A new list, or <jk>null</jk> if the collection is <jk>null</jk>.
-	 */
-	public static <T> AList<T> nullable(Collection<T> values) {
-		return values == null ? null : of(values);
-	}
-
-	/**
-	 * Convenience method for creating an unmodifiable list of objects.
-	 *
-	 * <p>
-	 * Creates a list with the same capacity as the array.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	public static <T> List<T> unmodifiable(T...values) {
-		return values.length == 0 ? emptyList() : of(values).unmodifiable();
-	}
-
-	/**
-	 * Convenience method for creating an unmodifiable list out of the specified collection.
-	 *
-	 * @param values The collection to add.
-	 * @param <T> The element type.
-	 * @return An unmodifiable list, never <jk>null</jk>.
-	 */
-	public static <T> List<T> unmodifiable(Collection<T> values) {
-		if (values == null || values.isEmpty())
-			return Collections.emptyList();
-		return new AList<T>(values.size()).a(values).unmodifiable();
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Appenders
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Adds the value to this list.
-	 *
-	 * @param value The value to add to this list.
-	 * @return This object.
-	 */
-	public AList<T> append(T value) {
-		add(value);
-		return this;
-	}
-
-	/**
-	 * Adds all the values in the specified array to this list.
-	 *
-	 * @param values The values to add to this list.
-	 * @return This object.
-	 */
-	public AList<T> append(T...values) {
-		Collections.addAll(this, values);
-		return this;
-	}
-
-	/**
-	 * Adds all the values in the specified collection to this list.
-	 *
-	 * @param values The values to add to this list.
-	 * @return This object.
-	 */
-	public AList<T> append(Collection<? extends T> values) {
-		addAll(values);
-		return this;
-	}
-
-	/**
-	 * Same as {@link #append(Object)}.
-	 *
-	 * @param value The entry to add to this list.
-	 * @return This object.
-	 */
-	public AList<T> a(T value) {
-		return append(value);
-	}
-
-	/**
-	 * Same as {@link #append(Collection)}.
-	 *
-	 * @param values The collection to add to this list.  Can be <jk>null</jk>.
-	 * @return This object.
-	 */
-	public AList<T> a(Collection<? extends T> values) {
-		return append(values);
-	}
-
-	/**
-	 * Same as {@link #append(Object...)}.
-	 *
-	 * @param values The array to add to this list.
-	 * @return This object.
-	 */
-	public AList<T> a(T...values) {
-		return append(values);
-	}
-
-	/**
-	 * Adds an entry to this list if the boolean flag is <jk>true</jk>.
-	 *
-	 * @param flag The boolean flag.
-	 * @param value The value to add.
-	 * @return This object.
-	 */
-	public AList<T> appendIf(boolean flag, T value) {
-		if (flag)
-			a(value);
-		return this;
-	}
-
-	/**
-	 * Adds entries to this list skipping <jk>null</jk> values.
-	 *
-	 * @param values The objects to add to the list.
-	 * @return This object.
-	 */
-	public AList<T> appendIfNotNull(T...values) {
-		for (T o2 : values)
-			if (o2 != null)
-				a(o2);
-		return this;
-	}
-
-	/**
-	 * Add if predicate matches value.
-	 *
-	 * @param test The predicate to match against.
-	 * @param value The value to add to the list.
-	 * @return This object.
-	 */
-	public AList<T> appendIf(Predicate<Object> test, T value) {
-		return appendIf(passes(test, value), value);
-	}
-
-	/**
-	 * Add reverse.
-	 *
-	 * <p>
-	 * Adds all the entries in the specified collection to this list in reverse order.
-	 *
-	 * @param values The collection to add to this list.
-	 * @return This object.
-	 */
-	public AList<T> appendReverse(List<? extends T> values) {
-		for (ListIterator<? extends T> i = values.listIterator(values.size()); i.hasPrevious();)
-			add(i.previous());
-		return this;
-	}
-
-	/**
-	 * Add reverse.
-	 *
-	 * <p>
-	 * Adds the contents of the array to the list in reverse order.
-	 *
-	 * <p>
-	 * i.e. add values from the array from end-to-start order to the end of the list.
-	 *
-	 * @param values The collection to add to this list.
-	 * @return This object.
-	 */
-	public AList<T> appendReverse(T...values) {
-		for (int i = values.length - 1; i >= 0; i--)
-			add(values[i]);
-		return this;
-	}
-
-	/**
-	 * Sorts the contents of this list using natural ordering.
-	 *
-	 * @return This object.
-	 */
-	public AList<T> sort() {
-		super.sort(null);
-		return this;
-	}
-
-	/**
-	 * Sorts the contents of this list using the specified comparator.
-	 *
-	 * @param c The comparator to use for sorting.  Can be <jk>null</jk>.
-	 * @return This object.
-	 */
-	public AList<T> sortWith(Comparator<? super T> c) {
-		super.sort(c);
-		return this;
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Other methods
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Returns an unmodifiable view of this list.
-	 *
-	 * @return An unmodifiable view of this list.
-	 */
-	public List<T> unmodifiable() {
-		return isEmpty() ? emptyList() : unmodifiableList(this);
-	}
-
-	/**
-	 * Convert the contents of this list into a new array.
-	 *
-	 * @param c The component type of the array.
-	 * @return A new array.
-	 */
-	public <T2> T2[] asArrayOf(Class<T2> c) {
-		return toArray((T2[])Array.newInstance(c, size()));
-	}
-
-	/**
-	 * Returns a reverse iterable over this list.
-	 *
-	 * @return An iterable over the collection.
-	 */
-	public Iterable<T> riterable() {
-		return new ReverseIterable<>(this);
-	}
-
-	/**
-	 * Convert to a string using the specified serializer.
-	 *
-	 * @param ws The serializer to use to serialize this collection.
-	 * @return This collection serialized to a string.
-	 */
-	public String asString(WriterSerializer ws) {
-		return ws.toString(this);
-	}
-
-	/**
-	 * Convert to Simplified JSON.
-	 *
-	 * @return This collection serialized to a string.
-	 */
-	public String asJson() {
-		return SimpleJsonSerializer.DEFAULT.toString(this);
-	}
-}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/AMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/AMap.java
deleted file mode 100644
index 0cf7f58..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/AMap.java
+++ /dev/null
@@ -1,301 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.internal;
-
-import static java.util.Collections.*;
-import static org.apache.juneau.internal.ThrowableUtils.*;
-import static org.apache.juneau.internal.ConsumerUtils.*;
-
-import java.util.*;
-import java.util.function.*;
-
-import org.apache.juneau.json.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * A fluent {@link LinkedHashMap}.
- *
- * <p>
- * Provides various convenience methods for creating and populating a map with minimal code.
- *
- * <h5 class='figure'>Examples:</h5>
- * <p class='bjava'>
- * 	<jc>// A map of string key/value pairs.</jc>
- * 	AMap&lt;String,String&gt; <jv>map</jv> = AMap.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>);
- *
- * 	<jc>// Append to map.</jc>
- * 	<jv>map</jv>.a(<js>"baz"</js>, <js>"qux"</js>);
- *
- * 	<jc>// Create an unmodifiable view of this list.</jc>
- * 	Map&lt;String,String&gt; <jv>map2</jv> = <jv>map</jv>.unmodifiable();
- *
- * 	<jc>// Convert to simplified JSON.</jc>
- * 	String <jv>json</jv> = <jv>map</jv>.asString();
- *
- * 	<jc>// Convert to XML.</jc>
- * 	String <jv>json</jv> = <jv>msp</jv>.asString(XmlSerializer.<jsf>DEFAULT</jsm>);
- * </p>
- *
- * <ul class='spaced-list'>
- * 	<li class='warn'>This class is not thread safe.
- * </ul>
- *
- * <ul class='seealso'>
- * 	<li class='extlink'>{@source}
- * </ul>
- *
- * @param <K> The key type.
- * @param <V> The value type.
- * @serial exclude
- */
-public class AMap<K,V> extends LinkedHashMap<K,V> {
-
-	private static final long serialVersionUID = 1L;
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Constructors
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Constructor.
-	 */
-	public AMap() {}
-
-	/**
-	 * Copy constructor.
-	 *
-	 * @param copy The map to copy.  Can be <jk>null</jk>.
-	 */
-	public AMap(Map<K,V> copy) {
-		super(copy == null ? emptyMap() : copy);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Creators
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Creates an empty map.
-	 *
-	 * @return A new empty map.
-	 */
-	public static <K,V> AMap<K,V> create() {
-		return new AMap<>();
-	}
-
-	/**
-	 * Creates a map with one entry.
-	 *
-	 * @param key Entry key.
-	 * @param value Entry value.
-	 * @return A new map with one entry.
-	 */
-	public static <K,V> AMap<K,V> of(K key, V value) {
-		return new AMap<K,V>().a(key, value);
-	}
-
-	/**
-	 * Creates a map out of a list of key/value pairs.
-	 *
-	 * @param <K> The key type.
-	 * @param <V> The value type.
-	 * @param parameters
-	 * 	The parameters.
-	 * 	<br>Must be an even number of parameters.
-	 * 	<br>It's up to you to ensure that the parameters are the correct type.
-	 * @return A new map.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <K,V> AMap<K,V> ofPairs(Object...parameters) {
-		AMap<K,V> m = AMap.create();
-		if (parameters.length % 2 != 0)
-			throw runtimeException("Odd number of parameters passed into AMap.ofPairs()");
-		for (int i = 0; i < parameters.length; i+=2)
-			m.put((K)parameters[i], (V)parameters[i+1]);
-		return m;
-	}
-
-
-	@SuppressWarnings("javadoc")
-	public static <K,V> AMap<K,V> of(K k1, V v1, K k2, V v2) {
-		return AMap.of(k1,v1).a(k2,v2);
-	}
-
-	@SuppressWarnings("javadoc")
-	public static <K,V> AMap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3) {
-		return AMap.of(k1,v1).a(k2,v2).a(k3,v3);
-	}
-
-	@SuppressWarnings("javadoc")
-	public static <K,V> AMap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
-		return AMap.of(k1,v1).a(k2,v2).a(k3,v3).a(k4,v4);
-	}
-
-	@SuppressWarnings("javadoc")
-	public static <K,V> AMap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
-		return AMap.of(k1,v1).a(k2,v2).a(k3,v3).a(k4,v4).a(k5,v5);
-	}
-
-	@SuppressWarnings("javadoc")
-	public static <K,V> AMap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) {
-		return AMap.of(k1,v1).a(k2,v2).a(k3,v3).a(k4,v4).a(k5,v5).a(k6,v6);
-	}
-
-	@SuppressWarnings("javadoc")
-	public static <K,V> AMap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) {
-		return AMap.of(k1,v1).a(k2,v2).a(k3,v3).a(k4,v4).a(k5,v5).a(k6,v6).a(k7,v7);
-	}
-
-	@SuppressWarnings("javadoc")
-	public static <K,V> AMap<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8) {
-		return AMap.of(k1,v1).a(k2,v2).a(k3,v3).a(k4,v4).a(k5,v5).a(k6,v6).a(k7,v7).a(k8,v8);
-	}
-
-	/**
-	 * Creates a new map initialized with the specified contents.
-	 *
-	 * @param copy Initialize with these contents.  Can be <jk>null</jk>.
-	 * @return A new map.  Never <jk>null</jk>.
-	 */
-	public static <K,V> AMap<K,V> of(Map<K,V> copy) {
-		return new AMap<>(copy);
-	}
-
-	/**
-	 * Creates an unmodifiable copy of the specified map.
-	 *
-	 * @param copy The map to copy.
-	 * @return A new unmodifiable map, never <jk>null</jk>.
-	 */
-	public static <K,V> Map<K,V> unmodifiable(Map<K,V> copy) {
-		if (copy == null || copy.isEmpty())
-			return emptyMap();
-		return new AMap<>(copy).unmodifiable();
-	}
-
-	/**
-	 * Creates a copy of the collection if it's not <jk>null</jk>.
-	 *
-	 * @param c The initial values.
-	 * @return A new list, or <jk>null</jk> if the collection is <jk>null</jk>.
-	 */
-	public static <K,V> AMap<K,V> nullable(Map<K,V> c) {
-		return c == null ? null : of(c);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Appenders
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Adds an entry to this map.
-	 *
-	 * @param key The key.
-	 * @param value The value.
-	 * @return This object.
-	 */
-	public AMap<K,V> append(K key, V value) {
-		put(key, value);
-		return this;
-	}
-
-	/**
-	 * Appends all the entries in the specified map to this map.
-	 *
-	 * @param values The map to copy.
-	 * @return This object.
-	 */
-	public AMap<K,V> append(Map<K,V> values) {
-		super.putAll(values);
-		return this;
-	}
-
-	/**
-	 * Same as {@link #append(Object,Object)}.
-	 *
-	 * @param key The key.
-	 * @param value The value.
-	 * @return This object.
-	 */
-	public AMap<K,V> a(K key, V value) {
-		return append(key, value);
-	}
-
-	/**
-	 * Same as {@link #append(Map)}.
-	 *
-	 * @param values The map to copy.
-	 * @return This object.
-	 */
-	public AMap<K,V> a(Map<K,V> values) {
-		return append(values);
-	}
-
-	/**
-	 * Add if flag is <jk>true</jk>.
-	 *
-	 * @param flag The flag to check.
-	 * @param key The key.
-	 * @param value The value.
-	 * @return This object.
-	 */
-	public AMap<K,V> appendIf(boolean flag, K key, V value) {
-		if (flag)
-			append(key, value);
-		return this;
-	}
-
-	/**
-	 * Add if predicate matches value.
-	 *
-	 * @param test The predicate to match against.
-	 * @param key The key.
-	 * @param value The value.
-	 * @return This object.
-	 */
-	public AMap<K,V> appendIf(Predicate<Object> test, K key, V value) {
-		return appendIf(passes(test, value), key, value);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Other methods
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Returns an unmodifiable view of this map.
-	 *
-	 * @return An unmodifiable view of this map.
-	 */
-	public Map<K,V> unmodifiable() {
-		return this.isEmpty() ? emptyMap() : unmodifiableMap(this);
-	}
-
-	/**
-	 * Convert to a string using the specified serializer.
-	 *
-	 * @param ws The serializer to use to serialize this collection.
-	 * @return This collection serialized to a string.
-	 */
-	public String asString(WriterSerializer ws) {
-		return ws.toString(this);
-	}
-
-	/**
-	 * Convert to Simplified JSON.
-	 *
-	 * @return This collection serialized to a string.
-	 */
-	public String asJson() {
-		return SimpleJsonSerializer.DEFAULT.toString(this);
-	}
-}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASet.java
deleted file mode 100644
index 9da8188..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASet.java
+++ /dev/null
@@ -1,324 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.internal;
-
-import static java.util.Collections.*;
-import static org.apache.juneau.internal.ConsumerUtils.*;
-
-import java.lang.reflect.*;
-import java.util.*;
-import java.util.function.*;
-
-import org.apache.juneau.json.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * A fluent {@link LinkedHashSet}.
- *
- * <p>
- * Provides various convenience methods for creating and populating a set with minimal code.
- *
- * <h5 class='figure'>Examples:</h5>
- * <p class='bjava'>
- * 	<jc>// A set of strings.</jc>
- * 	ASet&lt;String&gt; <jv>set</jv> = ASet.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>);
- *
- * 	<jc>// Append to set.</jc>
- * 	<jv>set</jv>.a(<js>"baz"</js>).a(<js>"qux"</js>);
- *
- * 	<jc>// Create an unmodifiable view of this set.</jc>
- * 	Set&lt;String&gt; <jv>set2</jv> = <jv>set</jv>.unmodifiable();
- *
- * 	<jc>// Convert it to an array.</jc>
- * 	String[] <jv>array</jv> = <jv>set</jv>.asArrayOf(String.<jk>class</jk>);
- *
- * 	<jc>// Convert to simplified JSON.</jc>
- * 	String <jv>json</jv> = <jv>set</jv>.asString();
- *
- * 	<jc>// Convert to XML.</jc>
- * 	String <jv>json</jv> = <jv>set</jv>.asString(XmlSerializer.<jsf>DEFAULT</jsm>);
- * </p>
- *
- * <ul class='spaced-list'>
- * 	<li class='warn'>This class is not thread safe.
- * </ul>
- *
- * <ul class='seealso'>
- * 	<li class='extlink'>{@source}
- * </ul>
- *
- * @param <T> The entry type.
- * @serial exclude
- */
-@SuppressWarnings({"unchecked"})
-public class ASet<T> extends LinkedHashSet<T> {
-
-	private static final long serialVersionUID = 1L;
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Constructors
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Constructor.
-	 */
-	public ASet() {}
-
-	/**
-	 * Copy constructor.
-	 *
-	 * @param c Initial contents.  Can be <jk>null</jk>.
-	 */
-	public ASet(Collection<T> c) {
-		super(c == null ? emptySet() : c);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Creators
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Convenience method for creating an empty set of objects.
-	 *
-	 * @return A new set.
-	 */
-	public static <T> ASet<T> create() {
-		return new ASet<>();
-	}
-
-	/**
-	 * Convenience method for creating a list of objects.
-	 *
-	 * @param t The initial values.
-	 * @return A new list.
-	 */
-	@SafeVarargs
-	public static <T> ASet<T> of(T...t) {
-		return new ASet<T>().a(t);
-	}
-
-	/**
-	 * Convenience method for creating a list of objects.
-	 *
-	 * @param c The initial values.
-	 * @return A new list.
-	 */
-	public static <T> ASet<T> of(Collection<T> c) {
-		return new ASet<T>().a(c);
-	}
-
-	/**
-	 * Convenience method for creating a set of collection objects.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	public static <T extends Collection<?>> ASet<T> ofCollections(T...values) {
-		ASet<T> l = new ASet<>();
-		for (T v : values)
-			l.add(v);
-		return l;
-	}
-
-	/**
-	 * Convenience method for creating a set of collection objects.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	public static <T> ASet<T[]> ofArrays(T[]...values) {
-		ASet<T[]> l = new ASet<>();
-		for (T[] v : values)
-			l.add(v);
-		return l;
-	}
-
-	/**
-	 * Creates a copy of the collection if it's not <jk>null</jk>.
-	 *
-	 * @param values The initial values.
-	 * @return A new list, or <jk>null</jk> if the collection is <jk>null</jk>.
-	 */
-	public static <T> ASet<T> nullable(Collection<T> values) {
-		return values == null ? null : of(values);
-	}
-
-	/**
-	 * Convenience method for creating an unmodifiable set of objects.
-	 *
-	 * @param t The initial values.
-	 * @return A new list.
-	 */
-	public static <T> Set<T> unmodifiable(T...t) {
-		return t.length == 0 ? emptySet() : of(t).unmodifiable();
-	}
-
-	/**
-	 * Convenience method for creating an unmodifiable sert out of the specified collection.
-	 *
-	 * @param c The collection to add.
-	 * @param <T> The element type.
-	 * @return An unmodifiable set, never <jk>null</jk>.
-	 */
-	public static <T> Set<T> unmodifiable(Collection<T> c) {
-		if (c == null || c.isEmpty())
-			return Collections.emptySet();
-		return new ASet<T>().a(c).unmodifiable();
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Appenders
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Adds the value to this set.
-	 *
-	 * @param value The value to add to this set.
-	 * @return This object.
-	 */
-	public ASet<T> append(T value) {
-		add(value);
-		return this;
-	}
-
-	/**
-	 * Adds all the values in the specified array to this set.
-	 *
-	 * @param values The values to add to this set.
-	 * @return This object.
-	 */
-	public ASet<T> append(T...values) {
-		Collections.addAll(this, values);
-		return this;
-	}
-
-	/**
-	 * Adds all the values in the specified collection to this set.
-	 *
-	 * @param values The values to add to this set.
-	 * @return This object.
-	 */
-	public ASet<T> append(Collection<? extends T> values) {
-		addAll(values);
-		return this;
-	}
-
-	/**
-	 * Same as {@link #append(Object)}.
-	 *
-	 * @param value The entry to add to this set.
-	 * @return This object.
-	 */
-	public ASet<T> a(T value) {
-		return append(value);
-	}
-
-	/**
-	 * Same as {@link #append(Object[])}.
-	 *
-	 * @param values The entries to add to this set.
-	 * @return This object.
-	 */
-	public ASet<T> a(T...values) {
-		return append(values);
-	}
-
-	/**
-	 * Same as {@link #append(Collection)}.
-	 *
-	 * @param values The entries to add to this set.
-	 * @return This object.
-	 */
-	public ASet<T> a(Collection<? extends T> values) {
-		return append(values);
-	}
-
-	/**
-	 * Adds a value to this set if the boolean value is <jk>true</jk>
-	 *
-	 * @param flag The boolean value.
-	 * @param value The value to add.
-	 * @return This object.
-	 */
-	public ASet<T> appendIf(boolean flag, T value) {
-		if (flag)
-			a(value);
-		return this;
-	}
-
-	/**
-	 * Adds entries to this set skipping <jk>null</jk> values.
-	 *
-	 * @param values The objects to add to the list.
-	 * @return This object.
-	 */
-	public ASet<T> appendIfNotNull(T...values) {
-		for (T o2 : values)
-			if (o2 != null)
-				a(o2);
-		return this;
-	}
-
-	/**
-	 * Add if predicate matches value.
-	 *
-	 * @param test The predicate to match against.
-	 * @param value The value to add to the list.
-	 * @return This object.
-	 */
-	public ASet<T> appendIf(Predicate<Object> test, T value) {
-		return appendIf(passes(test, value), value);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Other methods
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Returns an unmodifiable view of this set.
-	 *
-	 * @return An unmodifiable view of this set.
-	 */
-	public Set<T> unmodifiable() {
-		return isEmpty() ? emptySet() : unmodifiableSet(this);
-	}
-
-	/**
-	 * Convert the contents of this set into a new array.
-	 *
-	 * @param c The component type of the array.
-	 * @return A new array.
-	 */
-	public <T2> T2[] asArrayOf(Class<T2> c) {
-		return toArray((T2[])Array.newInstance(c, size()));
-	}
-
-	/**
-	 * Convert to a string using the specified serializer.
-	 *
-	 * @param ws The serializer to use to serialize this collection.
-	 * @return This collection serialized to a string.
-	 */
-	public String asString(WriterSerializer ws) {
-		return ws.toString(this);
-	}
-
-	/**
-	 * Convert to Simplified JSON.
-	 *
-	 * @return This collection serialized to a string.
-	 */
-	public String asJson() {
-		return SimpleJsonSerializer.DEFAULT.toString(this);
-	}
-}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASortedMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASortedMap.java
deleted file mode 100644
index c158ec9..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASortedMap.java
+++ /dev/null
@@ -1,254 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.internal;
-
-import static java.util.Collections.*;
-import static org.apache.juneau.internal.ConsumerUtils.*;
-
-import java.util.*;
-import java.util.function.*;
-
-import org.apache.juneau.json.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * A fluent {@link TreeMap}.
- *
- * <p>
- * Provides various convenience methods for creating and populating a sorted map with minimal code.
- *
- * <h5 class='figure'>Examples:</h5>
- * <p class='bjava'>
- * 	<jc>// A map of string key/value pairs.</jc>
- * 	AMap&lt;String,String&gt; <jv>map</jv> = AMap.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>);
- *
- * 	<jc>// Append to map.</jc>
- * 	<jv>map</jv>.a(<js>"baz"</js>, <js>"qux"</js>);
- *
- * 	<jc>// Create an unmodifiable view of this list.</jc>
- * 	Map&lt;String,String&gt; <jv>map2</jv> = <jv>map</jv>.unmodifiable();
- *
- * 	<jc>// Convert to simplified JSON.</jc>
- * 	String <jv>json</jv> = <jv>map</jv>.asString();
- *
- * 	<jc>// Convert to XML.</jc>
- * 	String <jv>json</jv> = <jv>map</jv>.asString(XmlSerializer.<jsf>DEFAULT</jsm>);
- * </p>
- *
- * <ul class='spaced-list'>
- * 	<li class='warn'>This class is not thread safe.
- * </ul>
- *
- * <ul class='seealso'>
- * 	<li class='extlink'>{@source}
- * </ul>
- *
- * @param <K> The key type.
- * @param <V> The value type.
- * @serial exclude
- */
-public class ASortedMap<K,V> extends TreeMap<K,V> {
-
-	private static final long serialVersionUID = 1L;
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Constructors
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Constructor.
-	 */
-	public ASortedMap() {
-		super();
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param c Comparator to use for key comparison.
-	 */
-	public ASortedMap(Comparator<K> c) {
-		super(c);
-	}
-
-	/**
-	 * Copy constructor.
-	 *
-	 * @param copy The map to copy.
-	 */
-	public ASortedMap(Map<K,V> copy) {
-		super(copy == null ? emptyMap() : copy);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Creators
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Creates an empty map.
-	 *
-	 * @return A new empty map.
-	 */
-	public static <K,V> ASortedMap<K,V> create() {
-		return new ASortedMap<>();
-	}
-
-	/**
-	 * Creates a map with one entry.
-	 *
-	 * @param key Entry key.
-	 * @param value Entry value.
-	 * @return A new map with one entry.
-	 */
-	public static <K,V> ASortedMap<K,V> of(K key, V value) {
-		return new ASortedMap<K,V>().a(key, value);
-	}
-
-	/**
-	 * Creates a new map initialized with the specified contents.
-	 *
-	 * @param copy Initialize with these contents.  Can be <jk>null</jk>.
-	 * @return A new map.  Never <jk>null</jk>.
-	 */
-	public static <K,V> ASortedMap<K,V> of(Map<K,V> copy) {
-		return new ASortedMap<>(copy);
-	}
-
-	/**
-	 * Convenience method for creating an unmodifiable list out of the specified collection.
-	 *
-	 * @param c The collection to add.
-	 * @return An unmodifiable list, never <jk>null</jk>.
-	 */
-	public static <K,V> SortedMap<K,V> unmodifiable(Map<K,V> c) {
-		if (c == null || c.isEmpty())
-			return Collections.emptySortedMap();
-		return new ASortedMap<>(c).unmodifiable();
-	}
-
-	/**
-	 * Creates a copy of the collection if it's not <jk>null</jk>.
-	 *
-	 * @param c The initial values.
-	 * @return A new list, or <jk>null</jk> if the collection is <jk>null</jk>.
-	 */
-	public static <K,V> ASortedMap<K,V> nullable(Map<K,V> c) {
-		return c == null ? null : of(c);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Appenders
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Adds an entry to this map.
-	 *
-	 * @param key The key.
-	 * @param value The value.
-	 * @return This object.
-	 */
-	public ASortedMap<K,V> append(K key, V value) {
-		put(key, value);
-		return this;
-	}
-
-	/**
-	 * Appends all the entries in the specified map to this map.
-	 *
-	 * @param values The map to copy.
-	 * @return This object.
-	 */
-	public ASortedMap<K,V> append(Map<K,V> values) {
-		super.putAll(values);
-		return this;
-	}
-
-	/**
-	 * Same as {@link #append(Object,Object)}.
-	 *
-	 * @param key The key.
-	 * @param value The value.
-	 * @return This object.
-	 */
-	public ASortedMap<K,V> a(K key, V value) {
-		return append(key, value);
-	}
-
-	/**
-	 * Same as {@link #append(Map)}.
-	 *
-	 * @param values The map to copy.
-	 * @return This object.
-	 */
-	public ASortedMap<K,V> a(Map<K,V> values) {
-		return append(values);
-	}
-
-	/**
-	 * Add if flag is <jk>true</jk>.
-	 *
-	 * @param flag The flag to check.
-	 * @param key The key.
-	 * @param value The value.
-	 * @return This object.
-	 */
-	public ASortedMap<K,V> appendIf(boolean flag, K key, V value) {
-		if (flag)
-			append(key, value);
-		return this;
-	}
-
-	/**
-	 * Add if predicate matches value.
-	 *
-	 * @param test The predicate to match against.
-	 * @param key The key.
-	 * @param value The value.
-	 * @return This object.
-	 */
-	public ASortedMap<K,V> appendIf(Predicate<Object> test, K key, V value) {
-		return appendIf(passes(test, value), key, value);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Other methods
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Returns an unmodifiable view of this set.
-	 *
-	 * @return An unmodifiable view of this set.
-	 */
-	public SortedMap<K,V> unmodifiable() {
-		return isEmpty() ? emptySortedMap() : unmodifiableSortedMap(this);
-	}
-
-	/**
-	 * Convert to a string using the specified serializer.
-	 *
-	 * @param ws The serializer to use to serialize this collection.
-	 * @return This collection serialized to a string.
-	 */
-	public String asString(WriterSerializer ws) {
-		return ws.toString(this);
-	}
-
-	/**
-	 * Convert to Simplified JSON.
-	 *
-	 * @return This collection serialized to a string.
-	 */
-	public String asJson() {
-		return SimpleJsonSerializer.DEFAULT.toString(this);
-	}
-}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASortedSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASortedSet.java
deleted file mode 100644
index 98ecc62..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ASortedSet.java
+++ /dev/null
@@ -1,272 +0,0 @@
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.internal;
-
-import static java.util.Collections.*;
-import static org.apache.juneau.internal.ConsumerUtils.*;
-
-import java.lang.reflect.*;
-import java.util.*;
-import java.util.function.*;
-
-import org.apache.juneau.json.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * A fluent {@link TreeSet}.
- *
- * <p>
- * Provides various convenience methods for creating and populating a sorted set with minimal code.
- *
- * <h5 class='figure'>Examples:</h5>
- * <p class='bjava'>
- * 	<jc>// A set of strings.</jc>
- * 	ASortedSet&lt;String&gt; <jv>set</jv> = ASortedSet.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>);
- *
- * 	<jc>// Append to set.</jc>
- * 	<jv>set</jv>.a(<js>"baz"</js>).a(<js>"qux"</js>);
- *
- * 	<jc>// Create an unmodifiable view of this set.</jc>
- * 	Set&lt;String&gt; <jv>set2</jv> = <jv>set</jv>.unmodifiable();
- *
- * 	<jc>// Convert it to an array.</jc>
- * 	String[] <jv>array</jv> = <jv>set</jv>.asArrayOf(String.<jk>class</jk>);
- *
- * 	<jc>// Convert to simplified JSON.</jc>
- * 	String <jv>json</jv> = <jv>set</jv>.asString();
- *
- * 	<jc>// Convert to XML.</jc>
- * 	String <jv>json</jv> = <jv>set</jv>.asString(XmlSerializer.<jsf>DEFAULT</jsm>);
- * </p>
- *
- * <ul class='spaced-list'>
- * 	<li class='warn'>This class is not thread safe.
- * </ul>
- *
- * <ul class='seealso'>
- * 	<li class='extlink'>{@source}
- * </ul>
- *
- * @param <T> The entry type.
- * @serial exclude
- */
-@SuppressWarnings({"unchecked"})
-public class ASortedSet<T> extends TreeSet<T> {
-
-	private static final long serialVersionUID = 1L;
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Constructors
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Constructor.
-	 */
-	public ASortedSet() {}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param c Comparator.
-	 */
-	public ASortedSet(Comparator<T> c) {
-		super(c);
-	}
-
-	/**
-	 * Copy constructor.
-	 *
-	 * @param c Initial contents.  Can be <jk>null</jk>.
-	 */
-	public ASortedSet(Collection<T> c) {
-		super(c == null ? emptySet() : c);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Creators
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Convenience method for creating a list of objects.
-	 *
-	 * @return A new list.
-	 */
-	public static <T> ASortedSet<T> create() {
-		return new ASortedSet<>();
-	}
-
-	/**
-	 * Convenience method for creating a list of objects.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	@SafeVarargs
-	public static <T> ASortedSet<T> of(T...values) {
-		return new ASortedSet<T>().a(values);
-	}
-
-	/**
-	 * Convenience method for creating a list of objects.
-	 *
-	 * @param values The initial values.
-	 * @return A new list.
-	 */
-	public static <T> ASortedSet<T> of(Collection<T> values) {
-		return new ASortedSet<T>().a(values);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Appenders
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Adds the value to this set.
-	 *
-	 * @param value The value to add to this set.
-	 * @return This object.
-	 */
-	public ASortedSet<T> append(T value) {
-		add(value);
-		return this;
-	}
-
-	/**
-	 * Adds all the values in the specified array to this set.
-	 *
-	 * @param values The values to add to this set.
-	 * @return This object.
-	 */
-	public ASortedSet<T> append(T...values) {
-		Collections.addAll(this, values);
-		return this;
-	}
-
-	/**
-	 * Adds all the values in the specified collection to this set.
-	 *
-	 * @param values The values to add to this set.
-	 * @return This object.
-	 */
-	public ASortedSet<T> append(Collection<? extends T> values) {
-		addAll(values);
-		return this;
-	}
-
-	/**
-	 * Same as {@link #append(Object)}.
-	 *
-	 * @param value The entry to add to this set.
-	 * @return This object.
-	 */
-	public ASortedSet<T> a(T value) {
-		return append(value);
-	}
-
-	/**
-	 * Same as {@link #append(Object[])}.
-	 *
-	 * @param values The entries to add to this set.
-	 * @return This object.
-	 */
-	public ASortedSet<T> a(T...values) {
-		return append(values);
-	}
-
-	/**
-	 * Same as {@link #append(Collection)}.
-	 *
-	 * @param values The entries to add to this set.
-	 * @return This object.
-	 */
-	public ASortedSet<T> a(Collection<? extends T> values) {
-		return append(values);
-	}
-
-	/**
-	 * Adds a value to this set if the boolean value is <jk>true</jk>
-	 *
-	 * @param flag The boolean value.
-	 * @param value The value to add.
-	 * @return This object.
-	 */
-	public ASortedSet<T> appendIf(boolean flag, T value) {
-		if (flag)
-			a(value);
-		return this;
-	}
-
-	/**
-	 * Adds entries to this set skipping <jk>null</jk> values.
-	 *
-	 * @param values The objects to add to the list.
-	 * @return This object.
-	 */
-	public ASortedSet<T> appendIfNotNull(T...values) {
-		for (T o2 : values)
-			if (o2 != null)
-				a(o2);
-		return this;
-	}
-
-	/**
-	 * Add if predicate matches.
-	 *
-	 * @param test The predicate to match against.
-	 * @param value The value to add if the predicate matches.
-	 * @return This object.
-	 */
-	public ASortedSet<T> appendIf(Predicate<Object> test, T value) {
-		return appendIf(passes(test, value), value);
-	}
-
-	//------------------------------------------------------------------------------------------------------------------
-	// Other methods
-	//------------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * Returns an unmodifiable view of this set.
-	 *
-	 * @return An unmodifiable view of this set.
-	 */
-	public SortedSet<T> unmodifiable() {
-		return isEmpty() ? emptySortedSet() : unmodifiableSortedSet(this);
-	}
-
-	/**
-	 * Convert the contents of this set into a new array.
-	 *
-	 * @param c The component type of the array.
-	 * @return A new array.
-	 */
-	public <T2> T2[] asArrayOf(Class<T2> c) {
-		return toArray((T2[])Array.newInstance(c, size()));
-	}
-
-	/**
-	 * Convert to a string using the specified serializer.
-	 *
-	 * @param ws The serializer to use to serialize this collection.
-	 * @return This collection serialized to a string.
-	 */
-	public String asString(WriterSerializer ws) {
-		return ws.toString(this);
-	}
-
-	/**
-	 * Convert to Simplified JSON.
-	 *
-	 * @return This collection serialized to a string.
-	 */
-	public String asJson() {
-		return SimpleJsonSerializer.DEFAULT.toString(this);
-	}
-}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayBuilder.java
index c4937c5..eaebefb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayBuilder.java
@@ -31,7 +31,7 @@ import java.util.function.*;
  *
  * @param <T> The array element type.
  */
-public class ArrayBuilder<T> {
+public final class ArrayBuilder<T> {
 
 	//-----------------------------------------------------------------------------------------------------------------
 	// Static
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
index da763db..4e62ba6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
@@ -14,6 +14,7 @@ package org.apache.juneau.internal;
 
 import java.lang.reflect.*;
 import java.util.*;
+import java.util.function.*;
 
 /**
  * Utility methods for collections.
@@ -148,6 +149,278 @@ public final class CollectionUtils {
 	}
 
 	/**
+	 * Convenience method for creating an {@link ArrayList}.
+	 *
+	 * @param values The values to initialize the list with.
+	 * @return A new modifiable list.
+	 */
+	@SafeVarargs
+	public static <T> ArrayList<T> list(T...values) {
+		ArrayList<T> l = new ArrayList<>(values.length);
+		for (T v : values)
+			l.add(v);
+		return l;
+	}
+
+	/**
+	 * Creates an {@link ArrayList} copy from a collection.
+	 *
+	 * @param value The collection to copy from.
+	 * @return A new modifiable list.
+	 */
+	public static <T> ArrayList<T> listFrom(Collection<T> value) {
+		ArrayList<T> l = new ArrayList<>();
+		value.forEach(x -> l.add(x));
+		return l;
+	}
+
+	/**
+	 * Convenience method for creating a {@link LinkedHashSet}.
+	 *
+	 * @param values The values to initialize the set with.
+	 * @return A new modifiable set.
+	 */
+	@SafeVarargs
+	public static <T> LinkedHashSet<T> set(T...values) {
+		LinkedHashSet<T> l = new LinkedHashSet<>();
+		for (T v : values)
+			l.add(v);
+		return l;
+	}
+
+	/**
+	 * Convenience method for creating an unmodifiable {@link LinkedHashSet}.
+	 *
+	 * @param values The values to initialize the set with.
+	 * @return A new modifiable set.
+	 */
+	@SafeVarargs
+	public static <T> Set<T> unmodifiableSet(T...values) {
+		return unmodifiable(set(values));
+	}
+
+	/**
+	 * Convenience method for creating a {@link TreeSet}.
+	 *
+	 * @param values The values to initialize the set with.
+	 * @return A new modifiable set.
+	 */
+	@SafeVarargs
+	public static <T> TreeSet<T> sortedSet(T...values) {
+		TreeSet<T> l = new TreeSet<>();
+		for (T v : values)
+			l.add(v);
+		return l;
+	}
+
+	/**
+	 * Convenience method for creating a {@link LinkedHashMap}.
+	 *
+	 * @return A new modifiable map.
+	 */
+	public static <K,V> LinkedHashMap<K,V> map() {
+		LinkedHashMap<K,V> m = new LinkedHashMap<>();
+		return m;
+	}
+
+	/**
+	 * Convenience method for creating a {@link LinkedHashMap}.
+	 *
+	 * @param k1 Key 1.
+	 * @param v1 Value 1.
+	 * @return A new modifiable map.
+	 */
+	public static <K,V> LinkedHashMap<K,V> map(K k1, V v1) {
+		LinkedHashMap<K,V> m = new LinkedHashMap<>();
+		m.put(k1, v1);
+		return m;
+	}
+
+	/**
+	 * Convenience method for creating a {@link LinkedHashMap}.
+	 *
+	 * @param k1 Key 1.
+	 * @param v1 Value 1.
+	 * @param k2 Key 2.
+	 * @param v2 Value 2.
+	 * @return A new modifiable map.
+	 */
+	public static <K,V> LinkedHashMap<K,V> map(K k1, V v1, K k2, V v2) {
+		LinkedHashMap<K,V> m = new LinkedHashMap<>();
+		m.put(k1, v1);
+		m.put(k2, v2);
+		return m;
+	}
+
+	/**
+	 * Convenience method for creating a {@link LinkedHashMap}.
+	 *
+	 * @param k1 Key 1.
+	 * @param v1 Value 1.
+	 * @param k2 Key 2.
+	 * @param v2 Value 2.
+	 * @param k3 Key 3.
+	 * @param v3 Value 3.
+	 * @return A new modifiable map.
+	 */
+	public static <K,V> LinkedHashMap<K,V> map(K k1, V v1, K k2, V v2, K k3, V v3) {
+		LinkedHashMap<K,V> m = new LinkedHashMap<>();
+		m.put(k1, v1);
+		m.put(k2, v2);
+		m.put(k3, v3);
+		return m;
+	}
+
+	/**
+	 * Convenience method for copying a list.
+	 *
+	 * @param value The list to copy.
+	 * @return A new modifiable list.
+	 */
+	public static <T> ArrayList<T> copyOf(List<T> value) {
+		if (value == null)
+			return null;
+		ArrayList<T> l2 = new ArrayList<>();
+		value.forEach(x -> l2.add(x));
+		return l2;
+	}
+
+	/**
+	 * Convenience method for creating an {@link ArrayList} and sorting it.
+	 *
+	 * @param values The values to initialize the list with.
+	 * @return A new modifiable list.
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	@SafeVarargs
+	public static <T> ArrayList<T> sortedList(T...values) {
+		ArrayList<T> l = list(values);
+		Collections.sort((List<Comparable>) l);
+		return l;
+	}
+
+	/**
+	 * Convenience method for creating an {@link ArrayList} and sorting it.
+	 *
+	 * @param comparator The comparator to use to sort the list.
+	 * @param values The values to initialize the list with.
+	 * @return A new modifiable list.
+	 */
+	public static <T> ArrayList<T> sortedList(Comparator<T> comparator, T[] values) {
+		ArrayList<T> l = list(values);
+		Collections.sort(l, comparator);
+		return l;
+	}
+
+	/**
+	 * Convenience method for creating an {@link ArrayList} and sorting it.
+	 *
+	 * @param comparator The comparator to use to sort the list.
+	 * @param value The values to initialize the list with.
+	 * @return A new modifiable list.
+	 */
+	public static <T> ArrayList<T> sortedList(Comparator<T> comparator, Collection<T> value) {
+		ArrayList<T> l = listFrom(value);
+		Collections.sort(l, comparator);
+		return l;
+	}
+
+	/**
+	 * Wraps the specified list in {@link Collections#unmodifiableList(List)}.
+	 *
+	 * @param value The list to wrap.
+	 * @return The wrapped list.
+	 */
+	public static <T> List<T> unmodifiable(List<T> value) {
+		return value == null ? null: Collections.unmodifiableList(value);
+	}
+
+	/**
+	 * Wraps the specified set in {@link Collections#unmodifiableSet(Set)}.
+	 *
+	 * @param value The set to wrap.
+	 * @return The wrapped set.
+	 */
+	public static <T> Set<T> unmodifiable(Set<T> value) {
+		return value == null ? null: Collections.unmodifiableSet(value);
+	}
+
+	/**
+	 * Wraps the specified map in {@link Collections#unmodifiableMap(Map)}.
+	 *
+	 * @param value The map to wrap.
+	 * @return The wrapped map.
+	 */
+	public static <K,V> Map<K,V> unmodifiable(Map<K,V> value) {
+		return value == null ? null: Collections.unmodifiableMap(value);
+	}
+
+	/**
+	 * Converts the specified collection to an array.
+	 *
+	 * @param value The collection to convert.
+	 * @return A new array.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T[] array(Collection<T> value) {
+		return array(value, (Class<T>)value.getClass().getComponentType());
+	}
+
+	/**
+	 * Converts the specified collection to an array.
+	 *
+	 * @param value The collection to convert.
+	 * @param componentType The component type of the array.
+	 * @return A new array.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T[] array(Collection<T> value, Class<T> componentType) {
+		if (value == null)
+			return null;
+		T[] array = (T[])Array.newInstance(componentType, value.size());
+		return value.toArray(array);
+	}
+
+	/**
+	 * Iterates the specified list in reverse order.
+	 *
+	 * @param value The list to iterate.
+	 * @param action The action to perform.
+	 */
+	public static <T> void forEachReverse(List<T> value, Consumer<T> action) {
+		if (value instanceof ArrayList) {
+			for (int i = value.size()-1; i >= 0; i--)
+				action.accept(value.get(i));
+		} else {
+			ListIterator<T> i = value.listIterator(value.size());
+			while (i.hasPrevious())
+				action.accept(i.previous());
+		}
+	}
+
+	/**
+	 * Iterates the specified array in reverse order.
+	 *
+	 * @param value The array to iterate.
+	 * @param action The action to perform.
+	 */
+	public static <T> void forEachReverse(T[] value, Consumer<T> action) {
+		for (int i = value.length-1; i >= 0; i--)
+			action.accept(value[i]);
+	}
+
+	/**
+	 * Adds all the specified values to the specified collection.
+	 *
+	 * @param value The collection to add to.
+	 * @param entries The entries to add.
+	 */
+	@SafeVarargs
+	public static <T> void addAll(Collection<T> value, T...entries) {
+		Collections.addAll(value, entries);
+	}
+
+	/**
 	 * Returns the last entry in a list.
 	 *
 	 * @param <T> The element type.
@@ -172,4 +445,23 @@ public final class CollectionUtils {
 			return null;
 		return l[l.length-1];
 	}
+
+	/**
+	 * Returns an optional of the specified value.
+	 *
+	 * @param value The value.
+	 * @return A new Optional.
+	 */
+	public static <T> Optional<T> optional(T value) {
+		return Optional.ofNullable(value);
+	}
+
+	/**
+	 * Returns an empty {@link Optional}.
+	 *
+	 * @return An empty {@link Optional}.
+	 */
+	public static <T> Optional<T> empty() {
+		return Optional.empty();
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ListBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ListBuilder.java
index 9cc674b..edc738b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ListBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ListBuilder.java
@@ -31,7 +31,26 @@ import org.apache.juneau.parser.*;
  *
  * @param <E> Element type.
  */
-public class ListBuilder<E> {
+public final class ListBuilder<E> {
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Static
+	//-----------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * Static creator.
+	 *
+	 * @param elementType The element type.
+	 * @param elementTypeArgs Optional element type arguments.
+	 * @return A new builder.
+	 */
+	public static <E> ListBuilder<E> create(Class<E> elementType, Type...elementTypeArgs) {
+		return new ListBuilder<>(elementType, elementTypeArgs);
+	}
+
+	//-----------------------------------------------------------------------------------------------------------------
+	// Instance
+	//-----------------------------------------------------------------------------------------------------------------
 
 	private List<E> list;
 	private boolean unmodifiable = false, sparse = false;
@@ -235,4 +254,17 @@ public class ListBuilder<E> {
 		}
 		return this;
 	}
+
+	/**
+	 * Appends a value to this list of the flag is true.
+	 *
+	 * @param flag The flag.
+	 * @param value The value.
+	 * @return This object.
+	 */
+	public ListBuilder<E> addIf(boolean flag, E value) {
+		if (flag)
+			add(value);
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MapBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MapBuilder.java
index eaaaecb..8b7a4f1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MapBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/MapBuilder.java
@@ -33,7 +33,7 @@ import org.apache.juneau.parser.*;
  * @param <K> Key type.
  * @param <V> Value type.
  */
-public class MapBuilder<K,V> {
+public final class MapBuilder<K,V> {
 
 	private Map<K,V> map;
 	private boolean unmodifiable = false, sparse = false;
@@ -224,4 +224,19 @@ public class MapBuilder<K,V> {
 		}
 		return this;
 	}
+
+	/**
+	 * Adds a list of key/value pairs to this map.
+	 *
+	 * @param pairs The pairs to add.
+	 * @return This object.
+	 */
+	@SuppressWarnings("unchecked")
+	public MapBuilder<K,V> addPairs(Object...pairs) {
+		if (pairs.length % 2 != 0)
+			throw runtimeException("Odd number of parameters passed into AMap.ofPairs()");
+		for (int i = 0; i < pairs.length; i+=2)
+			add((K)pairs[i], (V)pairs[i+1]);
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReverseIterable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReverseIterable.java
deleted file mode 100644
index a601101..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReverseIterable.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file		*
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance			*
-// * with the License.  You may obtain a copy of the License at															  *
-// *																														 *
-// *  http://www.apache.org/licenses/LICENSE-2.0																			 *
-// *																														 *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the		*
-// * specific language governing permissions and limitations under the License.											  *
-// ***************************************************************************************************************************
-package org.apache.juneau.internal;
-
-import java.util.*;
-
-/**
- * Implements a reversed iteration {@link Iterable} without altering the underlying list.
- *
- * <ul class='seealso'>
- * 	<li class='extlink'>{@source}
- * </ul>
- *
- * @param <T> The entry type.
- */
-public class ReverseIterable<T> implements Iterable<T> {
-	private final List<T> list;
-
-	/**
-	 * Constructor
-	 *
-	 * @param list The original list.
-	 */
-	public ReverseIterable(List<T> list) {
-		this.list = list;
-	}
-
-	/**
-	 * Convenience method for constructing instances.
-	 *
-	 * @param list The original list.
-	 * @return A new {@link ReverseIterable}.
-	 */
-	public static <T> ReverseIterable<T> of(List<T> list) {
-		return new ReverseIterable<>(list);
-	}
-
-	/**
-	 * Convenience method for constructing instances.
-	 *
-	 * @param list The original list.
-	 * @return A new {@link ReverseIterable}.
-	 */
-	public static <T> ReverseIterable<T> of(T[] list) {
-		return new ReverseIterable<>(Arrays.asList(list));
-	}
-
-	@Override
-	public Iterator<T> iterator() {
-		final ListIterator<T> i = list.listIterator(list.size());
-
-		return new Iterator<T>() {
-			@Override
-			public boolean hasNext() { return i.hasPrevious(); }
-			@Override
-			public T next() { return i.previous(); }
-			@Override
-			public void remove() { i.remove(); }
-		};
-	}
-}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SetBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SetBuilder.java
index 4268df0..624254d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SetBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SetBuilder.java
@@ -18,7 +18,6 @@ import static org.apache.juneau.internal.StringUtils.*;
 
 import java.lang.reflect.*;
 import java.util.*;
-
 import org.apache.juneau.collections.*;
 import org.apache.juneau.parser.*;
 
@@ -31,7 +30,7 @@ import org.apache.juneau.parser.*;
  *
  * @param <E> Element type.
  */
-public class SetBuilder<E> {
+public final class SetBuilder<E> {
 
 	private Set<E> set;
 	private boolean unmodifiable, sparse;
@@ -238,4 +237,17 @@ public class SetBuilder<E> {
 		}
 		return this;
 	}
+
+	/**
+	 * Adds a value to this set if the specified flag is true.
+	 *
+	 * @param flag The flag.
+	 * @param value The value.
+	 * @return This object.
+	 */
+	public SetBuilder<E> addIf(boolean flag, E value) {
+		if (flag)
+			add(value);
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
index fb827a1..49800ad 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
@@ -547,6 +547,16 @@ public final class StringUtils {
 	}
 
 	/**
+	 * Same as {@link #split(String)} but consumes the tokens instead of creating an array.
+	 *
+	 * @param s The string to split.
+	 * @param consumer The consumer of the tokens.
+	 */
+	public static void split(String s, Consumer<String> consumer) {
+		split(s, ',', consumer);
+	}
+
+	/**
 	 * Splits a character-delimited string into a string array.
 	 *
 	 * <p>
@@ -574,6 +584,41 @@ public final class StringUtils {
 	}
 
 	/**
+	 * Same as {@link #split(String,char)} but consumes the tokens instead of creating an array.
+	 *
+	 * @param s The string to split.
+	 * @param c The character to split on.
+	 * @param consumer The consumer of the tokens.
+	 */
+	public static void split(String s, char c, Consumer<String> consumer) {
+		AsciiSet escapeChars = getEscapeSet(c);
+
+		if (s == null)
+			return;
+		if (isEmpty(s))
+			return;
+		if (s.indexOf(c) == -1) {
+			consumer.accept(s);
+			return;
+		}
+
+		int x1 = 0, escapeCount = 0;
+		for (int i = 0; i < s.length(); i++) {
+			if (s.charAt(i) == '\\') escapeCount++;
+			else if (s.charAt(i)==c && escapeCount % 2 == 0) {
+				String s2 = s.substring(x1, i);
+				String s3 = unEscapeChars(s2, escapeChars);
+				consumer.accept(s3.trim());
+				x1 = i+1;
+			}
+			if (s.charAt(i) != '\\') escapeCount = 0;
+		}
+		String s2 = s.substring(x1);
+		String s3 = unEscapeChars(s2, escapeChars);
+		consumer.accept(s3.trim());
+	}
+
+	/**
 	 * Same as {@link #split(String, char)} but limits the number of tokens returned.
 	 *
 	 * @param s The string to split.  Can be <jk>null</jk>.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SystemEnv.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SystemEnv.java
index 56d035d..76ab448 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SystemEnv.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SystemEnv.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.internal;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.nio.charset.*;
@@ -57,7 +58,7 @@ public class SystemEnv {
 		String s = System.getProperty(name);
 		if (s == null)
 			s = System.getenv(envName(name));
-		return Optional.ofNullable(s);
+		return optional(s);
 	}
 
 	@SuppressWarnings({ "unchecked", "rawtypes" })
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
index 7a232fd..03e44cf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.json;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
@@ -284,7 +285,7 @@ public final class JsonParserSession extends ReaderParserSession {
 			sType = eType;
 
 		if (sType.isOptional())
-			return (T)Optional.ofNullable(parseAnything(eType.getElementType(), r, outer, pMeta));
+			return (T)optional(parseAnything(eType.getElementType(), r, outer, pMeta));
 
 		setCurrentClass(sType);
 		String wrapperAttr = getJsonClassMeta(sType).getWrapperAttr();
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 a7c3ed6..cbafc6f 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
@@ -880,9 +880,7 @@ public class JsonSchemaGenerator extends BeanTraverseContext implements JsonSche
 		ignoreTypes = builder.ignoreTypes == null ? emptySet() : new TreeSet<>(builder.ignoreTypes);
 
 		Set<Pattern> ignoreTypePatterns = new LinkedHashSet<>();
-		for (String s : ignoreTypes)
-			for (String s2 : split(s))
-				ignoreTypePatterns.add(Pattern.compile(s2.replace(".", "\\.").replace("*", ".*")));
+		ignoreTypes.forEach(y -> split(y, x -> ignoreTypePatterns.add(Pattern.compile(x.replace(".", "\\.").replace("*", ".*")))));
 		this.ignoreTypePatterns = ignoreTypePatterns;
 
 		try {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/SchemaUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/SchemaUtils.java
index e89e626..ce4d743 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/SchemaUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/SchemaUtils.java
@@ -14,6 +14,7 @@ package org.apache.juneau.jsonschema;
 
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -89,7 +90,7 @@ public class SchemaUtils {
 		String s = joinnl(ss);
 		if (s.isEmpty())
 			return null;
-		Set<String> set = ASet.of();
+		Set<String> set = set();
 		for (Object o : StringUtils.parseListOrCdl(s))
 			set.add(o.toString());
 		return set;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
index 980cc9e..406284b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
@@ -12,10 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jsonschema;
 
+import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import java.util.*;
 
-import org.apache.juneau.internal.*;
-
 /**
  * Represents possible values for JSONSCHEMA_addExamplesTo and JSONSCHEMA_addDescriptionsTo.
  *
@@ -70,9 +70,8 @@ public enum TypeCategory {
 	public static Set<TypeCategory> parse(String s) {
 		if (s == null || s.isEmpty())
 			return Collections.emptySet();
-		Set<TypeCategory> set = new LinkedHashSet<>();
-		for (String ss : StringUtils.split(s))
-			set.add(valueOf(ss.toUpperCase()));
+		Set<TypeCategory> set = set();
+		split(s, x -> set.add(valueOf(x.toUpperCase())));
 		return set;
 	}
 
@@ -85,9 +84,8 @@ public enum TypeCategory {
 	public static TypeCategory[] parseArray(String s) {
 		if (s == null || s.isEmpty())
 			return new TypeCategory[0];
-		List<TypeCategory> x = new ArrayList<>();
-		for (String ss : StringUtils.split(s))
-			x.add(valueOf(ss.toUpperCase()));
-		return x.toArray(new TypeCategory[x.size()]);
+		List<TypeCategory> list = list();
+		split(s, x -> list.add(valueOf(x.toUpperCase())));
+		return list.toArray(new TypeCategory[list.size()]);
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
index ee50d86..342a529 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.msgpack;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.msgpack.DataType.*;
 
 import java.io.IOException;
@@ -216,7 +217,7 @@ public final class MsgPackParserSession extends InputStreamParserSession {
 			sType = eType;
 
 		if (sType.isOptional())
-			return (T)Optional.ofNullable(parseAnything(eType.getElementType(), is, outer, pMeta));
+			return (T)optional(parseAnything(eType.getElementType(), is, outer, pMeta));
 
 		setCurrentClass(sType);
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
index 83657ba..d386d1b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserSession.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.oapi;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.httppart.HttpPartCollectionFormat.*;
 import static org.apache.juneau.httppart.HttpPartDataType.*;
@@ -252,7 +253,7 @@ public class OpenApiParserSession extends UonParserSession {
 		schema.validateOutput(t, ctx.getBeanContext());
 
 		if (isOptional)
-			t = (T)Optional.ofNullable(t);
+			t = (T)optional(t);
 
 		return t;
 	}
@@ -282,7 +283,7 @@ public class OpenApiParserSession extends UonParserSession {
 				sType = type;
 
 			if (sType.isOptional())
-				return (T)Optional.ofNullable(parseInner(partType, schema, in, sType.getElementType()));
+				return (T)optional(parseInner(partType, schema, in, sType.getElementType()));
 
 			HttpPartDataType t = schema.getType(sType);
 			if (partType == null)
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 8fd7b11..4f87446 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
@@ -12,8 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.parser;
 
-import static java.util.Optional.*;
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
+
 import java.io.*;
 import java.lang.annotation.*;
 import java.lang.reflect.*;
@@ -1019,7 +1021,7 @@ public class Parser extends BeanContextable {
 		unbuffered = builder.unbuffered;
 		listener = builder.listener;
 
-		String[] _consumes = StringUtils.split(ofNullable(consumes).orElse(""), ',');
+		String[] _consumes = split(optional(consumes).orElse(""));
 		this.consumesArray = new MediaType[_consumes.length];
 		for (int i = 0; i < _consumes.length; i++) {
 			this.consumesArray[i] = MediaType.of(_consumes[i]);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
index 42ddfe4..590f012 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.parser;
 
 import static org.apache.juneau.http.HttpHeaders.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static java.util.Arrays.*;
@@ -154,7 +155,7 @@ public final class ParserSet {
 		 */
 		protected Builder(BeanStore beanStore) {
 			super(ParserSet.class, beanStore);
-			this.entries = AList.create();
+			this.entries = list();
 		}
 
 		/**
@@ -164,7 +165,7 @@ public final class ParserSet {
 		 */
 		protected Builder(ParserSet copyFrom) {
 			super(copyFrom.getClass(), BeanStore.INSTANCE);
-			this.entries = AList.create().append(asList(copyFrom.entries));
+			this.entries = list((Object[])copyFrom.entries);
 		}
 
 		/**
@@ -178,7 +179,7 @@ public final class ParserSet {
 		protected Builder(Builder copyFrom) {
 			super(copyFrom);
 			bcBuilder = copyFrom.bcBuilder == null ? null : copyFrom.bcBuilder.copy();
-			entries = AList.create();
+			entries = list();
 			copyFrom.entries.stream().map(x -> copyBuilder(x)).forEach(x -> entries.add(x));
 		}
 
@@ -498,8 +499,8 @@ public final class ParserSet {
 
 		this.entries = builder.entries.stream().map(x -> build(x)).toArray(Parser[]::new);
 
-		AList<MediaType> lmt = AList.create();
-		AList<Parser> l = AList.create();
+		List<MediaType> lmt = list();
+		List<Parser> l = list();
 		for (Parser e : entries) {
 			for (MediaType m: e.getMediaTypes()) {
 				lmt.add(m);
@@ -507,8 +508,8 @@ public final class ParserSet {
 			}
 		}
 
-		this.mediaTypes = lmt.unmodifiable();
-		this.mediaTypeParsers = l.unmodifiable();
+		this.mediaTypes = unmodifiable(lmt);
+		this.mediaTypeParsers = unmodifiable(l);
 	}
 
 	private Parser build(Object o) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SearchArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SearchArgs.java
index 03278d4..79d95b9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SearchArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SearchArgs.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.pojotools;
 
+import static org.apache.juneau.internal.StringUtils.*;
+
 import java.util.*;
 
 import org.apache.juneau.internal.*;
@@ -36,7 +38,7 @@ public class SearchArgs {
 	 * @param searchArgs Search arguments.
 	 */
 	public SearchArgs(String searchArgs) {
-		this(Arrays.asList(StringUtils.split(searchArgs, ',')));
+		this(Arrays.asList(split(searchArgs)));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
index dd7f68d..f38b378 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.reflect;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 
 import java.lang.annotation.*;
@@ -314,11 +315,11 @@ public class AnnotationInfo<T extends Annotation> {
 				try {
 					V v = (V)m.invoke(a);
 					if (passes(test, v))
-						return Optional.of(v);
+						return optional(v);
 				} catch (Exception e) {
 					e.printStackTrace(); // Shouldn't happen.
 				}
 			}
-		return Optional.empty();
+		return empty();
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index f8cf478..f7cef84 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 
 import java.lang.annotation.*;
@@ -463,7 +464,7 @@ public final class ClassInfo {
 
 	/**
 	 * Returns all methods declared on this class.
-	 * 
+	 *
 	 * @return
 	 * 	All methods declared on this class.
 	 * 	<br>Results are ordered alphabetically.
@@ -665,7 +666,7 @@ public final class ClassInfo {
 	/**
 	 * Returns all the constructors defined on this class.
 	 *
-	 * @return 
+	 * @return
 	 * 	All constructors defined on this class.
 	 * 	<br>List is unmodifiable.
 	 */
@@ -841,7 +842,7 @@ public final class ClassInfo {
 	 * <p>
 	 * 	Results are ordered parent-to-child, and then alphabetical per class.
 	 *
-	 * @return 
+	 * @return
 	 * 	All declared fields on this class.
 	 * 	<br>List is unmodifiable.
 	 */
@@ -1606,25 +1607,26 @@ public final class ClassInfo {
 		pmap2.put(Double.class, double.class);
 	}
 
-	private static final Map<Class<?>,Object> primitiveDefaultMap = Collections.unmodifiableMap(
-		AMap.<Class<?>,Object>create()
-			.a(Boolean.TYPE, false)
-			.a(Character.TYPE, (char)0)
-			.a(Short.TYPE, (short)0)
-			.a(Integer.TYPE, 0)
-			.a(Long.TYPE, 0l)
-			.a(Float.TYPE, 0f)
-			.a(Double.TYPE, 0d)
-			.a(Byte.TYPE, (byte)0)
-			.a(Boolean.class, false)
-			.a(Character.class, (char)0)
-			.a(Short.class, (short)0)
-			.a(Integer.class, 0)
-			.a(Long.class, 0l)
-			.a(Float.class, 0f)
-			.a(Double.class, 0d)
-			.a(Byte.class, (byte)0)
-	);
+	@SuppressWarnings("rawtypes")
+	private static final Map<Class,Object> primitiveDefaultMap = 
+		mapBuilder(Class.class,Object.class).unmodifiable()
+			.add(Boolean.TYPE, false)
+			.add(Character.TYPE, (char)0)
+			.add(Short.TYPE, (short)0)
+			.add(Integer.TYPE, 0)
+			.add(Long.TYPE, 0l)
+			.add(Float.TYPE, 0f)
+			.add(Double.TYPE, 0d)
+			.add(Byte.TYPE, (byte)0)
+			.add(Boolean.class, false)
+			.add(Character.class, (char)0)
+			.add(Short.class, (short)0)
+			.add(Integer.class, 0)
+			.add(Long.class, 0l)
+			.add(Float.class, 0f)
+			.add(Double.class, 0d)
+			.add(Byte.class, (byte)0)
+			.build();
 
 	//-----------------------------------------------------------------------------------------------------------------
 	// Labels
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
index 4d7fa2e..7c33384 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.reflect;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 
 import java.lang.annotation.*;
@@ -146,7 +147,7 @@ public final class ParamInfo {
 	public <A extends Annotation> A getAnnotation(Class<A> type) {
 		Optional<Annotation> o = annotationMap().get(type);
 		if (o == null) {
-			o = Optional.ofNullable(findAnnotation(type));
+			o = optional(findAnnotation(type));
 			annotationMap().put(type, o);
 		}
 		return o.isPresent() ? (A)o.get() : null;
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 70536a8..8a8c246 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
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.serializer;
 
-import static java.util.Optional.*;
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
 import java.lang.annotation.*;
@@ -1330,8 +1331,8 @@ public class Serializer extends BeanTraverseContext {
 		listener = builder.listener;
 
 		this.producesMediaType = MediaType.of(produces);
-		this.acceptRanges = ofNullable(accept).map(MediaRanges::of).orElseGet(()->MediaRanges.of(produces));
-		this.acceptMediaTypes = ofNullable(builder.accept).map(x -> StringUtils.split(x, ',')).map(MediaType::ofAll).orElseGet(()->new MediaType[] {this.producesMediaType});
+		this.acceptRanges = optional(accept).map(MediaRanges::of).orElseGet(()->MediaRanges.of(produces));
+		this.acceptMediaTypes = optional(builder.accept).map(x -> split(x)).map(MediaType::ofAll).orElseGet(()->new MediaType[] {this.producesMediaType});
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
index bc0a954..5e10fbe 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.internal.ThrowableUtils.*;
 import static java.util.Arrays.*;
 import static java.util.Collections.*;
 import static java.util.stream.Collectors.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 
 import java.util.*;
@@ -153,7 +154,7 @@ public final class SerializerSet {
 		 */
 		protected Builder(BeanStore beanStore) {
 			super(SerializerSet.class, beanStore);
-			this.entries = AList.create();
+			this.entries = list();
 		}
 
 		/**
@@ -163,7 +164,7 @@ public final class SerializerSet {
 		 */
 		protected Builder(SerializerSet copyFrom) {
 			super(copyFrom.getClass());
-			this.entries = AList.create().append(asList(copyFrom.entries));
+			this.entries = list((Object[])copyFrom.entries);
 		}
 
 		/**
@@ -177,7 +178,7 @@ public final class SerializerSet {
 		protected Builder(Builder copyFrom) {
 			super(copyFrom);
 			bcBuilder = copyFrom.bcBuilder == null ? null : copyFrom.bcBuilder.copy();
-			entries = AList.create();
+			entries = list();
 			copyFrom.entries.stream().map(x -> copyBuilder(x)).forEach(x -> entries.add(x));
 		}
 
@@ -499,9 +500,9 @@ public final class SerializerSet {
 
 		this.entries = builder.entries.stream().map(x -> build(x)).toArray(Serializer[]::new);
 
-		AList<MediaRange> lmtr = AList.create();
-		ASet<MediaType> lmt = ASet.of();
-		AList<Serializer> l = AList.create();
+		List<MediaRange> lmtr = list();
+		Set<MediaType> lmt = set();
+		List<Serializer> l = list();
 		for (Serializer e : entries) {
 			for (MediaRange m: e.getMediaTypeRanges().getRanges()) {
 				lmtr.add(m);
@@ -511,9 +512,9 @@ public final class SerializerSet {
 				lmt.add(mt);
 		}
 
-		this.mediaRanges = lmtr.unmodifiable();
-		this.mediaTypesList = AList.of(lmt).unmodifiable();
-		this.mediaTypeRangeSerializers = l.unmodifiable();
+		this.mediaRanges = unmodifiable(lmtr);
+		this.mediaTypesList = unmodifiable(listFrom(lmt));
+		this.mediaTypeRangeSerializers = unmodifiable(l);
 	}
 
 	private Serializer build(Object o) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
index 738ce4d..231b1b4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
@@ -12,9 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.serializer;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.collections.OMap.*;
-import static java.util.Optional.*;
 
 import java.lang.annotation.*;
 import java.lang.reflect.*;
@@ -1002,7 +1002,7 @@ public class WriterSerializer extends Serializer {
 		fileCharset = builder.fileCharset;
 		useWhitespace = builder.useWhitespace;
 
-		quoteCharValue = ofNullable(quoteCharOverride).orElse(ofNullable(quoteChar).orElse('"'));
+		quoteCharValue = optional(quoteCharOverride).orElse(optional(quoteChar).orElse('"'));
 	}
 
 	@Override /* Context */
@@ -1110,7 +1110,7 @@ public class WriterSerializer extends Serializer {
 	 * 	The character used for quoting attributes and values.
 	 */
 	protected Character quoteChar() {
-		return ofNullable(quoteCharOverride).orElse(quoteChar);
+		return optional(quoteCharOverride).orElse(quoteChar);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
index 66e7ce9..a4b93e8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.soap;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.io.IOException;
 import java.lang.reflect.*;
 import java.nio.charset.*;
@@ -242,7 +244,7 @@ public class SoapXmlSerializerSession extends XmlSerializerSession {
 
 	@Override /* Serializer */
 	public Map<String,String> getResponseHeaders() {
-		return AMap.of("SOAPAction",getSoapAction());
+		return map("SOAPAction",getSoapAction());
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
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 a159ac7..5737db3 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
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.svl;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.io.*;
 import java.util.*;
 import java.util.concurrent.*;
@@ -258,7 +260,7 @@ public class VarResolver {
 		for (Var v : vars)
 			m.put(v.getName(), v);
 
-		this.varMap = AMap.unmodifiable(m);
+		this.varMap = unmodifiable(m);
 		this.beanStore = BeanStore.of(builder.beanStore());
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
index 752ee2f..9170ec7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
@@ -13,9 +13,10 @@
 package org.apache.juneau.svl.vars;
 
 import static org.apache.juneau.assertions.Assertions.*;
+import static org.apache.juneau.internal.StringUtils.*;
+
 import java.util.regex.*;
 
-import org.apache.juneau.internal.*;
 import org.apache.juneau.svl.*;
 
 /**
@@ -70,7 +71,7 @@ public class SwitchVar extends MultipartVar {
 		for (int i = 1; i < args.length; i++) {
 			String pattern = args[i];
 
-			String[] parts = StringUtils.split(pattern, ':', 2);
+			String[] parts = split(pattern, ':', 2);
 			assertArg(parts.length >= 2, "Invalid arguments passed to $SW var.  Each case statement must contains 'pattern:value'.");
 
 			Pattern p = Pattern.compile(parts[0].replace("*", ".*").replace("?", "."));
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoListSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoListSwap.java
index 0a2a3d3..0b46eb2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoListSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoListSwap.java
@@ -13,13 +13,13 @@
 package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
@@ -81,8 +81,8 @@ import org.apache.juneau.serializer.*;
 public class AutoListSwap<T> extends ObjectSwap<T,List<?>> {
 
 	private static final Set<String>
-		SWAP_METHOD_NAMES = ASet.unmodifiable("toList", "toObjectList", "toOList"),
-		UNSWAP_METHOD_NAMES = ASet.unmodifiable("fromList", "fromObjectList", "fromOList", "create", "valueOf");
+		SWAP_METHOD_NAMES = unmodifiableSet("toList", "toObjectList", "toOList"),
+		UNSWAP_METHOD_NAMES = unmodifiableSet("fromList", "fromObjectList", "fromOList", "create", "valueOf");
 
 	/**
 	 * Look for constructors and methods on this class and construct a dynamic swap if it's possible to do so.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoMapSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoMapSwap.java
index 4e753f6..155c2ed 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoMapSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoMapSwap.java
@@ -13,12 +13,13 @@
 package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
@@ -80,8 +81,8 @@ import org.apache.juneau.serializer.*;
 public class AutoMapSwap<T> extends ObjectSwap<T,Map<?,?>> {
 
 	private static final Set<String>
-		SWAP_METHOD_NAMES = ASet.unmodifiable("toMap", "toObjectMap", "toOMap"),
-		UNSWAP_METHOD_NAMES = ASet.unmodifiable("fromMap", "fromObjectMap", "fromOMap", "create", "valueOf");
+		SWAP_METHOD_NAMES = unmodifiableSet("toMap", "toObjectMap", "toOMap"),
+		UNSWAP_METHOD_NAMES = unmodifiableSet("fromMap", "fromObjectMap", "fromOMap", "create", "valueOf");
 
 	/**
 	 * Look for constructors and methods on this class and construct a dynamic swap if it's possible to do so.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
index 7f6d4b6..d93b924 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -103,8 +104,8 @@ import org.apache.juneau.serializer.*;
 public class AutoNumberSwap<T> extends ObjectSwap<T,Number> {
 
 	private static final Set<String>
-		SWAP_METHOD_NAMES = ASet.unmodifiable("toNumber", "toInteger", "toInt", "toLong", "toFloat", "toDouble", "toShort", "toByte"),
-		UNSWAP_METHOD_NAMES = ASet.unmodifiable("fromInteger", "fromInt", "fromLong", "fromFloat", "fromDouble", "fromShort", "fromByte", "create", "valueOf");
+		SWAP_METHOD_NAMES = unmodifiableSet("toNumber", "toInteger", "toInt", "toLong", "toFloat", "toDouble", "toShort", "toByte"),
+		UNSWAP_METHOD_NAMES = unmodifiableSet("fromInteger", "fromInt", "fromLong", "fromFloat", "fromDouble", "fromShort", "fromByte", "create", "valueOf");
 
 	/**
 	 * Look for constructors and methods on this class and construct a dynamic swap if it's possible to do so.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoObjectSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoObjectSwap.java
index 924dbf9..15e65f3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoObjectSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoObjectSwap.java
@@ -13,13 +13,13 @@
 package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
@@ -83,8 +83,8 @@ import org.apache.juneau.serializer.*;
 public class AutoObjectSwap<T> extends ObjectSwap<T,Object> {
 
 	private static final Set<String>
-		SWAP_METHOD_NAMES = ASet.unmodifiable("swap", "toObject"),
-		UNSWAP_METHOD_NAMES = ASet.unmodifiable("unswap", "create", "fromObject", "of");
+		SWAP_METHOD_NAMES = unmodifiableSet("swap", "toObject"),
+		UNSWAP_METHOD_NAMES = unmodifiableSet("unswap", "create", "fromObject", "of");
 
 	/**
 	 * Inspects the specified class and returns a swap of this type if possible.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
index 4f30797..cacb05e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.swap;
 
 import static org.apache.juneau.internal.ClassUtils.*;
-import static java.util.Optional.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -73,7 +73,7 @@ public class SurrogateSwap<T,F> extends ObjectSwap<T,F> {
 				Class<?> pt = cc.getRawParamType(0);
 				if (! pt.equals(c.getDeclaringClass())) {
 					// Find the unswap method if there is one.
-					Method unswapMethod = ofNullable(
+					Method unswapMethod = optional(
 						ci.getPublicMethod(
 							x -> x.hasReturnType(pt)
 						)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index 1d604cc..7daeb7b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.uon;
 
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
@@ -312,7 +313,7 @@ public class UonParserSession extends ReaderParserSession implements HttpPartPar
 			sType = eType;
 
 		if (sType.isOptional())
-			return (T)Optional.ofNullable(parseAnything(eType.getElementType(), r, outer, isUrlParamValue, pMeta));
+			return (T)optional(parseAnything(eType.getElementType(), r, outer, isUrlParamValue, pMeta));
 
 		setCurrentClass(sType);
 
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 08c5523..d1f382c 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
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.uon;
 
-import static java.util.Optional.*;
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.nio.charset.*;
@@ -1133,7 +1134,7 @@ public class UonSerializer extends WriterSerializer implements HttpPartSerialize
 		quoteCharUon = builder.quoteCharUon;
 
 		addBeanTypes = addBeanTypesUon || super.isAddBeanTypes();
-		quoteChar = ofNullable(quoteCharUon).orElse(ofNullable(super.quoteChar()).orElse('\''));
+		quoteChar = optional(quoteCharUon).orElseGet(()->optional(super.quoteChar()).orElse('\''));
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
index 1231488..adb25be 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.urlencoding;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.io.IOException;
 import java.lang.reflect.*;
 import java.nio.charset.*;
@@ -261,7 +263,7 @@ public class UrlEncodingParserSession extends UonParserSession {
 			sType = eType;
 
 		if (sType.isOptional())
-			return (T)Optional.ofNullable(parseAnything(eType.getElementType(), r, outer));
+			return (T)optional(parseAnything(eType.getElementType(), r, outer));
 
 		int c = r.peekSkipWs();
 		if (c == '?')
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/BeanDiff.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/BeanDiff.java
index 47a1cd8..d5f91ea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/BeanDiff.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/BeanDiff.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
@@ -20,7 +21,6 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.Bean;
 import org.apache.juneau.collections.*;
-import org.apache.juneau.internal.*;
 
 /**
  * Utility class for comparing two versions of a POJO.
@@ -126,7 +126,7 @@ public class BeanDiff {
 		 * @return This object.
 		 */
 		public Builder<T> include(String...properties) {
-			include = ASet.of(properties);
+			include = set(properties);
 			return this;
 		}
 
@@ -151,7 +151,7 @@ public class BeanDiff {
 		 * @return This object.
 		 */
 		public Builder<T> exclude(String...properties) {
-			exclude = ASet.of(properties);
+			exclude = set(properties);
 			return this;
 		}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoQuery.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoQuery.java
index a2029ea..5859dc0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoQuery.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoQuery.java
@@ -567,7 +567,7 @@ public final class PojoQuery {
 			numberRanges = l.toArray(new NumberRange[l.size()]);
 		}
 
-		private static List<String> breakUpTokens(String s) {
+		private static String[] breakUpTokens(String s) {
 			// Get rid of whitespace in "123 - 456"
 			s = s.replaceAll("(-?\\d+)\\s*-\\s*(-?\\d+)", "$1-$2");
 			// Get rid of whitespace in ">= 123"
@@ -586,7 +586,7 @@ public final class PojoQuery {
 				if (! startsWith(s2[i], '!'))
 					s2[i] = "^"+s2[i];
 
-			return AList.of(s2);
+			return s2;
 		}
 
 		public boolean matches(Number number) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
index ce35889..53d324d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
@@ -15,6 +15,7 @@ package org.apache.juneau.utils;
 import static java.lang.Character.*;
 import static org.apache.juneau.collections.OMap.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.lang.reflect.*;
@@ -299,8 +300,8 @@ public class ReflectionMap<V> {
 		for (ClassEntry<V> e : classEntries)
 			if (e.matches(c))
 				if (ofType == null || ofType.isInstance(e.value))
-					return Optional.ofNullable(e.value);
-		return Optional.empty();
+					return optional(e.value);
+		return empty();
 	}
 
 	/**
@@ -378,8 +379,8 @@ public class ReflectionMap<V> {
 		for (MethodEntry<V> e : methodEntries)
 			if (e.matches(m))
 				if (ofType == null || ofType.isInstance(e.value))
-					return Optional.ofNullable(e.value);
-		return Optional.empty();
+					return optional(e.value);
+		return empty();
 	}
 
 	/**
@@ -450,8 +451,8 @@ public class ReflectionMap<V> {
 		for (FieldEntry<V> e : fieldEntries)
 			if (e.matches(f))
 				if (ofType == null || ofType.isInstance(e.value))
-					return Optional.ofNullable(e.value);
-		return Optional.empty();
+					return optional(e.value);
+		return empty();
 	}
 
 	/**
@@ -522,8 +523,8 @@ public class ReflectionMap<V> {
 		for (ConstructorEntry<V> e : constructorEntries)
 			if (e.matches(c))
 				if (ofType == null || ofType.isInstance(e.value))
-					return Optional.ofNullable(e.value);
-		return Optional.empty();
+					return optional(e.value);
+		return empty();
 	}
 
 	/**
@@ -793,11 +794,11 @@ public class ReflectionMap<V> {
 			.a("constructorEntries", constructorEntries)
 			.asString();
 	}
-	
+
 	//-----------------------------------------------------------------------------------------------------------------
 	// Utility methods
 	//-----------------------------------------------------------------------------------------------------------------
-	
+
 	private static <V> List<V> lazyList(List<V> list) {
 		return list == null ? Collections.emptyList() : list;
 	}
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 c57c948..5f616fb 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
@@ -92,15 +92,13 @@ public class SearchArgs {
 		 * @return This object.
 		 */
 		public Builder search(String searchTerms) {
-			if (searchTerms != null) {
-				for (String s : StringUtils.split(searchTerms)) {
-					int i = StringUtils.indexOf(s, '=', '>', '<');
-					if (i == -1)
-						throw runtimeException("Invalid search terms: ''{0}''", searchTerms);
-					char c = s.charAt(i);
-					search(s.substring(0, i).trim(), s.substring(c == '=' ? i+1 : i).trim());
-				}
-			}
+			split(searchTerms, x -> {
+				int i = indexOf(x, '=', '>', '<');
+				if (i == -1)
+					throw runtimeException("Invalid search terms: ''{0}''", searchTerms);
+				char c = x.charAt(i);
+				search(x.substring(0, i).trim(), x.substring(c == '=' ? i+1 : i).trim());
+			});
 			return this;
 		}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
index 661256c..114b6a7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
@@ -12,12 +12,12 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -51,10 +51,10 @@ public class XmlBeanMeta extends ExtendedBeanMeta {
 		Class<?> c = beanMeta.getClassMeta().getInnerClass();
 		XmlBeanMetaBuilder b = new XmlBeanMetaBuilder(beanMeta, mp);
 
-		attrs = b.attrs.unmodifiable();
-		elements = b.elements.unmodifiable();
+		attrs = unmodifiable(b.attrs);
+		elements = unmodifiable(b.elements);
 		attrsProperty = b.attrsProperty;
-		collapsedProperties = b.collapsedProperties.unmodifiable();
+		collapsedProperties = unmodifiable(b.collapsedProperties);
 		contentProperty = b.contentProperty;
 		contentFormat = b.contentFormat;
 
@@ -73,10 +73,10 @@ public class XmlBeanMeta extends ExtendedBeanMeta {
 	}
 
 	private static class XmlBeanMetaBuilder {
-		AMap<String,BeanPropertyMeta>
-			attrs = AMap.create(),
-			elements = AMap.create(),
-			collapsedProperties = AMap.create();
+		Map<String,BeanPropertyMeta>
+			attrs = map(),
+			elements = map(),
+			collapsedProperties = map();
 		BeanPropertyMeta
 			attrsProperty,
 			contentProperty;
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 a6fc689..e94a92f 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
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
-import static java.util.Optional.*;
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import java.lang.annotation.*;
 import java.lang.reflect.*;
@@ -798,9 +798,9 @@ public class XmlParser extends ReaderParser implements XmlMetaProvider {
 		resolver = builder.resolver;
 		eventAllocator = builder.eventAllocator;
 
-		reporterImpl = ofNullable(reporter).map(x -> newInstance(x)).orElse(null);
-		resolverImpl = ofNullable(resolver).map(x -> newInstance(x)).orElse(null);
-		eventAllocatorImpl = ofNullable(eventAllocator).map(x -> newInstance(x)).orElse(null);
+		reporterImpl = optional(reporter).map(x -> newInstance(x)).orElse(null);
+		resolverImpl = optional(resolver).map(x -> newInstance(x)).orElse(null);
+		eventAllocatorImpl = optional(eventAllocator).map(x -> newInstance(x)).orElse(null);
 	}
 
 	@Override /* Context */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
index 4cded48..52a1e8e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
@@ -14,6 +14,7 @@ package org.apache.juneau.xml;
 
 import static javax.xml.stream.XMLStreamConstants.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
@@ -457,7 +458,7 @@ public class XmlParserSession extends ReaderParserSession {
 			sType = eType;
 
 		if (sType.isOptional())
-			return (T)Optional.ofNullable(parseAnything(eType.getElementType(), currAttr, r, outer, isRoot, pMeta));
+			return (T)optional(parseAnything(eType.getElementType(), currAttr, r, outer, isRoot, pMeta));
 
 		setCurrentClass(sType);
 
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 be765af..be07da0 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
@@ -12,8 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
-import static java.util.Optional.*;
 import static org.apache.juneau.collections.OMap.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.nio.charset.*;
@@ -281,7 +282,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider {
 			disableAutoDetectNamespaces = ! copyFrom.autoDetectNamespaces;
 			enableNamespaces = copyFrom.enableNamespaces;
 			defaultNamespace = copyFrom.defaultNamespace;
-			namespaces = copyFrom.namespaces.length == 0 ? null : AList.of(copyFrom.namespaces);
+			namespaces = copyFrom.namespaces.length == 0 ? null : list(copyFrom.namespaces);
 		}
 
 		/**
@@ -296,7 +297,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider {
 			disableAutoDetectNamespaces = copyFrom.disableAutoDetectNamespaces;
 			enableNamespaces = copyFrom.enableNamespaces;
 			defaultNamespace = copyFrom.defaultNamespace;
-			namespaces = copyFrom.namespaces == null ? null : AList.of(copyFrom.namespaces);
+			namespaces = copyOf(copyFrom.namespaces);
 		}
 
 		@Override /* Context.Builder */
@@ -1180,8 +1181,8 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider {
 		enableNamespaces = builder.enableNamespaces;
 		addNamespaceUrlsToRoot = builder.addNamespaceUrisToRoot;
 		addBeanTypesXml = builder.addBeanTypesXml;
-		defaultNamespace = ofNullable(builder.defaultNamespace).orElse(DEFAULT_JUNEAU_NAMESPACE);
-		namespaces = ofNullable(builder.namespaces).map(x -> x.toArray(new Namespace[0])).orElse(new Namespace[0]);
+		defaultNamespace = optional(builder.defaultNamespace).orElse(DEFAULT_JUNEAU_NAMESPACE);
+		namespaces = optional(builder.namespaces).map(x -> x.toArray(new Namespace[0])).orElse(new Namespace[0]);
 
 		addBeanTypes = addBeanTypesXml || super.isAddBeanTypes();
 	}
diff --git a/juneau-doc/src/main/java/org/apache/juneau/doc/internal/DocGenerator.java b/juneau-doc/src/main/java/org/apache/juneau/doc/internal/DocGenerator.java
index 2a5ad62..102a631 100644
--- a/juneau-doc/src/main/java/org/apache/juneau/doc/internal/DocGenerator.java
+++ b/juneau-doc/src/main/java/org/apache/juneau/doc/internal/DocGenerator.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.doc.internal;
 
 import static org.apache.juneau.doc.internal.Console.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.io.*;
 import java.nio.file.*;
@@ -265,7 +266,7 @@ public class DocGenerator {
 				title = s.substring(0, i);
 				if (title.startsWith("{")) {
 					titleMap = SimpleJson.DEFAULT.read(title, TitleMap.class);
-					List<String> tags = AList.create();
+					List<String> tags = list();
 					if (titleMap.created != null)
 						tags.add("created: " + highlightCurrentVersion(titleMap.created));
 					if (titleMap.updated != null)
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
index d71c40f..6e493d6 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -12,16 +12,16 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice;
 
-import static org.apache.juneau.internal.ClassUtils.className;
-import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.FileUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
-import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.io.*;
 import java.net.*;
-import java.nio.file.Paths;
+import java.nio.file.*;
 import java.text.*;
 import java.util.*;
 import java.util.concurrent.*;
@@ -29,20 +29,21 @@ import java.util.jar.*;
 import java.util.logging.*;
 import java.util.logging.Formatter;
 
-import org.apache.juneau.ExecutableException;
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.config.*;
 import org.apache.juneau.config.event.*;
 import org.apache.juneau.config.store.*;
-import org.apache.juneau.config.vars.ConfigVar;
+import org.apache.juneau.config.store.FileStore;
+import org.apache.juneau.config.vars.*;
+import org.apache.juneau.cp.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.microservice.console.*;
 import org.apache.juneau.microservice.resources.*;
 import org.apache.juneau.parser.ParseException;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.svl.vars.ManifestFileVar;
+import org.apache.juneau.svl.vars.*;
 import org.apache.juneau.utils.*;
-import org.apache.juneau.cp.Messages;
 
 /**
  * Parent class for all microservices.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
index 6e70e85..8afb5b8 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
@@ -17,8 +17,8 @@ import java.util.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.config.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.cp.*;
+import org.apache.juneau.microservice.*;
 
 /**
  * Implements the 'config' console command to get or set configuration.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
index 80ce2b6..f273c7b 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
@@ -16,8 +16,8 @@ import java.io.*;
 import java.util.*;
 
 import org.apache.juneau.collections.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.cp.*;
+import org.apache.juneau.microservice.*;
 
 /**
  * Implements the 'exit' console command to gracefully shut down the microservice and JVM.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
index 078ec79..57b447c 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
@@ -16,8 +16,8 @@ import java.io.*;
 import java.util.*;
 
 import org.apache.juneau.collections.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.cp.*;
+import org.apache.juneau.microservice.*;
 
 /**
  * Implements the 'restart' console command to gracefully shut down and restart the microservice.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
index 273b54c..62377df 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
@@ -16,8 +16,8 @@ import java.io.*;
 import java.util.*;
 
 import org.apache.juneau.collections.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.cp.*;
+import org.apache.juneau.microservice.*;
 
 /**
  * Implements the 'restart' console command to gracefully shut down and restart the microservice.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
index 0fe54d1..d21c54f 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
@@ -19,16 +19,13 @@ import java.util.Map;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.dto.html5.*;
-import org.apache.juneau.html.annotation.HtmlDocConfig;
+import org.apache.juneau.html.annotation.*;
+import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.annotation.Body;
-import org.apache.juneau.http.annotation.FormData;
-import org.apache.juneau.http.annotation.Path;
-import org.apache.juneau.http.annotation.Response;
-import org.apache.juneau.http.annotation.Schema;
-import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.config.BasicUniversalConfig;
-import org.apache.juneau.rest.servlet.BasicRestServlet;
 import org.apache.juneau.http.response.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.config.*;
+import org.apache.juneau.rest.servlet.*;
 
 /**
  * Shows contents of the microservice configuration file.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
index 545aea1..8f5a2a1 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice.resources;
 
-import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
 import java.util.*;
@@ -22,16 +22,13 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.config.*;
 import org.apache.juneau.dto.*;
 import org.apache.juneau.html.annotation.*;
-import org.apache.juneau.http.annotation.Body;
-import org.apache.juneau.http.annotation.Path;
-import org.apache.juneau.http.annotation.Response;
-import org.apache.juneau.http.annotation.Schema;
+import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.http.response.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.beans.*;
-import org.apache.juneau.rest.config.BasicUniversalConfig;
-import org.apache.juneau.rest.servlet.BasicRestServlet;
-import org.apache.juneau.http.response.*;
+import org.apache.juneau.rest.config.*;
+import org.apache.juneau.rest.servlet.*;
 
 /**
  * REST resource that allows access to a file system directory.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogEntryFormatter.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogEntryFormatter.java
index cf3d5dd..f68791d 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogEntryFormatter.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogEntryFormatter.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice.resources;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.text.*;
@@ -22,8 +23,6 @@ import java.util.logging.*;
 import java.util.logging.Formatter;
 import java.util.regex.*;
 
-import org.apache.juneau.internal.AMap;
-
 /**
  * Log entry formatter.
  *
@@ -184,7 +183,7 @@ public class LogEntryFormatter extends Formatter {
 		sre = sre.replaceAll("\\\\%n", "\\\\n");
 
 		rePattern = Pattern.compile(sre);
-		fieldIndexes = AMap.unmodifiable(fieldIndexes);
+		fieldIndexes = unmodifiable(fieldIndexes);
 	}
 
 	/**
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogParser.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogParser.java
index c10f94a..0f440cf 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogParser.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogParser.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice.resources;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.io.*;
@@ -20,8 +21,6 @@ import java.text.*;
 import java.util.*;
 import java.util.regex.*;
 
-import org.apache.juneau.internal.ASet;
-
 /**
  * Utility class for reading log files.
  *
@@ -61,9 +60,9 @@ public final class LogParser implements Iterable<LogParser.Entry>, Iterator<LogP
 		this.end = end;
 		this.threadFilter = thread;
 		if (loggers != null)
-			this.loggerFilter = ASet.of(loggers);
+			this.loggerFilter = set(loggers);
 		if (severity != null)
-			this.severityFilter = ASet.of(severity);
+			this.severityFilter = set(severity);
 
 		// Find the first line.
 		String line;
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
index 298fa42..41b284b 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
@@ -22,17 +22,14 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.config.*;
 import org.apache.juneau.dto.*;
 import org.apache.juneau.html.annotation.*;
-import org.apache.juneau.http.annotation.Path;
-import org.apache.juneau.http.annotation.Query;
-import org.apache.juneau.http.annotation.Response;
-import org.apache.juneau.http.annotation.Schema;
+import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.http.response.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.beans.*;
-import org.apache.juneau.rest.config.BasicUniversalConfig;
+import org.apache.juneau.rest.config.*;
 import org.apache.juneau.rest.converter.*;
-import org.apache.juneau.rest.servlet.BasicRestServlet;
-import org.apache.juneau.http.response.*;
+import org.apache.juneau.rest.servlet.*;
 
 /**
  * REST resource for viewing and accessing log files.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
index 3510d53..46ceccf 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.microservice.resources;
 
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.config.BasicUniversalConfig;
-import org.apache.juneau.rest.servlet.BasicRestServletGroup;
+import org.apache.juneau.rest.config.*;
+import org.apache.juneau.rest.servlet.*;
 
 /**
  * Sample root REST resource.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
index 2d804f0..d8aff7f 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.microservice.resources;
 
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.config.BasicUniversalConfig;
-import org.apache.juneau.rest.servlet.BasicRestServlet;
+import org.apache.juneau.rest.config.*;
+import org.apache.juneau.rest.servlet.*;
 
 /**
  * Provides the capability to shut down this REST microservice through a REST call.
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigResource.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigResource.java
index 4d7f809..22da2fe 100644
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigResource.java
+++ b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigResource.java
@@ -14,11 +14,11 @@ package org.apache.juneau.rest.test;
 
 import static org.apache.juneau.http.HttpMethod.*;
 
-import org.apache.juneau.http.annotation.Path;
... 11097 lines suppressed ...