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 2017/12/23 16:50:49 UTC

[08/21] juneau git commit: JUNEAU-76 Improvements to Context/Builder APIs

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
index 38d74fa..685b9a7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
@@ -20,6 +20,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
+import org.apache.juneau.internal.*;
 
 /**
  * Builder class for creating instances of {@link ParserGroup}.
@@ -27,14 +28,14 @@ import org.apache.juneau.http.*;
 public class ParserGroupBuilder {
 
 	private final List<Object> parsers;
-	private final PropertyStore propertyStore;
+	private final PropertyStoreBuilder propertyStore;
 
 	/**
 	 * Create an empty parser group builder.
 	 */
 	public ParserGroupBuilder() {
 		this.parsers = new ArrayList<>();
-		this.propertyStore = PropertyStore.create();
+		this.propertyStore = PropertyStore2.create();
 	}
 
 	/**
@@ -45,7 +46,7 @@ public class ParserGroupBuilder {
 	 *
 	 * @param propertyStore The property store containing all settings common to all parsers in this group.
 	 */
-	public ParserGroupBuilder(PropertyStore propertyStore) {
+	public ParserGroupBuilder(PropertyStoreBuilder propertyStore) {
 		this.parsers = new ArrayList<>();
 		this.propertyStore = propertyStore;
 	}
@@ -58,7 +59,7 @@ public class ParserGroupBuilder {
 	public ParserGroupBuilder(ParserGroup copyFrom) {
 		this.parsers = new ArrayList<>();
 		addReverse(parsers, copyFrom.getParsers());
-		this.propertyStore = copyFrom.createPropertyStore();
+		this.propertyStore = copyFrom.getPropertyStore().builder();
 	}
 
 	/**
@@ -102,24 +103,24 @@ public class ParserGroupBuilder {
 	 *
 	 * @return A new {@link ParserGroup} object.
 	 */
+	@SuppressWarnings("unchecked")
 	public ParserGroup build() {
 		List<Parser> l = new ArrayList<>();
 		for (Object p : parsers) {
-			Class<?> c = null;
-			PropertyStore ps = propertyStore;
+			Class<? extends Parser> c = null;
+			PropertyStore2 ps = propertyStore.build();
 			if (p instanceof Class) {
-				c = (Class<?>)p;
+				c = (Class<? extends Parser>)p;
 			} else {
 				// Note that if we added a serializer instance, we want a new instance with this builder's properties
 				// on top of the previous serializer's properties.
 				Parser p2 = (Parser)p;
-				ps = p2.createPropertyStore().copyFrom(propertyStore);
+				ps = p2.getPropertyStore().builder().apply(ps).build();
 				c = p2.getClass();
 			}
-			l.add(propertyStore.getBeanContext().newInstance(Parser.class, c, ps));
+			l.add(ContextCache.INSTANCE.create(c, ps));
 		}
-		Collections.reverse(l);
-		return new ParserGroup(propertyStore, l.toArray(new Parser[l.size()]));
+		return new ParserGroup(propertyStore.build(), ArrayUtils.toReverseArray(Parser.class, l));
 	}
 
 
@@ -133,10 +134,10 @@ public class ParserGroupBuilder {
 	 * @param name The property name.
 	 * @param value The property value.
 	 * @return This object (for method chaining).
-	 * @see PropertyStore#setProperty(String, Object)
+	 * @see PropertyStoreBuilder#set(String, Object)
 	 */
-	public ParserGroupBuilder property(String name, Object value) {
-		propertyStore.setProperty(name, value);
+	public ParserGroupBuilder set(String name, Object value) {
+		propertyStore.set(name, value);
 		return this;
 	}
 
@@ -145,50 +146,49 @@ public class ParserGroupBuilder {
 	 *
 	 * @param properties The properties to set on this class.
 	 * @return This object (for method chaining).
-	 * @see PropertyStore#setProperties(java.util.Map)
+	 * @see PropertyStoreBuilder#set(java.util.Map)
 	 */
-	public ParserGroupBuilder properties(ObjectMap properties) {
-		propertyStore.setProperties(properties);
+	public ParserGroupBuilder set(ObjectMap properties) {
+		propertyStore.set(properties);
 		return this;
 	}
 
 	/**
-	 * Adds a value to a SET property on all parsers in this group.
+	 * Appends a set of properties on all parsers in this group.
 	 *
-	 * @param name The property name.
-	 * @param value The new value to add to the SET property.
+	 * @param properties The properties to append on this class.
 	 * @return This object (for method chaining).
-	 * @throws ConfigException If property is not a SET property.
+	 * @see PropertyStoreBuilder#add(java.util.Map)
 	 */
-	public ParserGroupBuilder addToProperty(String name, Object value) {
-		propertyStore.addToProperty(name, value);
+	public ParserGroupBuilder add(ObjectMap properties) {
+		propertyStore.add(properties);
 		return this;
 	}
 
 	/**
-	 * Adds or overwrites a value to a MAP property on all parsers in this group.
+	 * Adds a value to a SET/LIST/MAP property on all parsers in this group.
 	 *
 	 * @param name The property name.
-	 * @param key The property value map key.
-	 * @param value The property value map value.
+	 * @param value The new value to add to the SET property.
 	 * @return This object (for method chaining).
-	 * @throws ConfigException If property is not a MAP property.
+	 * @throws ConfigException If property is not a SET property.
 	 */
-	public ParserGroupBuilder putToProperty(String name, Object key, Object value) {
-		propertyStore.putToProperty(name, key, value);
+	public ParserGroupBuilder addTo(String name, Object value) {
+		propertyStore.addTo(name, value);
 		return this;
 	}
 
 	/**
 	 * Adds or overwrites a value to a MAP property on all parsers in this group.
 	 *
-	 * @param name The property value.
+	 * @param name The property name.
+	 * @param key The property value map key.
 	 * @param value The property value map value.
 	 * @return This object (for method chaining).
 	 * @throws ConfigException If property is not a MAP property.
 	 */
-	public ParserGroupBuilder putToProperty(String name, Object value) {
-		propertyStore.putToProperty(name, value);
+	public ParserGroupBuilder addTo(String name, String key, Object value) {
+		propertyStore.addTo(name, key, value);
 		return this;
 	}
 
@@ -200,8 +200,8 @@ public class ParserGroupBuilder {
 	 * @return This object (for method chaining).
 	 * @throws ConfigException If property is not a SET property.
 	 */
-	public ParserGroupBuilder removeFromProperty(String name, Object value) {
-		propertyStore.removeFromProperty(name, value);
+	public ParserGroupBuilder removeFrom(String name, Object value) {
+		propertyStore.removeFrom(name, value);
 		return this;
 	}
 
@@ -213,7 +213,7 @@ public class ParserGroupBuilder {
 	 * @see Parser#PARSER_trimStrings
 	 */
 	public ParserGroupBuilder trimStrings(boolean value) {
-		return property(PARSER_trimStrings, value);
+		return set(PARSER_trimStrings, value);
 	}
 
 	/**
@@ -224,7 +224,7 @@ public class ParserGroupBuilder {
 	 * @see Parser#PARSER_strict
 	 */
 	public ParserGroupBuilder strict(boolean value) {
-		return property(PARSER_strict, value);
+		return set(PARSER_strict, value);
 	}
 
 	/**
@@ -235,7 +235,7 @@ public class ParserGroupBuilder {
 	 * @see Parser#PARSER_inputStreamCharset
 	 */
 	public ParserGroupBuilder inputStreamCharset(String value) {
-		return property(PARSER_inputStreamCharset, value);
+		return set(PARSER_inputStreamCharset, value);
 	}
 
 	/**
@@ -246,7 +246,7 @@ public class ParserGroupBuilder {
 	 * @see Parser#PARSER_fileCharset
 	 */
 	public ParserGroupBuilder fileCharset(String value) {
-		return property(PARSER_fileCharset, value);
+		return set(PARSER_fileCharset, value);
 	}
 
 	/**
@@ -257,7 +257,7 @@ public class ParserGroupBuilder {
 	 * @see Parser#PARSER_listener
 	 */
 	public ParserGroupBuilder listener(Class<? extends ParserListener> value) {
-		return property(PARSER_listener, value);
+		return set(PARSER_listener, value);
 	}
 
 	/**
@@ -268,7 +268,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beansRequireDefaultConstructor
 	 */
 	public ParserGroupBuilder beansRequireDefaultConstructor(boolean value) {
-		return property(BEAN_beansRequireDefaultConstructor, value);
+		return set(BEAN_beansRequireDefaultConstructor, value);
 	}
 
 	/**
@@ -279,7 +279,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beansRequireSerializable
 	 */
 	public ParserGroupBuilder beansRequireSerializable(boolean value) {
-		return property(BEAN_beansRequireSerializable, value);
+		return set(BEAN_beansRequireSerializable, value);
 	}
 
 	/**
@@ -290,7 +290,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beansRequireSettersForGetters
 	 */
 	public ParserGroupBuilder beansRequireSettersForGetters(boolean value) {
-		return property(BEAN_beansRequireSettersForGetters, value);
+		return set(BEAN_beansRequireSettersForGetters, value);
 	}
 
 	/**
@@ -301,7 +301,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beansRequireSomeProperties
 	 */
 	public ParserGroupBuilder beansRequireSomeProperties(boolean value) {
-		return property(BEAN_beansRequireSomeProperties, value);
+		return set(BEAN_beansRequireSomeProperties, value);
 	}
 
 	/**
@@ -312,7 +312,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanMapPutReturnsOldValue
 	 */
 	public ParserGroupBuilder beanMapPutReturnsOldValue(boolean value) {
-		return property(BEAN_beanMapPutReturnsOldValue, value);
+		return set(BEAN_beanMapPutReturnsOldValue, value);
 	}
 
 	/**
@@ -323,7 +323,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanConstructorVisibility
 	 */
 	public ParserGroupBuilder beanConstructorVisibility(Visibility value) {
-		return property(BEAN_beanConstructorVisibility, value);
+		return set(BEAN_beanConstructorVisibility, value);
 	}
 
 	/**
@@ -334,7 +334,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanClassVisibility
 	 */
 	public ParserGroupBuilder beanClassVisibility(Visibility value) {
-		return property(BEAN_beanClassVisibility, value);
+		return set(BEAN_beanClassVisibility, value);
 	}
 
 	/**
@@ -345,7 +345,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanFieldVisibility
 	 */
 	public ParserGroupBuilder beanFieldVisibility(Visibility value) {
-		return property(BEAN_beanFieldVisibility, value);
+		return set(BEAN_beanFieldVisibility, value);
 	}
 
 	/**
@@ -356,7 +356,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_methodVisibility
 	 */
 	public ParserGroupBuilder methodVisibility(Visibility value) {
-		return property(BEAN_methodVisibility, value);
+		return set(BEAN_methodVisibility, value);
 	}
 
 	/**
@@ -367,7 +367,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_useJavaBeanIntrospector
 	 */
 	public ParserGroupBuilder useJavaBeanIntrospector(boolean value) {
-		return property(BEAN_useJavaBeanIntrospector, value);
+		return set(BEAN_useJavaBeanIntrospector, value);
 	}
 
 	/**
@@ -378,7 +378,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_useInterfaceProxies
 	 */
 	public ParserGroupBuilder useInterfaceProxies(boolean value) {
-		return property(BEAN_useInterfaceProxies, value);
+		return set(BEAN_useInterfaceProxies, value);
 	}
 
 	/**
@@ -389,7 +389,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_ignoreUnknownBeanProperties
 	 */
 	public ParserGroupBuilder ignoreUnknownBeanProperties(boolean value) {
-		return property(BEAN_ignoreUnknownBeanProperties, value);
+		return set(BEAN_ignoreUnknownBeanProperties, value);
 	}
 
 	/**
@@ -400,7 +400,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_ignoreUnknownNullBeanProperties
 	 */
 	public ParserGroupBuilder ignoreUnknownNullBeanProperties(boolean value) {
-		return property(BEAN_ignoreUnknownNullBeanProperties, value);
+		return set(BEAN_ignoreUnknownNullBeanProperties, value);
 	}
 
 	/**
@@ -411,7 +411,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_ignorePropertiesWithoutSetters
 	 */
 	public ParserGroupBuilder ignorePropertiesWithoutSetters(boolean value) {
-		return property(BEAN_ignorePropertiesWithoutSetters, value);
+		return set(BEAN_ignorePropertiesWithoutSetters, value);
 	}
 
 	/**
@@ -422,7 +422,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_ignoreInvocationExceptionsOnGetters
 	 */
 	public ParserGroupBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
-		return property(BEAN_ignoreInvocationExceptionsOnGetters, value);
+		return set(BEAN_ignoreInvocationExceptionsOnGetters, value);
 	}
 
 	/**
@@ -433,7 +433,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_ignoreInvocationExceptionsOnSetters
 	 */
 	public ParserGroupBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
-		return property(BEAN_ignoreInvocationExceptionsOnSetters, value);
+		return set(BEAN_ignoreInvocationExceptionsOnSetters, value);
 	}
 
 	/**
@@ -444,7 +444,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_sortProperties
 	 */
 	public ParserGroupBuilder sortProperties(boolean value) {
-		return property(BEAN_sortProperties, value);
+		return set(BEAN_sortProperties, value);
 	}
 
 	/**
@@ -455,7 +455,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_add
 	 */
 	public ParserGroupBuilder notBeanPackages(String...values) {
-		return property(BEAN_notBeanPackages_add, values);
+		return set(BEAN_notBeanPackages_add, values);
 	}
 
 	/**
@@ -466,7 +466,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_add
 	 */
 	public ParserGroupBuilder notBeanPackages(Collection<String> value) {
-		return property(BEAN_notBeanPackages_add, value);
+		return set(BEAN_notBeanPackages_add, value);
 	}
 
 	/**
@@ -477,7 +477,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages
 	 */
 	public ParserGroupBuilder setNotBeanPackages(String...values) {
-		return property(BEAN_notBeanPackages, values);
+		return set(BEAN_notBeanPackages, values);
 	}
 
 	/**
@@ -488,7 +488,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages
 	 */
 	public ParserGroupBuilder setNotBeanPackages(Collection<String> values) {
-		return property(BEAN_notBeanPackages, values);
+		return set(BEAN_notBeanPackages, values);
 	}
 
 	/**
@@ -500,7 +500,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_remove
 	 */
 	public ParserGroupBuilder removeNotBeanPackages(String...values) {
-		return property(BEAN_notBeanPackages_remove, values);
+		return set(BEAN_notBeanPackages_remove, values);
 	}
 
 	/**
@@ -512,7 +512,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_remove
 	 */
 	public ParserGroupBuilder removeNotBeanPackages(Collection<String> values) {
-		return property(BEAN_notBeanPackages_remove, values);
+		return set(BEAN_notBeanPackages_remove, values);
 	}
 
 	/**
@@ -523,7 +523,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses_add
 	 */
 	public ParserGroupBuilder notBeanClasses(Class<?>...values) {
-		return property(BEAN_notBeanClasses_add, values);
+		return set(BEAN_notBeanClasses_add, values);
 	}
 
 	/**
@@ -534,7 +534,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_add
 	 */
 	public ParserGroupBuilder notBeanClasses(Collection<Class<?>> values) {
-		return property(BEAN_notBeanClasses_add, values);
+		return set(BEAN_notBeanClasses_add, values);
 	}
 
 	/**
@@ -545,7 +545,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses
 	 */
 	public ParserGroupBuilder setNotBeanClasses(Class<?>...values) {
-		return property(BEAN_notBeanClasses, values);
+		return set(BEAN_notBeanClasses, values);
 	}
 
 	/**
@@ -556,7 +556,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses
 	 */
 	public ParserGroupBuilder setNotBeanClasses(Collection<Class<?>> values) {
-		return property(BEAN_notBeanClasses, values);
+		return set(BEAN_notBeanClasses, values);
 	}
 
 	/**
@@ -567,7 +567,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses_remove
 	 */
 	public ParserGroupBuilder removeNotBeanClasses(Class<?>...values) {
-		return property(BEAN_notBeanClasses_remove, values);
+		return set(BEAN_notBeanClasses_remove, values);
 	}
 
 	/**
@@ -578,7 +578,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses_remove
 	 */
 	public ParserGroupBuilder removeNotBeanClasses(Collection<Class<?>> values) {
-		return property(BEAN_notBeanClasses_remove, values);
+		return set(BEAN_notBeanClasses_remove, values);
 	}
 
 	/**
@@ -589,7 +589,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters_add
 	 */
 	public ParserGroupBuilder beanFilters(Class<?>...values) {
-		return property(BEAN_beanFilters_add, values);
+		return set(BEAN_beanFilters_add, values);
 	}
 
 	/**
@@ -600,7 +600,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters_add
 	 */
 	public ParserGroupBuilder beanFilters(Collection<Class<?>> values) {
-		return property(BEAN_beanFilters_add, values);
+		return set(BEAN_beanFilters_add, values);
 	}
 
 	/**
@@ -611,7 +611,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters
 	 */
 	public ParserGroupBuilder setBeanFilters(Class<?>...values) {
-		return property(BEAN_beanFilters, values);
+		return set(BEAN_beanFilters, values);
 	}
 
 	/**
@@ -622,7 +622,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters
 	 */
 	public ParserGroupBuilder setBeanFilters(Collection<Class<?>> values) {
-		return property(BEAN_beanFilters, values);
+		return set(BEAN_beanFilters, values);
 	}
 
 	/**
@@ -633,7 +633,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters_remove
 	 */
 	public ParserGroupBuilder removeBeanFilters(Class<?>...values) {
-		return property(BEAN_beanFilters_remove, values);
+		return set(BEAN_beanFilters_remove, values);
 	}
 
 	/**
@@ -644,7 +644,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters_remove
 	 */
 	public ParserGroupBuilder removeBeanFilters(Collection<Class<?>> values) {
-		return property(BEAN_beanFilters_remove, values);
+		return set(BEAN_beanFilters_remove, values);
 	}
 
 	/**
@@ -655,7 +655,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps_add
 	 */
 	public ParserGroupBuilder pojoSwaps(Class<?>...values) {
-		return property(BEAN_pojoSwaps_add, values);
+		return set(BEAN_pojoSwaps_add, values);
 	}
 
 	/**
@@ -666,7 +666,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps_add
 	 */
 	public ParserGroupBuilder pojoSwaps(Collection<Class<?>> values) {
-		return property(BEAN_pojoSwaps_add, values);
+		return set(BEAN_pojoSwaps_add, values);
 	}
 
 	/**
@@ -677,7 +677,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps
 	 */
 	public ParserGroupBuilder setPojoSwaps(Class<?>...values) {
-		return property(BEAN_pojoSwaps, values);
+		return set(BEAN_pojoSwaps, values);
 	}
 
 	/**
@@ -688,7 +688,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps
 	 */
 	public ParserGroupBuilder setPojoSwaps(Collection<Class<?>> values) {
-		return property(BEAN_pojoSwaps, values);
+		return set(BEAN_pojoSwaps, values);
 	}
 
 	/**
@@ -699,7 +699,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps_remove
 	 */
 	public ParserGroupBuilder removePojoSwaps(Class<?>...values) {
-		return property(BEAN_pojoSwaps_remove, values);
+		return set(BEAN_pojoSwaps_remove, values);
 	}
 
 	/**
@@ -710,7 +710,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps_remove
 	 */
 	public ParserGroupBuilder removePojoSwaps(Collection<Class<?>> values) {
-		return property(BEAN_pojoSwaps_remove, values);
+		return set(BEAN_pojoSwaps_remove, values);
 	}
 
 	/**
@@ -720,22 +720,21 @@ public class ParserGroupBuilder {
 	 * @return This object (for method chaining).
 	 * @see BeanContext#BEAN_implClasses
 	 */
-	public ParserGroupBuilder implClasses(Map<Class<?>,Class<?>> values) {
-		return property(BEAN_implClasses, values);
+	public ParserGroupBuilder implClasses(Map<String,Class<?>> values) {
+		return set(BEAN_implClasses, values);
 	}
 
 	/**
-	 * Sets the {@link BeanContext#BEAN_implClasses_put} property on all parsers in this group.
+	 * Sets the {@link BeanContext#BEAN_implClasses} property on all parsers in this group.
 	 *
 	 * @param interfaceClass The interface class.
 	 * @param implClass The implementation class.
 	 * @param <T> The class type of the interface.
 	 * @return This object (for method chaining).
 	 * @see BeanContext#BEAN_implClasses
-	 * @see BeanContext#BEAN_implClasses_put
 	 */
 	public <T> ParserGroupBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
-		return putToProperty(BEAN_implClasses, interfaceClass, implClass);
+		return addTo(BEAN_implClasses, interfaceClass.getName(), implClass);
 	}
 
 	/**
@@ -746,7 +745,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary_add
 	 */
 	public ParserGroupBuilder beanDictionary(Class<?>...values) {
-		return property(BEAN_beanDictionary_add, values);
+		return set(BEAN_beanDictionary_add, values);
 	}
 
 	/**
@@ -757,7 +756,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary_add
 	 */
 	public ParserGroupBuilder beanDictionary(Collection<Class<?>> values) {
-		return property(BEAN_beanDictionary_add, values);
+		return set(BEAN_beanDictionary_add, values);
 	}
 
 	/**
@@ -768,7 +767,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary
 	 */
 	public ParserGroupBuilder setBeanDictionary(Class<?>...values) {
-		return property(BEAN_beanDictionary, values);
+		return set(BEAN_beanDictionary, values);
 	}
 
 	/**
@@ -779,7 +778,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary
 	 */
 	public ParserGroupBuilder setBeanDictionary(Collection<Class<?>> values) {
-		return property(BEAN_beanDictionary, values);
+		return set(BEAN_beanDictionary, values);
 	}
 
 	/**
@@ -790,7 +789,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary_remove
 	 */
 	public ParserGroupBuilder removeFromBeanDictionary(Class<?>...values) {
-		return property(BEAN_beanDictionary_remove, values);
+		return set(BEAN_beanDictionary_remove, values);
 	}
 
 	/**
@@ -801,7 +800,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary_remove
 	 */
 	public ParserGroupBuilder removeFromBeanDictionary(Collection<Class<?>> values) {
-		return property(BEAN_beanDictionary_remove, values);
+		return set(BEAN_beanDictionary_remove, values);
 	}
 
 	/**
@@ -812,7 +811,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_beanTypePropertyName
 	 */
 	public ParserGroupBuilder beanTypePropertyName(String value) {
-		return property(BEAN_beanTypePropertyName, value);
+		return set(BEAN_beanTypePropertyName, value);
 	}
 
 	/**
@@ -823,7 +822,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_defaultParser
 	 */
 	public ParserGroupBuilder defaultParser(Class<?> value) {
-		return property(BEAN_defaultParser, value);
+		return set(BEAN_defaultParser, value);
 	}
 
 	/**
@@ -834,7 +833,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_locale
 	 */
 	public ParserGroupBuilder locale(Locale value) {
-		return property(BEAN_locale, value);
+		return set(BEAN_locale, value);
 	}
 
 	/**
@@ -845,7 +844,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_timeZone
 	 */
 	public ParserGroupBuilder timeZone(TimeZone value) {
-		return property(BEAN_timeZone, value);
+		return set(BEAN_timeZone, value);
 	}
 
 	/**
@@ -856,7 +855,7 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_mediaType
 	 */
 	public ParserGroupBuilder mediaType(MediaType value) {
-		return property(BEAN_mediaType, value);
+		return set(BEAN_mediaType, value);
 	}
 
 	/**
@@ -866,25 +865,6 @@ public class ParserGroupBuilder {
 	 * @see BeanContext#BEAN_debug
 	 */
 	public ParserGroupBuilder debug() {
-		return property(BEAN_debug, true);
-	}
-
-	/**
-	 * Specifies the classloader to use when resolving classes from strings for all parsers in this group.
-	 *
-	 * <p>
-	 * Can be used for resolving class names when the classes being created are in a different classloader from the
-	 * Juneau code.
-	 *
-	 * <p>
-	 * If <jk>null</jk>, the system classloader will be used to resolve classes.
-	 *
-	 * @param classLoader The new classloader.
-	 * @return This object (for method chaining).
-	 * @see PropertyStore#setClassLoader(ClassLoader)
-	 */
-	public ParserGroupBuilder classLoader(ClassLoader classLoader) {
-		propertyStore.setClassLoader(classLoader);
-		return this;
+		return set(BEAN_debug, true);
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
index 3ed5fba..f8f615f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
@@ -52,20 +52,25 @@ public abstract class ParserSession extends BeanSession {
 	 * @param args
 	 * 	Runtime session arguments.
 	 */
-	protected ParserSession(ParserContext ctx, ParserSessionArgs args) {
-		super(ctx != null ? ctx : ParserContext.DEFAULT, args);
-		if (ctx == null)
-			ctx = ParserContext.DEFAULT;
-		Class<?> listenerClass;
-		ObjectMap p = getProperties();
-		trimStrings = p.getBoolean(PARSER_trimStrings, ctx.trimStrings);
-		strict = p.getBoolean(PARSER_strict, ctx.strict);
-		inputStreamCharset = p.getString(PARSER_inputStreamCharset, ctx.inputStreamCharset);
-		fileCharset = p.getString(PARSER_fileCharset, ctx.fileCharset);
-		listenerClass = p.getWithDefault(PARSER_listener, ctx.listener, Class.class);
-		this.javaMethod = args.javaMethod;
-		this.outer = args.outer;
-		this.listener = newInstance(ParserListener.class, listenerClass);
+	protected ParserSession(Parser ctx, ParserSessionArgs args) {
+		super(ctx, args);
+		trimStrings = getProperty(PARSER_trimStrings, boolean.class, ctx.trimStrings);
+		strict = getProperty(PARSER_strict, boolean.class, ctx.strict);
+		inputStreamCharset = getProperty(PARSER_inputStreamCharset, String.class, ctx.inputStreamCharset);
+		fileCharset = getProperty(PARSER_fileCharset, String.class, ctx.fileCharset);
+		javaMethod = args.javaMethod;
+		outer = args.outer;
+		listener = getInstanceProperty(PARSER_listener, ParserListener.class, ctx.listener);
+	}
+
+	/**
+	 * Default constructor.
+	 * 
+	 * @param args
+	 * 	Runtime session arguments.
+	 */
+	protected ParserSession(ParserSessionArgs args) {
+		this(Parser.DEFAULT, args);
 	}
 
 	@Override /* Session */

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
index 0d107a8..033fccc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParser.java
@@ -30,11 +30,11 @@ public abstract class ReaderParser extends Parser {
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore The property store containing all the settings for this object.
+	 * @param ps The property store containing all the settings for this object.
 	 * @param consumes The list of media types that this parser consumes (e.g. <js>"application/json"</js>, <js>"*&#8203;/json"</js>).
 	 */
-	protected ReaderParser(PropertyStore propertyStore, String...consumes) {
-		super(propertyStore, consumes);
+	protected ReaderParser(PropertyStore2 ps, String...consumes) {
+		super(ps, consumes);
 	}
 
 	@Override /* Parser */

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
index 1c7da89..088ea48 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserSession.java
@@ -24,12 +24,12 @@ public abstract class ReaderParserSession extends ParserSession {
 	 * Create a new session using properties specified in the context.
 	 *
 	 * @param ctx
-	 * 	The context creating this session object.
-	 * 	The context contains all the configuration settings for this object.
+	 * 	The parser creating this session object.
+	 * 	The parser contains all the configuration settings for this object.
 	 * @param args
 	 * 	Runtime session arguments.
 	 */
-	protected ReaderParserSession(ParserContext ctx, ParserSessionArgs args) {
+	protected ReaderParserSession(Parser ctx, ParserSessionArgs args) {
 		super(ctx, args);
 	}
 
@@ -40,7 +40,7 @@ public abstract class ReaderParserSession extends ParserSession {
 	 * 	Runtime session arguments.
 	 */
 	protected ReaderParserSession(ParserSessionArgs args) {
-		this(null, args);
+		super(args);
 	}
 
 

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
index 3b0561e..9b4757a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
@@ -43,7 +43,7 @@ public class PlainTextParser extends ReaderParser {
 	//-------------------------------------------------------------------------------------------------------------------
 
 	/** Default parser, all default settings.*/
-	public static final PlainTextParser DEFAULT = new PlainTextParser(PropertyStore.create());
+	public static final PlainTextParser DEFAULT = new PlainTextParser(PropertyStore2.DEFAULT);
 
 
 	//-------------------------------------------------------------------------------------------------------------------
@@ -53,28 +53,28 @@ public class PlainTextParser extends ReaderParser {
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore The property store containing all the settings for this object.
+	 * @param ps The property store containing all the settings for this object.
 	 */
-	public PlainTextParser(PropertyStore propertyStore) {
-		this(propertyStore, "text/plain");
+	public PlainTextParser(PropertyStore2 ps) {
+		this(ps, "text/plain");
 	}
 
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore The property store containing all the settings for this object.
+	 * @param ps The property store containing all the settings for this object.
 	 * @param consumes The media types that this parser consumes.
 	 * 	<p>
 	 * 	Can contain meta-characters per the <code>media-type</code> specification of
 	 * 	<a class="doclink" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1">RFC2616/14.1</a>
 	 */
-	public PlainTextParser(PropertyStore propertyStore, String...consumes) {
-		super(propertyStore, consumes);
+	public PlainTextParser(PropertyStore2 ps, String...consumes) {
+		super(ps, consumes);
 	}
 
 	@Override /* CoreObject */
 	public PlainTextParserBuilder builder() {
-		return new PlainTextParserBuilder(propertyStore);
+		return new PlainTextParserBuilder(getPropertyStore());
 	}
 
 	/**
@@ -95,6 +95,6 @@ public class PlainTextParser extends ReaderParser {
 
 	@Override /* Parser */
 	public ReaderParserSession createSession(ParserSessionArgs args) {
-		return new PlainTextParserSession(args);
+		return new PlainTextParserSession(this, args);
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
index 1721d0e..b87c507 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
@@ -33,15 +33,15 @@ public class PlainTextParserBuilder extends ParserBuilder {
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore The initial configuration settings for this builder.
+	 * @param ps The initial configuration settings for this builder.
 	 */
-	public PlainTextParserBuilder(PropertyStore propertyStore) {
-		super(propertyStore);
+	public PlainTextParserBuilder(PropertyStore2 ps) {
+		super(ps);
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParser build() {
-		return new PlainTextParser(propertyStore);
+		return build(PlainTextParser.class);
 	}
 
 
@@ -85,380 +85,374 @@ public class PlainTextParserBuilder extends ParserBuilder {
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beansRequireDefaultConstructor(boolean value) {
 		super.beansRequireDefaultConstructor(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beansRequireSerializable(boolean value) {
 		super.beansRequireSerializable(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beansRequireSettersForGetters(boolean value) {
 		super.beansRequireSettersForGetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beansRequireSomeProperties(boolean value) {
 		super.beansRequireSomeProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanMapPutReturnsOldValue(boolean value) {
 		super.beanMapPutReturnsOldValue(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanConstructorVisibility(Visibility value) {
 		super.beanConstructorVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanClassVisibility(Visibility value) {
 		super.beanClassVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanFieldVisibility(Visibility value) {
 		super.beanFieldVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder methodVisibility(Visibility value) {
 		super.methodVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder useJavaBeanIntrospector(boolean value) {
 		super.useJavaBeanIntrospector(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder useInterfaceProxies(boolean value) {
 		super.useInterfaceProxies(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder ignoreUnknownBeanProperties(boolean value) {
 		super.ignoreUnknownBeanProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder ignoreUnknownNullBeanProperties(boolean value) {
 		super.ignoreUnknownNullBeanProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder ignorePropertiesWithoutSetters(boolean value) {
 		super.ignorePropertiesWithoutSetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
 		super.ignoreInvocationExceptionsOnGetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
 		super.ignoreInvocationExceptionsOnSetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder sortProperties(boolean value) {
 		super.sortProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder notBeanPackages(String...values) {
 		super.notBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder notBeanPackages(Collection<String> values) {
 		super.notBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setNotBeanPackages(String...values) {
 		super.setNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setNotBeanPackages(Collection<String> values) {
 		super.setNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removeNotBeanPackages(String...values) {
 		super.removeNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removeNotBeanPackages(Collection<String> values) {
 		super.removeNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder notBeanClasses(Class<?>...values) {
 		super.notBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder notBeanClasses(Collection<Class<?>> values) {
 		super.notBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setNotBeanClasses(Class<?>...values) {
 		super.setNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setNotBeanClasses(Collection<Class<?>> values) {
 		super.setNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removeNotBeanClasses(Class<?>...values) {
 		super.removeNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removeNotBeanClasses(Collection<Class<?>> values) {
 		super.removeNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanFilters(Class<?>...values) {
 		super.beanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanFilters(Collection<Class<?>> values) {
 		super.beanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setBeanFilters(Class<?>...values) {
 		super.setBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setBeanFilters(Collection<Class<?>> values) {
 		super.setBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removeBeanFilters(Class<?>...values) {
 		super.removeBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removeBeanFilters(Collection<Class<?>> values) {
 		super.removeBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder pojoSwaps(Class<?>...values) {
 		super.pojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder pojoSwaps(Collection<Class<?>> values) {
 		super.pojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setPojoSwaps(Class<?>...values) {
 		super.setPojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setPojoSwaps(Collection<Class<?>> values) {
 		super.setPojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removePojoSwaps(Class<?>...values) {
 		super.removePojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removePojoSwaps(Collection<Class<?>> values) {
 		super.removePojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder implClasses(Map<Class<?>,Class<?>> values) {
+	@Override /* ContextBuilder */
+	public PlainTextParserBuilder implClasses(Map<String,Class<?>> values) {
 		super.implClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public <T> PlainTextParserBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
 		super.implClass(interfaceClass, implClass);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanDictionary(Class<?>...values) {
 		super.beanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanDictionary(Collection<Class<?>> values) {
 		super.beanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setBeanDictionary(Class<?>...values) {
 		super.setBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder setBeanDictionary(Collection<Class<?>> values) {
 		super.setBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removeFromBeanDictionary(Class<?>...values) {
 		super.removeFromBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder removeFromBeanDictionary(Collection<Class<?>> values) {
 		super.removeFromBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder beanTypePropertyName(String value) {
 		super.beanTypePropertyName(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder defaultParser(Class<?> value) {
 		super.defaultParser(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder locale(Locale value) {
 		super.locale(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder timeZone(TimeZone value) {
 		super.timeZone(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder mediaType(MediaType value) {
 		super.mediaType(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextParserBuilder debug() {
 		super.debug();
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder property(String name, Object value) {
-		super.property(name, value);
+	@Override /* ContextBuilder */
+	public PlainTextParserBuilder set(String name, Object value) {
+		super.set(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder properties(Map<String,Object> properties) {
-		super.properties(properties);
+	@Override /* ContextBuilder */
+	public PlainTextParserBuilder set(Map<String,Object> properties) {
+		super.set(properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder addToProperty(String name, Object value) {
-		super.addToProperty(name, value);
+	@Override /* ContextBuilder */
+	public PlainTextParserBuilder add(Map<String,Object> properties) {
+		super.add(properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder putToProperty(String name, Object key, Object value) {
-		super.putToProperty(name, key, value);
+	@Override /* ContextBuilder */
+	public PlainTextParserBuilder addTo(String name, Object value) {
+		super.addTo(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder putToProperty(String name, Object value) {
-		super.putToProperty(name, value);
+	@Override /* ContextBuilder */
+	public PlainTextParserBuilder addTo(String name, String key, Object value) {
+		super.addTo(name, key, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder removeFromProperty(String name, Object value) {
-		super.removeFromProperty(name, value);
+	@Override /* ContextBuilder */
+	public PlainTextParserBuilder removeFrom(String name, Object value) {
+		super.removeFrom(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder classLoader(ClassLoader classLoader) {
-		super.classLoader(classLoader);
-		return this;
-	}
-
-	@Override /* CoreObjectBuilder */
-	public PlainTextParserBuilder apply(PropertyStore copyFrom) {
+	@Override /* ContextBuilder */
+	public PlainTextParserBuilder apply(PropertyStore2 copyFrom) {
 		super.apply(copyFrom);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserSession.java
index c4731fa..cc70042 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserSession.java
@@ -28,12 +28,15 @@ public class PlainTextParserSession extends ReaderParserSession {
 
 	/**
 	 * Create a new session using properties specified in the context.
-	 *
+	 * 
+	 * @param ctx
+	 * 	The parser creating this session object.
+	 * 	The parser contains all the configuration settings for this object.
 	 * @param args
 	 * 	Runtime session arguments.
 	 */
-	protected PlainTextParserSession(ParserSessionArgs args) {
-		super(null, args);
+	protected PlainTextParserSession(PlainTextParser ctx, ParserSessionArgs args) {
+		super(ctx, args);
 	}
 
 	@Override /* ParserSession */

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
index 55c15cc..2dcb84e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
@@ -41,29 +41,27 @@ public class PlainTextSerializer extends WriterSerializer {
 	//-------------------------------------------------------------------------------------------------------------------
 
 	/** Default serializer, all default settings.*/
-	public static final PlainTextSerializer DEFAULT = new PlainTextSerializer(PropertyStore.create());
+	public static final PlainTextSerializer DEFAULT = new PlainTextSerializer(PropertyStore2.DEFAULT);
 
 
 	//-------------------------------------------------------------------------------------------------------------------
 	// Instance
 	//-------------------------------------------------------------------------------------------------------------------
 
-	private final SerializerContext ctx;
-
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore
+	 * @param ps
 	 * 	The property store containing all the settings for this object.
 	 */
-	public PlainTextSerializer(PropertyStore propertyStore) {
-		this(propertyStore, "text/plain");
+	public PlainTextSerializer(PropertyStore2 ps) {
+		this(ps, "text/plain");
 	}
 
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore
+	 * @param ps
 	 * 	The property store containing all the settings for this object.
 	 * @param produces
 	 * 	The media type that this serializer produces.
@@ -81,15 +79,14 @@ public class PlainTextSerializer extends WriterSerializer {
 	 * 	<br>...or...
 	 * 	<br><code><jk>super</jk>(propertyStore, <js>"application/json"</js>, <js>"*&#8203;/json"</js>);</code>
 	 */
-	public PlainTextSerializer(PropertyStore propertyStore, String produces, String...accept) {
-		super(propertyStore, produces, accept);
-		this.ctx = createContext(SerializerContext.class);
+	public PlainTextSerializer(PropertyStore2 ps, String produces, String...accept) {
+		super(ps, produces, accept);
 	}
 
 
 	@Override /* CoreObject */
 	public PlainTextSerializerBuilder builder() {
-		return new PlainTextSerializerBuilder(propertyStore);
+		return new PlainTextSerializerBuilder(getPropertyStore());
 	}
 
 	/**
@@ -110,6 +107,6 @@ public class PlainTextSerializer extends WriterSerializer {
 
 	@Override /* Serializer */
 	public WriterSerializerSession createSession(SerializerSessionArgs args) {
-		return new PlainTextSerializerSession(ctx, args);
+		return new PlainTextSerializerSession(this, args);
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
index 56b684d..687924a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
@@ -33,15 +33,15 @@ public class PlainTextSerializerBuilder extends SerializerBuilder {
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore The initial configuration settings for this builder.
+	 * @param ps The initial configuration settings for this builder.
 	 */
-	public PlainTextSerializerBuilder(PropertyStore propertyStore) {
-		super(propertyStore);
+	public PlainTextSerializerBuilder(PropertyStore2 ps) {
+		super(ps);
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializer build() {
-		return new PlainTextSerializer(propertyStore);
+		return build(PlainTextSerializer.class);
 	}
 
 
@@ -175,416 +175,410 @@ public class PlainTextSerializerBuilder extends SerializerBuilder {
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beansRequireDefaultConstructor(boolean value) {
 		super.beansRequireDefaultConstructor(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beansRequireSerializable(boolean value) {
 		super.beansRequireSerializable(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beansRequireSettersForGetters(boolean value) {
 		super.beansRequireSettersForGetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beansRequireSomeProperties(boolean value) {
 		super.beansRequireSomeProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
 		super.beanMapPutReturnsOldValue(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanConstructorVisibility(Visibility value) {
 		super.beanConstructorVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanClassVisibility(Visibility value) {
 		super.beanClassVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanFieldVisibility(Visibility value) {
 		super.beanFieldVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder methodVisibility(Visibility value) {
 		super.methodVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder useJavaBeanIntrospector(boolean value) {
 		super.useJavaBeanIntrospector(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder useInterfaceProxies(boolean value) {
 		super.useInterfaceProxies(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
 		super.ignoreUnknownBeanProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
 		super.ignoreUnknownNullBeanProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
 		super.ignorePropertiesWithoutSetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
 		super.ignoreInvocationExceptionsOnGetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
 		super.ignoreInvocationExceptionsOnSetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder sortProperties(boolean value) {
 		super.sortProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder notBeanPackages(String...values) {
 		super.notBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder notBeanPackages(Collection<String> values) {
 		super.notBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setNotBeanPackages(String...values) {
 		super.setNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setNotBeanPackages(Collection<String> values) {
 		super.setNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removeNotBeanPackages(String...values) {
 		super.removeNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removeNotBeanPackages(Collection<String> values) {
 		super.removeNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder notBeanClasses(Class<?>...values) {
 		super.notBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder notBeanClasses(Collection<Class<?>> values) {
 		super.notBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setNotBeanClasses(Class<?>...values) {
 		super.setNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setNotBeanClasses(Collection<Class<?>> values) {
 		super.setNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removeNotBeanClasses(Class<?>...values) {
 		super.removeNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removeNotBeanClasses(Collection<Class<?>> values) {
 		super.removeNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanFilters(Class<?>...values) {
 		super.beanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanFilters(Collection<Class<?>> values) {
 		super.beanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setBeanFilters(Class<?>...values) {
 		super.setBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setBeanFilters(Collection<Class<?>> values) {
 		super.setBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removeBeanFilters(Class<?>...values) {
 		super.removeBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removeBeanFilters(Collection<Class<?>> values) {
 		super.removeBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder pojoSwaps(Class<?>...values) {
 		super.pojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder pojoSwaps(Collection<Class<?>> values) {
 		super.pojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setPojoSwaps(Class<?>...values) {
 		super.setPojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setPojoSwaps(Collection<Class<?>> values) {
 		super.setPojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removePojoSwaps(Class<?>...values) {
 		super.removePojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removePojoSwaps(Collection<Class<?>> values) {
 		super.removePojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder implClasses(Map<Class<?>,Class<?>> values) {
+	@Override /* ContextBuilder */
+	public PlainTextSerializerBuilder implClasses(Map<String,Class<?>> values) {
 		super.implClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public <T> PlainTextSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
 		super.implClass(interfaceClass, implClass);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder includeProperties(Map<String,String> values) {
 		super.includeProperties(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder includeProperties(String beanClassName, String properties) {
 		super.includeProperties(beanClassName, properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder includeProperties(Class<?> beanClass, String properties) {
 		super.includeProperties(beanClass, properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder excludeProperties(Map<String,String> values) {
 		super.excludeProperties(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder excludeProperties(String beanClassName, String properties) {
 		super.excludeProperties(beanClassName, properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder excludeProperties(Class<?> beanClass, String properties) {
 		super.excludeProperties(beanClass, properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanDictionary(Class<?>...values) {
 		super.beanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanDictionary(Collection<Class<?>> values) {
 		super.beanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setBeanDictionary(Class<?>...values) {
 		super.setBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder setBeanDictionary(Collection<Class<?>> values) {
 		super.setBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removeFromBeanDictionary(Class<?>...values) {
 		super.removeFromBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder removeFromBeanDictionary(Collection<Class<?>> values) {
 		super.removeFromBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder beanTypePropertyName(String value) {
 		super.beanTypePropertyName(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder defaultParser(Class<?> value) {
 		super.defaultParser(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder locale(Locale value) {
 		super.locale(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder timeZone(TimeZone value) {
 		super.timeZone(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder mediaType(MediaType value) {
 		super.mediaType(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public PlainTextSerializerBuilder debug() {
 		super.debug();
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder property(String name, Object value) {
-		super.property(name, value);
+	@Override /* ContextBuilder */
+	public PlainTextSerializerBuilder set(String name, Object value) {
+		super.set(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder properties(Map<String,Object> properties) {
-		super.properties(properties);
+	@Override /* ContextBuilder */
+	public PlainTextSerializerBuilder set(Map<String,Object> properties) {
+		super.set(properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder addToProperty(String name, Object value) {
-		super.addToProperty(name, value);
+	@Override /* ContextBuilder */
+	public PlainTextSerializerBuilder add(Map<String,Object> properties) {
+		super.add(properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder putToProperty(String name, Object key, Object value) {
-		super.putToProperty(name, key, value);
+	@Override /* ContextBuilder */
+	public PlainTextSerializerBuilder addTo(String name, Object value) {
+		super.addTo(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder putToProperty(String name, Object value) {
-		super.putToProperty(name, value);
+	@Override /* ContextBuilder */
+	public PlainTextSerializerBuilder addTo(String name, String key, Object value) {
+		super.addTo(name, key, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder removeFromProperty(String name, Object value) {
-		super.removeFromProperty(name, value);
+	@Override /* ContextBuilder */
+	public PlainTextSerializerBuilder removeFrom(String name, Object value) {
+		super.removeFrom(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder classLoader(ClassLoader classLoader) {
-		super.classLoader(classLoader);
-		return this;
-	}
-
-	@Override /* CoreObjectBuilder */
-	public PlainTextSerializerBuilder apply(PropertyStore copyFrom) {
+	@Override /* ContextBuilder */
+	public PlainTextSerializerBuilder apply(PropertyStore2 copyFrom) {
 		super.apply(copyFrom);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerSession.java
index 5915f82..31b88a5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerSession.java
@@ -35,7 +35,7 @@ public class PlainTextSerializerSession extends WriterSerializerSession {
 	 * 	It also include session-level properties that override the properties defined on the bean and
 	 * 	serializer contexts.
 	 */
-	protected PlainTextSerializerSession(SerializerContext ctx, SerializerSessionArgs args) {
+	protected PlainTextSerializerSession(PlainTextSerializer ctx, SerializerSessionArgs args) {
 		super(ctx, args);
 	}
 

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
index 2baede9..1387095 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
@@ -24,7 +24,7 @@ public abstract class OutputStreamSerializer extends Serializer {
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore
+	 * @param ps
 	 * 	The property store containing all the settings for this object.
 	 * @param produces
 	 * 	The media type that this serializer produces.
@@ -42,8 +42,8 @@ public abstract class OutputStreamSerializer extends Serializer {
 	 * 	<br>...or...
 	 * 	<br><code><jk>super</jk>(propertyStore, <js>"application/json"</js>, <js>"*&#8203;/json"</js>);</code>
 	 */
-	protected OutputStreamSerializer(PropertyStore propertyStore, String produces, String...accept) {
-		super(propertyStore, produces, accept);
+	protected OutputStreamSerializer(PropertyStore2 ps, String produces, String...accept) {
+		super(ps, produces, accept);
 	}
 
 

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerSession.java
index b03688e..46804bc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerSession.java
@@ -39,7 +39,7 @@ public abstract class OutputStreamSerializerSession extends SerializerSession {
 	 * 	It also include session-level properties that override the properties defined on the bean and
 	 * 	serializer contexts.
 	 */
-	protected OutputStreamSerializerSession(SerializerContext ctx, SerializerSessionArgs args) {
+	protected OutputStreamSerializerSession(Serializer ctx, SerializerSessionArgs args) {
 		super(ctx, args);
 	}
 
@@ -50,7 +50,7 @@ public abstract class OutputStreamSerializerSession extends SerializerSession {
 	 * 	Runtime session arguments.
 	 */
 	protected OutputStreamSerializerSession(SerializerSessionArgs args) {
-		this(null, args);
+		super(args);
 	}
 
 	@Override /* SerializerSession */