Index: src/test/verifiers/xpp3/expected.xml
===================================================================
--- src/test/verifiers/xpp3/expected.xml	(revision 584)
+++ src/test/verifiers/xpp3/expected.xml	(working copy)
@@ -6,7 +6,7 @@
     <l>3</l>
     <f>4.5</f>
     <d>5.6</d>
-    <date>Friday, 6 January 2006 12:00:00 AM EST</date>
+    <date>Friday, January 6, 2006 12:00:00 AM EST</date>
   </typeTester>
   <name>Maven</name>
   <component>
Index: src/test/verifiers/xpp3/Xpp3Verifier.java
===================================================================
--- src/test/verifiers/xpp3/Xpp3Verifier.java	(revision 584)
+++ src/test/verifiers/xpp3/Xpp3Verifier.java	(working copy)
@@ -43,8 +43,11 @@
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.text.SimpleDateFormat;
 import java.util.List;
+import java.util.Locale;
 import java.util.Properties;
+import java.util.TimeZone;
 
 /**
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
@@ -210,7 +213,9 @@
         typeTester.setD( 5.6 );
         try
         {
-            typeTester.setDate( new java.text.SimpleDateFormat( "yyyy-MM-dd" ).parse( "2006-01-06" ) );
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", new Locale("en"));
+            sdf.setTimeZone(TimeZone.getTimeZone("US/Eastern"));
+            typeTester.setDate( sdf.parse( "2006-01-06" ) );
         }
         catch ( java.text.ParseException e )
         {
Index: src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3ReaderGenerator.java
===================================================================
--- src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3ReaderGenerator.java	(revision 584)
+++ src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3ReaderGenerator.java	(working copy)
@@ -125,10 +125,17 @@
 
         jClass.addImport( "java.io.InputStreamReader" );
 
+        jClass.addImport("java.io.InputStream");
+
         jClass.addImport( "java.text.DateFormat" );
 
         jClass.addImport( "java.text.ParsePosition" );
 
+        jClass.addImport("java.util.Locale");
+        
+        jClass.addImport("java.util.TimeZone");
+        
+
         jClass.addImport( "java.util.regex.Matcher" );
 
         jClass.addImport( "java.util.regex.Pattern" );
@@ -177,38 +184,76 @@
         // ----------------------------------------------------------------------
 
         ModelClass root = objectModel.getClass( objectModel.getRoot( getGeneratedVersion() ), getGeneratedVersion() );
+        
+        JMethod unmarshall = new JMethod(new JClass(root.getName()), "read");
+        
+        unmarshall.addParameter(new JParameter(new JClass("XmlPullParser"), "parser"));
 
-        JMethod unmarshall = new JMethod( new JClass( root.getName() ), "read" );
-
-        unmarshall.addParameter( new JParameter( new JClass( "Reader" ), "reader" ) );
-
         unmarshall.addParameter( new JParameter( JClass.Boolean, "strict" ) );
 
+        unmarshall.addException( new JClass( "XmlPullParserException" ) );
         unmarshall.addException( new JClass( "IOException" ) );
-        unmarshall.addException( new JClass( "XmlPullParserException" ) );
+        
+        unmarshall.getModifiers().makePrivate();
 
         JSourceCode sc = unmarshall.getSourceCode();
+        
+        writeParserInitialization(sc);
 
-        sc.add( "XmlPullParser parser = new MXParser();" );
+        sc.add( "parser.next();" );
 
+        sc.add( "String encoding = parser.getInputEncoding();" );
+
         sc.add( "" );
 
-        sc.add( "parser.setInput( reader );" );
+        sc.add( "return parse" + root.getName() + "( \"" + getTagName( root ) + "\", parser, strict, encoding );" );
 
-        sc.add( "" );
+        jClass.addMethod( unmarshall );
+      
+        unmarshall = new JMethod(new JClass(root.getName()), "read");
+        
+        unmarshall.addParameter(new JParameter(new JClass("InputStream"), "input"));
+        unmarshall.addParameter(new JParameter(new JClass("String"), "encoding"));
+        unmarshall.addParameter( new JParameter( JClass.Boolean, "strict" ) );
 
-        writeParserInitialization( sc );
+        unmarshall.addException( new JClass( "IOException" ) );
+        unmarshall.addException( new JClass( "XmlPullParserException" ) );
 
+        sc = unmarshall.getSourceCode();
+        
+        sc.add( "XmlPullParser parser = new MXParser();" );
+        
         sc.add( "" );
+        
+        sc.add( "parser.setInput(input, encoding);" );
+        
+        sc.add( "" );
 
-        sc.add( "parser.next();" );
+        sc.add( "return read(parser, strict);" );
 
-        sc.add( "String encoding = parser.getInputEncoding();" );
+        jClass.addMethod(unmarshall);
 
+        unmarshall = new JMethod( new JClass( root.getName() ), "read" );
+
+        unmarshall.addParameter( new JParameter( new JClass( "Reader" ), "reader" ) );
+
+        unmarshall.addParameter( new JParameter( JClass.Boolean, "strict" ) );
+
+        unmarshall.addException( new JClass( "IOException" ) );
+        unmarshall.addException( new JClass( "XmlPullParserException" ) );
+
+        sc = unmarshall.getSourceCode();
+
+        sc.add( "XmlPullParser parser = new MXParser();" );
+
         sc.add( "" );
 
-        sc.add( "return parse" + root.getName() + "( \"" + getTagName( root ) + "\", parser, strict, encoding );" );
+        sc.add( "parser.setInput( reader );" );
 
+        sc.add( "" );
+
+        sc.add( "return read(parser, strict);" );
+
         jClass.addMethod( unmarshall );
 
         unmarshall = new JMethod( new JClass( root.getName() ), "read" );
@@ -223,6 +268,7 @@
 
         jClass.addMethod( unmarshall );
 
+        
         // ----------------------------------------------------------------------
         // Write the class parsers
         // ----------------------------------------------------------------------
@@ -1380,8 +1426,8 @@
 
         sc.indent();
 
-        sc.add( "DateFormat dateParser = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL );" );
-
+        sc.add( "DateFormat dateParser = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, new Locale(\"en\"));" );
+        sc.add( "dateParser.setTimeZone(TimeZone.getTimeZone(\"US/Eastern\"));");
         sc.add( "dateParser.setLenient( true );" );
 
         sc.add( "try" );
Index: src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3WriterGenerator.java
===================================================================
--- src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3WriterGenerator.java	(revision 584)
+++ src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3WriterGenerator.java	(working copy)
@@ -111,6 +111,12 @@
 
         jClass.addImport( "java.text.DateFormat" );
 
+        jClass.addImport("java.util.Locale");
+        
+        jClass.addImport("java.util.TimeZone");
+        
+        jClass.addImport("java.util.Date");
+
         jClass.addImport( "java.util.Iterator" );
 
         jClass.addField( new JField( new JClass( "org.codehaus.plexus.util.xml.pull.XmlSerializer" ), "serializer" ) );
@@ -166,6 +172,8 @@
         jClass.addMethod( marshall );
 
         writeAllClasses( objectModel, jClass );
+        
+        writeHelpers(jClass);
 
         jClass.print( sourceWriter );
 
@@ -451,6 +459,19 @@
 
         jClass.addMethod( marshall );
     }
+    
+    private void writeHelpers(JClass jClass) {
+        JMethod method = new JMethod(new JClass("String"), "dateToString");
+        method.addParameter(new JParameter(new JClass("Date"), "date"));
+        method.getModifiers().makePrivate();
+        JSourceCode sc = method.getSourceCode();
+        
+        sc.add( "DateFormat df = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, new Locale(\"en\"));");
+        sc.add("df.setTimeZone(TimeZone.getTimeZone(\"US/Eastern\"));");
+        sc.add("return df.format(date);");
+        
+        jClass.addMethod(method);
+    }
 
     private String getPrefix( JavaFieldMetadata javaFieldMetadata )
     {
@@ -464,7 +485,7 @@
         if ( "Date".equals( type ) )
         {
             textValue =
-                "DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL ).format( " + textValue + " )";
+                "dateToString( " + textValue + " )";
         }
         else if ( !"String".equals( type ) )
         {

