Index: stripes/src/net/sourceforge/stripes/tag/FormTag.java
===================================================================
--- stripes/src/net/sourceforge/stripes/tag/FormTag.java	(revision 1138)
+++ stripes/src/net/sourceforge/stripes/tag/FormTag.java	(working copy)
@@ -52,6 +52,9 @@
     /** Log used to log error and debugging information for this class. */
     private static final Log log = Log.getInstance(FormTag.class);
 
+    public static final String FP_NESTED_ATTR = "__fp_nested_attr";
+    public static final String FP_NESTED_ENCTYPE = "__fp_nested_enctype";
+
     /** Stores the field name (or magic values ''/'first') to set focus on. */
     private String focus;
     private boolean focusSet = false;
@@ -234,8 +237,10 @@
                 setMethod("post");
             }
 
+            String nestedEnctype = (String) pageContext.getRequest().getAttribute(FP_NESTED_ENCTYPE);
+
             set("method", getMethod());
-            set("enctype", getEnctype());
+            set("enctype", nestedEnctype == null ? getEnctype() : nestedEnctype);
             set("action", buildAction());
 
             JspWriter out = getPageContext().getOut();
@@ -258,6 +263,13 @@
                 out.write(CryptoUtil.encrypt(request.getServletPath()));
                 out.write("\" />");
 
+                Map<String,Class<?>> childFieldsPresent = (Map<String,Class<?>>) pageContext.getRequest().getAttribute(FP_NESTED_ATTR);
+                if (childFieldsPresent != null) {
+                  fieldsPresent.putAll(childFieldsPresent);
+                  pageContext.getRequest().setAttribute(FP_NESTED_ATTR, null);
+                }
+                pageContext.getRequest().setAttribute(FP_NESTED_ENCTYPE, null);
+
                 if (isWizard()) {
                     writeWizardFields();
                 }
@@ -266,7 +278,19 @@
                 out.write("</div>");
 
                 writeCloseTag(getPageContext().getOut(), "form");
+            } else {
+              if (! fieldsPresent.isEmpty()) {
+                Map<String,Class<?>> parentFieldsPresent = (Map<String,Class<?>>) pageContext.getRequest().getAttribute(FP_NESTED_ATTR);
+                if (parentFieldsPresent == null) {
+                  parentFieldsPresent = new HashMap<String,Class<?>>();
+                  pageContext.getRequest().setAttribute(FP_NESTED_ATTR, parentFieldsPresent);
             }
+                parentFieldsPresent.putAll(fieldsPresent);
+              }
+              if (getEnctype() != null) {
+                pageContext.getRequest().setAttribute(FP_NESTED_ENCTYPE, getEnctype());
+              }
+            }
 
             // Write out a warning if focus didn't find a field
             if (this.focus != null && !this.focusSet) {


