diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JClassLiteral.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JClassLiteral.java
index 8e3305a..5184def 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JClassLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JClassLiteral.java
@@ -169,10 +169,7 @@
   private final JField field;
   private final JType refType;
 
-  /**
-   * This constructor is only used by {@link JProgram}.
-   */
-  JClassLiteral(SourceInfo sourceInfo, JType type, JField field) {
+  public JClassLiteral(SourceInfo sourceInfo, JType type, JField field) {
     super(sourceInfo);
     refType = type;
     this.field = field;
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JConstructor.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JConstructor.java
index 1ad7379..20bbbf8 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JConstructor.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JConstructor.java
@@ -30,15 +30,9 @@
    */
   private boolean isEmpty = false;
 
-  private JNonNullType newType;
-
-  /**
-   * These are only supposed to be constructed by JProgram.
-   */
-  JConstructor(SourceInfo info, JClassType enclosingType, JNonNullType newType) {
+  public JConstructor(SourceInfo info, JClassType enclosingType) {
     super(info, enclosingType.getShortName(), enclosingType,
         JPrimitiveType.VOID, false, false, true, false);
-    this.newType = newType;
   }
 
   @Override
@@ -57,7 +51,7 @@
   }
 
   public JNonNullType getNewType() {
-    return newType;
+    return getEnclosingType().getNonNull();
   }
 
   /**
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JField.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JField.java
index 279a12a..b0ff2fb 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JField.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JField.java
@@ -50,7 +50,7 @@
   private boolean isThisRef;
   private boolean isVolatile;
 
-  JField(SourceInfo info, String name, JDeclaredType enclosingType, JType type,
+  public JField(SourceInfo info, String name, JDeclaredType enclosingType, JType type,
       boolean isStatic, Disposition disposition) {
     super(info, name, type, disposition.isFinal());
     this.enclosingType = enclosingType;
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JInterfaceType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JInterfaceType.java
index 46cce3e..bfec2b8 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JInterfaceType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JInterfaceType.java
@@ -22,7 +22,7 @@
  */
 public class JInterfaceType extends JDeclaredType {
 
-  JInterfaceType(SourceInfo info, String name) {
+  public JInterfaceType(SourceInfo info, String name) {
     super(info, name);
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
index 80b1d77..233c0e9 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
@@ -357,8 +357,6 @@
 
   private final Map<String, JDeclaredType> typeNameMap = new HashMap<String, JDeclaredType>();
 
-  private JNonNullType typeNonNullString;
-
   private JClassType typeSpecialClassLiteralHolder;
 
   private JClassType typeSpecialJavaScriptObject;
@@ -428,7 +426,6 @@
         typeJavaLangObject = x;
       } else if (name.equals("java.lang.String")) {
         typeString = x;
-        typeNonNullString = x.getNonNull();
       } else if (name.equals("java.lang.Enum")) {
         typeJavaLangEnum = x;
       } else if (name.equals("java.lang.Class")) {
@@ -445,8 +442,7 @@
 
   public JConstructor createConstructor(SourceInfo info,
       JClassType enclosingType) {
-    JConstructor x = new JConstructor(info, enclosingType,
-        enclosingType.getNonNull());
+    JConstructor x = new JConstructor(info, enclosingType);
     x.setBody(new JMethodBody(info));
     if (indexedTypes.containsValue(enclosingType)) {
       indexedMethods.put(enclosingType.getShortName() + '.'
@@ -938,7 +934,7 @@
     JStringLiteral toReturn = stringLiteralMap.get(s);
     if (toReturn == null) {
       toReturn = new JStringLiteral(stringPoolSourceInfo.makeChild(
-          JProgram.class, "String literal: " + s), s, typeNonNullString);
+          JProgram.class, "String literal: " + s), s, typeString);
       stringLiteralMap.put(s, toReturn);
     }
     toReturn.getSourceInfo().merge(sourceInfo);
@@ -1153,7 +1149,7 @@
   }
 
   public boolean isJavaLangString(JType type) {
-    return type == typeString || type == typeNonNullString;
+    return type == typeString || type == typeString.getNonNull();
   }
 
   public boolean isJavaScriptObject(JType type) {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java
index 894b765..ce1aae0 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java
@@ -22,13 +22,11 @@
  */
 public class JStringLiteral extends JValueLiteral {
 
-  private final JNonNullType stringType;
+  private final JClassType stringType;
   private final String value;
 
-  /**
-   * These are only supposed to be constructed by JProgram.
-   */
-  JStringLiteral(SourceInfo sourceInfo, String value, JNonNullType stringType) {
+  public JStringLiteral(SourceInfo sourceInfo, String value,
+      JClassType stringType) {
     super(sourceInfo);
     this.value = value;
     this.stringType = stringType;
@@ -40,7 +38,7 @@
   }
 
   public JNonNullType getType() {
-    return stringType;
+    return stringType.getNonNull();
   }
 
   public String getValue() {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
index cd1b578..0f18a51 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
@@ -1654,7 +1654,7 @@
       assert (elementDecl.initializer == null);
 
       JForStatement result;
-      if (x.collection.resolvedType.isArrayType()) {
+      if (x.collectionVariable != null) {
         /**
          * <pre>
          * for (final T[] i$array = collection,
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOutDir.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOutDir.java
index 26cd3b7..bcd8458 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOutDir.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOutDir.java
@@ -22,7 +22,7 @@
 /**
  * Argument handler for processing the output directory flag.
  */
-public final class ArgHandlerOutDir extends ArgHandlerDir {
+public class ArgHandlerOutDir extends ArgHandlerDir {
 
   private final OptionOutDir option;
 
