http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
new file mode 100644
index 0000000..64f9253
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
@@ -0,0 +1,864 @@
+// 
***************************************************************************************************************************
+// * 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.parser;
+
+import static org.apache.juneau.BeanContext.*;
+import static org.apache.juneau.parser.ParserContext.*;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+
+/**
+ * Builder class for creating instances of {@link ParserGroup}.
+ */
+public class ParserGroupBuilder {
+
+       private final List<Object> parsers;
+       private final PropertyStore propertyStore;
+
+       /**
+        * Create an empty parser group builder.
+        */
+       public ParserGroupBuilder() {
+               this.parsers = new ArrayList<Object>();
+               this.propertyStore = PropertyStore.create();
+       }
+
+       /**
+        * Clone an existing parser group builder.
+        * @param copyFrom The parser group that we're copying settings and 
parsers from.
+        */
+       public ParserGroupBuilder(ParserGroup copyFrom) {
+               this.parsers = new 
ArrayList<Object>(Arrays.asList(copyFrom.parsers));
+               this.propertyStore = copyFrom.createPropertyStore();
+       }
+
+       /**
+        * Registers the specified parsers with this group.
+        *
+        * @param p The parsers to append to this group.
+        * @return This object (for method chaining).
+        */
+       public ParserGroupBuilder append(Class<?>...p) {
+               parsers.addAll(Arrays.asList(p));
+               return this;
+       }
+
+       /**
+        * Registers the specified parsers with this group.
+        *
+        * @param p The parsers to append to this group.
+        * @return This object (for method chaining).
+        */
+       public ParserGroupBuilder append(Parser...p) {
+               parsers.addAll(Arrays.asList(p));
+               return this;
+       }
+
+       /**
+        * Registers the specified parsers with this group.
+        *
+        * @param p The parsers to append to this group.
+        * @return This object (for method chaining).
+        */
+       public ParserGroupBuilder append(List<Parser> p) {
+               parsers.addAll(p);
+               return this;
+       }
+
+       /**
+        * Creates a new {@link ParserGroup} object using a snapshot of the 
settings defined in this builder.
+        * <p>
+        * This method can be called multiple times to produce multiple parser 
groups.
+        *
+        * @return A new {@link ParserGroup} object.
+        */
+       @SuppressWarnings("unchecked")
+       public ParserGroup build() {
+               List<Parser> l = new ArrayList<Parser>();
+               for (Object p : parsers) {
+                       Class<? extends Parser> c = null;
+                       PropertyStore ps = propertyStore;
+                       if (p instanceof Class) {
+                               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);
+                               c = p2.getClass();
+                       }
+                       try {
+                               
l.add(c.getConstructor(PropertyStore.class).newInstance(ps));
+                       } catch (Exception e) {
+                               throw new RuntimeException("Could not 
instantiate parser " + c.getName(), e);
+                       }
+               }
+               return new ParserGroup(propertyStore, l.toArray(new 
Parser[l.size()]));
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       /**
+        * Sets a property on all parsers in this group.
+        *
+        * @param name The property name.
+        * @param value The property value.
+        * @return This object (for method chaining).
+        * @see PropertyStore#setProperty(String, Object)
+        */
+       public ParserGroupBuilder property(String name, Object value) {
+               propertyStore.setProperty(name, value);
+               return this;
+       }
+
+       /**
+        * Sets a set of properties on all parsers in this group.
+        *
+        * @param properties The properties to set on this class.
+        * @return This object (for method chaining).
+        * @see PropertyStore#setProperties(java.util.Map)
+        */
+       public ParserGroupBuilder properties(ObjectMap properties) {
+               propertyStore.setProperties(properties);
+               return this;
+       }
+
+       /**
+        * Adds a value to a SET property on all parsers in this group.
+        *
+        * @param name The property name.
+        * @param value The new value to add to the SET property.
+        * @return This object (for method chaining).
+        * @throws ConfigException If property is not a SET property.
+        */
+       public ParserGroupBuilder addToProperty(String name, Object value) {
+               propertyStore.addToProperty(name, value);
+               return this;
+       }
+
+       /**
+        * Adds or overwrites a value to a 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.
+        * @return This object (for method chaining).
+        * @throws ConfigException If property is not a MAP property.
+        */
+       public ParserGroupBuilder putToProperty(String name, Object key, Object 
value) {
+               propertyStore.putToProperty(name, key, value);
+               return this;
+       }
+
+       /**
+        * Adds or overwrites a value to a MAP property on all parsers in this 
group.
+        *
+        * @param name The property value.
+        * @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);
+               return this;
+       }
+
+       /**
+        * Removes a value from a SET property on all parsers in this group.
+        *
+        * @param name The property name.
+        * @param value The property value in the SET property.
+        * @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);
+               return this;
+       }
+
+       /**
+        * Sets the {@link ParserContext#PARSER_trimStrings} property on all 
parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see ParserContext#PARSER_trimStrings
+        */
+       public ParserGroupBuilder trimStrings(boolean value) {
+               return property(PARSER_trimStrings, value);
+       }
+
+       /**
+        * Sets the {@link ParserContext#PARSER_strict} property on all parsers 
in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see ParserContext#PARSER_strict
+        */
+       public ParserGroupBuilder strict(boolean value) {
+               return property(PARSER_strict, value);
+       }
+
+       /**
+        * Sets the {@link ParserContext#PARSER_inputStreamCharset} property on 
all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see ParserContext#PARSER_inputStreamCharset
+        */
+       public ParserGroupBuilder inputStreamCharset(String value) {
+               return property(PARSER_inputStreamCharset, value);
+       }
+
+       /**
+        * Sets the {@link ParserContext#PARSER_fileCharset} property on all 
parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see ParserContext#PARSER_fileCharset
+        */
+       public ParserGroupBuilder fileCharset(String value) {
+               return property(PARSER_fileCharset, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beansRequireDefaultConstructor} 
property on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beansRequireDefaultConstructor
+        */
+       public ParserGroupBuilder beansRequireDefaultConstructor(boolean value) 
{
+               return property(BEAN_beansRequireDefaultConstructor, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beansRequireSerializable} property 
on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beansRequireSerializable
+        */
+       public ParserGroupBuilder beansRequireSerializable(boolean value) {
+               return property(BEAN_beansRequireSerializable, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beansRequireSettersForGetters} 
property on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beansRequireSettersForGetters
+        */
+       public ParserGroupBuilder beansRequireSettersForGetters(boolean value) {
+               return property(BEAN_beansRequireSettersForGetters, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beansRequireSomeProperties} 
property on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beansRequireSomeProperties
+        */
+       public ParserGroupBuilder beansRequireSomeProperties(boolean value) {
+               return property(BEAN_beansRequireSomeProperties, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanMapPutReturnsOldValue} property 
on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanMapPutReturnsOldValue
+        */
+       public ParserGroupBuilder beanMapPutReturnsOldValue(boolean value) {
+               return property(BEAN_beanMapPutReturnsOldValue, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanConstructorVisibility} property 
on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanConstructorVisibility
+        */
+       public ParserGroupBuilder beanConstructorVisibility(Visibility value) {
+               return property(BEAN_beanConstructorVisibility, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanClassVisibility} property on 
all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanClassVisibility
+        */
+       public ParserGroupBuilder beanClassVisibility(Visibility value) {
+               return property(BEAN_beanClassVisibility, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanFieldVisibility} property on 
all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanFieldVisibility
+        */
+       public ParserGroupBuilder beanFieldVisibility(Visibility value) {
+               return property(BEAN_beanFieldVisibility, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_methodVisibility} property on all 
parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_methodVisibility
+        */
+       public ParserGroupBuilder methodVisibility(Visibility value) {
+               return property(BEAN_methodVisibility, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_useJavaBeanIntrospector} property 
on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_useJavaBeanIntrospector
+        */
+       public ParserGroupBuilder useJavaBeanIntrospector(boolean value) {
+               return property(BEAN_useJavaBeanIntrospector, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_useInterfaceProxies} property on 
all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_useInterfaceProxies
+        */
+       public ParserGroupBuilder useInterfaceProxies(boolean value) {
+               return property(BEAN_useInterfaceProxies, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_ignoreUnknownBeanProperties} 
property on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_ignoreUnknownBeanProperties
+        */
+       public ParserGroupBuilder ignoreUnknownBeanProperties(boolean value) {
+               return property(BEAN_ignoreUnknownBeanProperties, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_ignoreUnknownNullBeanProperties} 
property on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_ignoreUnknownNullBeanProperties
+        */
+       public ParserGroupBuilder ignoreUnknownNullBeanProperties(boolean 
value) {
+               return property(BEAN_ignoreUnknownNullBeanProperties, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_ignorePropertiesWithoutSetters} 
property on all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_ignorePropertiesWithoutSetters
+        */
+       public ParserGroupBuilder ignorePropertiesWithoutSetters(boolean value) 
{
+               return property(BEAN_ignorePropertiesWithoutSetters, value);
+       }
+
+       /**
+        * Sets the {@link 
BeanContext#BEAN_ignoreInvocationExceptionsOnGetters} property on all parsers 
in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_ignoreInvocationExceptionsOnGetters
+        */
+       public ParserGroupBuilder ignoreInvocationExceptionsOnGetters(boolean 
value) {
+               return property(BEAN_ignoreInvocationExceptionsOnGetters, 
value);
+       }
+
+       /**
+        * Sets the {@link 
BeanContext#BEAN_ignoreInvocationExceptionsOnSetters} property on all parsers 
in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_ignoreInvocationExceptionsOnSetters
+        */
+       public ParserGroupBuilder ignoreInvocationExceptionsOnSetters(boolean 
value) {
+               return property(BEAN_ignoreInvocationExceptionsOnSetters, 
value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_sortProperties} property on all 
parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_sortProperties
+        */
+       public ParserGroupBuilder sortProperties(boolean value) {
+               return property(BEAN_sortProperties, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanPackages_add} property on 
all parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanPackages_add
+        */
+       public ParserGroupBuilder notBeanPackages(String...values) {
+               return property(BEAN_notBeanPackages_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanPackages_add} property on 
all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanPackages_add
+        */
+       public ParserGroupBuilder notBeanPackages(Collection<String> value) {
+               return property(BEAN_notBeanPackages_add, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanPackages} property on all 
parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanPackages
+        */
+       public ParserGroupBuilder setNotBeanPackages(String...values) {
+               return property(BEAN_notBeanPackages, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanPackages} property on all 
parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanPackages
+        */
+       public ParserGroupBuilder setNotBeanPackages(Collection<String> values) 
{
+               return property(BEAN_notBeanPackages, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanPackages_remove} property on 
all parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanPackages
+        * @see BeanContext#BEAN_notBeanPackages_remove
+        */
+       public ParserGroupBuilder removeNotBeanPackages(String...values) {
+               return property(BEAN_notBeanPackages_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanPackages_remove} property on 
all parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanPackages
+        * @see BeanContext#BEAN_notBeanPackages_remove
+        */
+       public ParserGroupBuilder removeNotBeanPackages(Collection<String> 
values) {
+               return property(BEAN_notBeanPackages_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanClasses_add} property on all 
parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanClasses_add
+        */
+       public ParserGroupBuilder notBeanClasses(Class<?>...values) {
+               return property(BEAN_notBeanClasses_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanClasses_add} property on all 
parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanPackages_add
+        */
+       public ParserGroupBuilder notBeanClasses(Collection<Class<?>> values) {
+               return property(BEAN_notBeanClasses_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanClasses} property on all 
parsers in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanClasses
+        */
+       public ParserGroupBuilder setNotBeanClasses(Class<?>...values) {
+               return property(BEAN_notBeanClasses, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanClasses} property on all 
parsers in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanClasses
+        */
+       public ParserGroupBuilder setNotBeanClasses(Collection<Class<?>> 
values) {
+               return property(BEAN_notBeanClasses, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanClasses_remove} property on 
all parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanClasses_remove
+        */
+       public ParserGroupBuilder removeNotBeanClasses(Class<?>...values) {
+               return property(BEAN_notBeanClasses_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_notBeanClasses_remove} property on 
all parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_notBeanClasses_remove
+        */
+       public ParserGroupBuilder removeNotBeanClasses(Collection<Class<?>> 
values) {
+               return property(BEAN_notBeanClasses_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanFilters_add} property on all 
parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanFilters_add
+        */
+       public ParserGroupBuilder beanFilters(Class<?>...values) {
+               return property(BEAN_beanFilters_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanFilters_add} property on all 
parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanFilters_add
+        */
+       public ParserGroupBuilder beanFilters(Collection<Class<?>> values) {
+               return property(BEAN_beanFilters_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanFilters} property on all 
parsers in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanFilters
+        */
+       public ParserGroupBuilder setBeanFilters(Class<?>...values) {
+               return property(BEAN_beanFilters, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanFilters} property on all 
parsers in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanFilters
+        */
+       public ParserGroupBuilder setBeanFilters(Collection<Class<?>> values) {
+               return property(BEAN_beanFilters, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanFilters_remove} property on all 
parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanFilters_remove
+        */
+       public ParserGroupBuilder removeBeanFilters(Class<?>...values) {
+               return property(BEAN_beanFilters_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanFilters_remove} property on all 
parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanFilters_remove
+        */
+       public ParserGroupBuilder removeBeanFilters(Collection<Class<?>> 
values) {
+               return property(BEAN_beanFilters_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_pojoSwaps_add} property on all 
parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_pojoSwaps_add
+        */
+       public ParserGroupBuilder pojoSwaps(Class<?>...values) {
+               return property(BEAN_pojoSwaps_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_pojoSwaps_add} property on all 
parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_pojoSwaps_add
+        */
+       public ParserGroupBuilder pojoSwaps(Collection<Class<?>> values) {
+               return property(BEAN_pojoSwaps_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_pojoSwaps} property on all parsers 
in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_pojoSwaps
+        */
+       public ParserGroupBuilder setPojoSwaps(Class<?>...values) {
+               return property(BEAN_pojoSwaps, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_pojoSwaps} property on all parsers 
in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_pojoSwaps
+        */
+       public ParserGroupBuilder setPojoSwaps(Collection<Class<?>> values) {
+               return property(BEAN_pojoSwaps, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_pojoSwaps_remove} property on all 
parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_pojoSwaps_remove
+        */
+       public ParserGroupBuilder removePojoSwaps(Class<?>...values) {
+               return property(BEAN_pojoSwaps_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_pojoSwaps_remove} property on all 
parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_pojoSwaps_remove
+        */
+       public ParserGroupBuilder removePojoSwaps(Collection<Class<?>> values) {
+               return property(BEAN_pojoSwaps_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_implClasses} property on all 
parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_implClasses
+        */
+       public ParserGroupBuilder implClasses(Map<Class<?>,Class<?>> values) {
+               return property(BEAN_implClasses, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_implClasses_put} 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);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanDictionary_add} property on all 
parsers in this group.
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanDictionary_add
+        */
+       public ParserGroupBuilder beanDictionary(Class<?>...values) {
+               return property(BEAN_beanDictionary_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanDictionary_add} property on all 
parsers in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanDictionary_add
+        */
+       public ParserGroupBuilder beanDictionary(Collection<Class<?>> values) {
+               return property(BEAN_beanDictionary_add, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanDictionary} property on all 
parsers in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanDictionary
+        */
+       public ParserGroupBuilder setBeanDictionary(Class<?>...values) {
+               return property(BEAN_beanDictionary, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanDictionary} property on all 
parsers in this group.
+        *
+        * @param values The values to add to this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanDictionary
+        */
+       public ParserGroupBuilder setBeanDictionary(Collection<Class<?>> 
values) {
+               return property(BEAN_beanDictionary, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanDictionary_remove} property on 
all parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanDictionary_remove
+        */
+       public ParserGroupBuilder removeFromBeanDictionary(Class<?>...values) {
+               return property(BEAN_beanDictionary_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanDictionary_remove} property on 
all parsers in this group.
+        *
+        * @param values The values to remove from this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanDictionary_remove
+        */
+       public ParserGroupBuilder removeFromBeanDictionary(Collection<Class<?>> 
values) {
+               return property(BEAN_beanDictionary_remove, values);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_beanTypePropertyName} property on 
all parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_beanTypePropertyName
+        */
+       public ParserGroupBuilder beanTypePropertyName(String value) {
+               return property(BEAN_beanTypePropertyName, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_defaultParser} property on all 
parsers in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_defaultParser
+        */
+       public ParserGroupBuilder defaultParser(Class<?> value) {
+               return property(BEAN_defaultParser, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_locale} property on all parsers in 
this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_locale
+        */
+       public ParserGroupBuilder locale(Locale value) {
+               return property(BEAN_locale, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_timeZone} property on all parsers 
in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_timeZone
+        */
+       public ParserGroupBuilder timeZone(TimeZone value) {
+               return property(BEAN_timeZone, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_mediaType} property on all parsers 
in this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_mediaType
+        */
+       public ParserGroupBuilder mediaType(MediaType value) {
+               return property(BEAN_mediaType, value);
+       }
+
+       /**
+        * Sets the {@link BeanContext#BEAN_debug} property on all parsers in 
this group.
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see BeanContext#BEAN_debug
+        */
+       public ParserGroupBuilder debug(boolean value) {
+               return property(BEAN_debug, value);
+       }
+
+       /**
+        * 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;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/parser/ParserListener.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/parser/ParserListener.java 
b/juneau-core/src/main/java/org/apache/juneau/parser/ParserListener.java
index e675f5c..9c01704 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/ParserListener.java
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/ParserListener.java
@@ -19,7 +19,7 @@ import org.apache.juneau.*;
  * <p>
  * Listeners can be registered with parsers through the {@link 
Parser#addListener(ParserListener)} method.
  * <p>
- * It should be noted that listeners are not automatically copied over to new 
parsers when a parser is cloned.
+ * It should be noted that listeners are not automatically copied over to new 
parsers when a parser is cloned using the {@link Parser#builder()} method.
  */
 public class ParserListener {
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java 
b/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java
index 044038d..12d8677 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/ReaderParser.java
@@ -12,6 +12,7 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.parser;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 
 /**
@@ -33,6 +34,14 @@ import org.apache.juneau.annotation.*;
  */
 public abstract class ReaderParser extends Parser {
 
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       protected ReaderParser(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
        @Override /* Parser */
        public boolean isReaderParser() {
                return true;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/parser/package.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/parser/package.html 
b/juneau-core/src/main/java/org/apache/juneau/parser/package.html
index 3c38ac3..ea6b20d 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/package.html
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/package.html
@@ -123,7 +123,7 @@
        }
        </p>
        <p>
-               Parsers that take advantage of the entire {@link 
org.apache.juneau.CoreApi} interface to be able to parse arbitrary beans and 
POJOs is
+               Parsers that take advantage of the entire {@link 
org.apache.juneau.CoreObject} interface to be able to parse arbitrary beans and 
POJOs is
                        considerably more complex and outside the scope of this 
document.  
                If developing such a parser, the best course of action would be 
to replicate what occurs in the {@link org.apache.juneau.json.JsonParser} class.
        </p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java 
b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
index 86340c7..1006307 100644
--- a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
@@ -44,6 +44,24 @@ import org.apache.juneau.transform.*;
 @Consumes("text/plain")
 public final class PlainTextParser extends ReaderParser {
 
+       /** Default parser, all default settings.*/
+       public static final PlainTextParser DEFAULT = new 
PlainTextParser(PropertyStore.create());
+
+
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public PlainTextParser(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObject */
+       public PlainTextParserBuilder builder() {
+               return new PlainTextParserBuilder(propertyStore);
+       }
+
+
        
//--------------------------------------------------------------------------------
        // Overridden methods
        
//--------------------------------------------------------------------------------
@@ -52,13 +70,4 @@ public final class PlainTextParser extends ReaderParser {
        protected <T> T doParse(ParserSession session, ClassMeta<T> type) 
throws Exception {
                return session.convertToType(IOUtils.read(session.getReader()), 
type);
        }
-
-       @Override /* Lockable */
-       public PlainTextParser clone() {
-               try {
-                       return (PlainTextParser)super.clone();
-               } catch (CloneNotSupportedException e) {
-                       throw new RuntimeException(e); // Shouldn't happen.
-               }
-       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
new file mode 100644
index 0000000..febd91f
--- /dev/null
+++ 
b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
@@ -0,0 +1,457 @@
+// 
***************************************************************************************************************************
+// * 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.plaintext;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.parser.*;
+
+/**
+ * Builder class for building instances of plain-text parsers.
+ */
+public class PlainTextParserBuilder extends ParserBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public PlainTextParserBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public PlainTextParserBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParser build() {
+               return new PlainTextParser(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       @Override /* ParserBuilder */
+       public PlainTextParserBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public PlainTextParserBuilder strict(boolean value) {
+               super.strict(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public PlainTextParserBuilder strict() {
+               super.strict();
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public PlainTextParserBuilder inputStreamCharset(String value) {
+               super.inputStreamCharset(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public PlainTextParserBuilder fileCharset(String value) {
+               super.fileCharset(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beansRequireDefaultConstructor(boolean 
value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beansRequireSerializable(boolean value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beansRequireSettersForGetters(boolean 
value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beansRequireSomeProperties(boolean value) 
{
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanMapPutReturnsOldValue(boolean value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanConstructorVisibility(Visibility 
value) {
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanClassVisibility(Visibility value) {
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanFieldVisibility(Visibility value) {
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder useJavaBeanIntrospector(boolean value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder ignoreUnknownBeanProperties(boolean 
value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder ignoreUnknownNullBeanProperties(boolean 
value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder ignorePropertiesWithoutSetters(boolean 
value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder 
ignoreInvocationExceptionsOnGetters(boolean value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder 
ignoreInvocationExceptionsOnSetters(boolean value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder notBeanPackages(Collection<String> 
values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setNotBeanPackages(Collection<String> 
values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removeNotBeanPackages(Collection<String> 
values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder notBeanClasses(Collection<Class<?>> 
values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setNotBeanClasses(Collection<Class<?>> 
values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removeNotBeanClasses(Collection<Class<?>> 
values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanFilters(Collection<Class<?>> values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setBeanFilters(Collection<Class<?>> 
values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removeBeanFilters(Collection<Class<?>> 
values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder pojoSwaps(Collection<Class<?>> values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setPojoSwaps(Collection<Class<?>> values) 
{
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removePojoSwaps(Collection<Class<?>> 
values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder implClasses(Map<Class<?>,Class<?>> 
values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> PlainTextParserBuilder implClass(Class<T> interfaceClass, 
Class<? extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanDictionary(Collection<Class<?>> 
values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder setBeanDictionary(Collection<Class<?>> 
values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder 
removeFromBeanDictionary(Class<?>...values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder 
removeFromBeanDictionary(Collection<Class<?>> values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder properties(Map<String,Object> properties) 
{
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder addToProperty(String name, Object value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder putToProperty(String name, Object key, 
Object value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder putToProperty(String name, Object value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder removeFromProperty(String name, Object 
value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextParserBuilder apply(PropertyStore copyFrom) {
+               super.apply(copyFrom);
+               return this;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
 
b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
index 0cc9dcf..b49380f 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
@@ -43,6 +43,24 @@ import org.apache.juneau.transform.*;
 @Produces("text/plain")
 public final class PlainTextSerializer extends WriterSerializer {
 
+       /** Default serializer, all default settings.*/
+       public static final PlainTextSerializer DEFAULT = new 
PlainTextSerializer(PropertyStore.create());
+
+
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public PlainTextSerializer(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObject */
+       public PlainTextSerializerBuilder builder() {
+               return new PlainTextSerializerBuilder(propertyStore);
+       }
+
+
        
//--------------------------------------------------------------------------------
        // Overridden methods
        
//--------------------------------------------------------------------------------
@@ -51,13 +69,4 @@ public final class PlainTextSerializer extends 
WriterSerializer {
        protected void doSerialize(SerializerSession session, Object o) throws 
Exception {
                session.getWriter().write(o == null ? "null" : 
session.convertToType(o, String.class));
        }
-
-       @Override /* Serializer */
-       public PlainTextSerializer clone() {
-               try {
-                       return (PlainTextSerializer)super.clone();
-               } catch (CloneNotSupportedException e) {
-                       throw new RuntimeException(e); // Shouldn't happen.
-               }
-       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
new file mode 100644
index 0000000..8ab1255
--- /dev/null
+++ 
b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
@@ -0,0 +1,528 @@
+// 
***************************************************************************************************************************
+// * 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.plaintext;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.serializer.*;
+
+/**
+ * Builder class for building instances of plain-text serializers.
+ */
+public class PlainTextSerializerBuilder extends SerializerBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public PlainTextSerializerBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public PlainTextSerializerBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializer build() {
+               return new PlainTextSerializer(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder maxDepth(int value) {
+               super.maxDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder initialDepth(int value) {
+               super.initialDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder detectRecursions(boolean value) {
+               super.detectRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder ignoreRecursions(boolean value) {
+               super.ignoreRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder useWhitespace(boolean value) {
+               super.useWhitespace(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder ws() {
+               super.ws();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder addBeanTypeProperties(boolean value) {
+               super.addBeanTypeProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder quoteChar(char value) {
+               super.quoteChar(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder sq() {
+               super.sq();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder trimNullProperties(boolean value) {
+               super.trimNullProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder trimEmptyCollections(boolean value) {
+               super.trimEmptyCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder trimEmptyMaps(boolean value) {
+               super.trimEmptyMaps(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder relativeUriBase(String value) {
+               super.relativeUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder absolutePathUriBase(String value) {
+               super.absolutePathUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder sortCollections(boolean value) {
+               super.sortCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public PlainTextSerializerBuilder sortMaps(boolean value) {
+               super.sortMaps(value);
+               return this;
+       }
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
beansRequireDefaultConstructor(boolean value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beansRequireSerializable(boolean 
value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beansRequireSettersForGetters(boolean 
value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beansRequireSomeProperties(boolean 
value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanMapPutReturnsOldValue(boolean 
value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanConstructorVisibility(Visibility 
value) {
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanClassVisibility(Visibility value) 
{
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanFieldVisibility(Visibility value) 
{
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder useJavaBeanIntrospector(boolean 
value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder ignoreUnknownBeanProperties(boolean 
value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
ignoreUnknownNullBeanProperties(boolean value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
ignorePropertiesWithoutSetters(boolean value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
ignoreInvocationExceptionsOnGetters(boolean value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
ignoreInvocationExceptionsOnSetters(boolean value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder notBeanPackages(Collection<String> 
values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder setNotBeanPackages(Collection<String> 
values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
removeNotBeanPackages(Collection<String> values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder notBeanClasses(Collection<Class<?>> 
values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
setNotBeanClasses(Collection<Class<?>> values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
removeNotBeanClasses(Collection<Class<?>> values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanFilters(Collection<Class<?>> 
values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder setBeanFilters(Collection<Class<?>> 
values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
removeBeanFilters(Collection<Class<?>> values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder pojoSwaps(Collection<Class<?>> 
values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder setPojoSwaps(Collection<Class<?>> 
values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder removePojoSwaps(Collection<Class<?>> 
values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder implClasses(Map<Class<?>,Class<?>> 
values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> PlainTextSerializerBuilder implClass(Class<T> 
interfaceClass, Class<? extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanDictionary(Collection<Class<?>> 
values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
setBeanDictionary(Collection<Class<?>> values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
removeFromBeanDictionary(Class<?>...values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder 
removeFromBeanDictionary(Collection<Class<?>> values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder properties(Map<String,Object> 
properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder addToProperty(String name, Object 
value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder putToProperty(String name, Object 
key, Object value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder putToProperty(String name, Object 
value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder removeFromProperty(String name, 
Object value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public PlainTextSerializerBuilder apply(PropertyStore copyFrom) {
+               super.apply(copyFrom);
+               return this;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
 
b/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
index 1c2a2d2..bbfcfb2 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
@@ -14,6 +14,7 @@ package org.apache.juneau.serializer;
 
 import java.io.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.internal.*;
 
@@ -37,7 +38,15 @@ import org.apache.juneau.internal.*;
  */
 public abstract class OutputStreamSerializer extends Serializer {
 
-       @Override /* Serializer */
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       protected OutputStreamSerializer(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+               @Override /* Serializer */
        public boolean isWriterSerializer() {
                return false;
        }

Reply via email to