diff --git a/examples/example/src/main/scala/net/liftweb/example/snippet/Wizard.scala b/examples/example/src/main/scala/net/liftweb/example/snippet/Wizard.scala
index 3df412f..d08fd39 100644
--- a/examples/example/src/main/scala/net/liftweb/example/snippet/Wizard.scala
+++ b/examples/example/src/main/scala/net/liftweb/example/snippet/Wizard.scala
@@ -64,6 +64,12 @@ object MyWizard extends Wizard {
                         valMaxLen(40, S ? "Name Too Long"))
   }
 
+  // we show all fields
+  val confirmation = new Screen {
+    override def confirmScreen_? = true
+    override def screenTop = <div><b>Please check again all fields</b></div>
+  }
+
   // what to do on completion of the wizard
   def finish() {
     S.notice("Thank you for registering your pet")
diff --git a/examples/example/src/main/webapp/templates-hidden/wizard-all.html b/examples/example/src/main/webapp/templates-hidden/wizard-all.html
index e1ea727..50df908 100644
--- a/examples/example/src/main/webapp/templates-hidden/wizard-all.html
+++ b/examples/example/src/main/webapp/templates-hidden/wizard-all.html
@@ -1,8 +1,22 @@
 <div>
-  <wizard:screen_info><div>Page <wizard:screen_number></wizard:screen_number> of <wizard:total_screens></wizard:total_screens></div></wizard:screen_info>
-  <wizard:wizard_top> <div> <wizard:bind></wizard:bind> </div> </wizard:wizard_top>
-  <wizard:screen_top> <div> <wizard:bind></wizard:bind> </div> </wizard:screen_top>
-  <wizard:errors> <div> <ul> <wizard:item> <li> <wizard:bind></wizard:bind> </li> </wizard:item> </ul> </div> </wizard:errors>
+  <div>Page <wizard:screen><wizard:screen_number/></wizard:screen> of <wizard:total_screens/></div>
+  <wizard:wizard_top> <div> <wizard:bind/> </div> </wizard:wizard_top>
+  <wizard:screen_top> <div> <wizard:bind/> </div> </wizard:screen_top>
+  <wizard:errors> <div> <ul> <wizard:item> <li> <wizard:bind/> </li> </wizard:item> </ul> </div> </wizard:errors>
+    <wizard:wizard_confirm>
+        <div class="span-12 last">
+            <hr/>
+            <wizard:confirm_screen>
+                   <wizard:screen_top> <div> <wizard:bind/> </div> </wizard:screen_top>
+                <wizard:fields>
+                        <wizard:line>
+                            <div class="span-6"><wizard:label><wizard:bind/></wizard:label></div>
+                            <div class="span-6 last"><wizard:form/></div>
+                        </wizard:line>
+                </wizard:fields>
+            </wizard:confirm_screen>
+        </div>
+    </wizard:wizard_confirm>
   <div>
     <wizard:fields>
       <table>
@@ -11,26 +25,26 @@
               <td>
 		<wizard:label>
 		  <label wizard:for="">
-		    <wizard:bind></wizard:bind>
+		    <wizard:bind/>
 		  </label>
 		</wizard:label>
 		<wizard:help>
 		  <span>
-		    <wizard:bind></wizard:bind>
+		    <wizard:bind/>
 		  </span>
 		</wizard:help>
 		<wizard:field_errors>
 		  <ul>
 		    <wizard:error>
 		      <li>
-			<wizard:bind></wizard:bind>
+			<wizard:bind/>
 		      </li>
-		    </wizard:error> 
+		    </wizard:error>
 		  </ul>
 		</wizard:field_errors>
               </td>
               <td>
-		<wizard:form></wizard:form>
+		<wizard:form/>
 	      </td>
             </tr>
 	</tbody>
@@ -39,19 +53,19 @@
   </div>
   <div>
     <table>
-      <tr> 
+      <tr>
 	<td>
-	  <wizard:prev></wizard:prev> 
+	  <wizard:prev/>
 	</td>
 	<td>
-	  <wizard:cancel></wizard:cancel>
+	  <wizard:cancel/>
 	</td>
 	<td>
-	  <wizard:next></wizard:next>
+	  <wizard:next/>
 	</td>
       </tr>
     </table>
   </div>
-  <wizard:screen_bottom> <div> <wizard:bind></wizard:bind> </div> </wizard:screen_bottom>
-  <wizard:wizard_bottom> <div> <wizard:bind></wizard:bind> </div> </wizard:wizard_bottom>
+  <wizard:screen_bottom> <div> <wizard:bind/> </div> </wizard:screen_bottom>
+  <wizard:wizard_bottom> <div> <wizard:bind/> </div> </wizard:wizard_bottom>
 </div>
diff --git a/examples/example/src/main/webapp/wiz.html b/examples/example/src/main/webapp/wiz.html
index 3f924df..485a6b6 100644
--- a/examples/example/src/main/webapp/wiz.html
+++ b/examples/example/src/main/webapp/wiz.html
@@ -97,6 +97,12 @@
     }
   }
 
+  <span class="comment-delimiter">// </span><span class="comment">we show all fields
+</span>  <span class="keyword">val</span> <span class="variable-name">confirmation</span> = <span class="keyword">new</span> Screen {
+      <span class="keyword">override</span> <span class="keyword">def</span> <span class="function-name">confirmScreen_?</span> = <span class="constant">true</span>
+      <span class="keyword">override</span> <span class="keyword">def</span> <span class="function-name">screenTop</span> = &lt;div&gt;&lt;b&gt;Please check again all fields&lt;/b&gt;&lt;/div&gt;
+  }
+
   <span class="comment-delimiter">// </span><span class="comment">what to do on completion of the wizard
 </span>  <span class="keyword">def</span> <span class="function-name">finish</span>() {
     S.notice(<span class="string">"Thank you for registering your pet"</span>)
diff --git a/examples/example/src/test/scala/webapptest/JettyTestServer.scala b/examples/example/src/test/scala/webapptest/JettyTestServer.scala
index 578a0cc..a702467 100644
--- a/examples/example/src/test/scala/webapptest/JettyTestServer.scala
+++ b/examples/example/src/test/scala/webapptest/JettyTestServer.scala
@@ -118,6 +118,10 @@ object WizardSpec extends Specification {
 
       MyWizard.nextScreen
 
+      MyWizard.currentScreen.open_! must_== MyWizard.confirmation
+
+      MyWizard.nextScreen
+
       MyWizard.currentScreen must_== Empty
 
       MyWizard.completeInfo.is must_== true
@@ -168,6 +172,10 @@ object WizardSpec extends Specification {
 
       MyWizard.nextScreen
 
+      MyWizard.currentScreen.open_! must_== MyWizard.confirmation
+
+      MyWizard.nextScreen
+
       MyWizard.currentScreen must_== Empty
 
       MyWizard.completeInfo.is must_== true
diff --git a/framework/lift-base/lift-webkit/src/main/scala/net/liftweb/http/LiftScreen.scala b/framework/lift-base/lift-webkit/src/main/scala/net/liftweb/http/LiftScreen.scala
index eb8b57c..8f62685 100644
--- a/framework/lift-base/lift-webkit/src/main/scala/net/liftweb/http/LiftScreen.scala
+++ b/framework/lift-base/lift-webkit/src/main/scala/net/liftweb/http/LiftScreen.scala
@@ -183,10 +183,10 @@ private[liftweb] trait AbstractScreen extends Factory {
 
   protected class FieldBuilder[T](name: => String,
                                   default: => T,
-                                  manifest: Manifest[T],
-                                  help: Box[NodeSeq],
-                                  validations: List[T => List[FieldError]],
-                                  filters: List[T => T])
+                                  val manifest: Manifest[T],
+                                  val help: Box[NodeSeq],
+                                  val validations: List[T => List[FieldError]],
+                                  val filters: List[T => T])
   {
     /**
      * Set the Help HTML
@@ -202,7 +202,7 @@ private[liftweb] trait AbstractScreen extends Factory {
                         manifest, help, validations, filters ::: List(f))
 
     /**
-     * Add a validtion (the wacky symbols are supposed to look like a check mark)
+     * Add a validation (the wacky symbols are supposed to look like a check mark)
      */
     def ^/(f: T => List[FieldError]): FieldBuilder[T] =
     new FieldBuilder[T](name, default,
@@ -241,7 +241,7 @@ private[liftweb] trait AbstractScreen extends Factory {
    * the returned FieldBuilder to convert it into a field
    *
    * @param name - the name of the field.  This is a call-by-name parameter, so you can dynamically calculate
-   * the name of the fiels (e.g., localize its name)
+   * the name of the fields (e.g., localize its name)
    * @param default - the default value of the field
    * @param validate - any validation functions
    */
@@ -250,6 +250,17 @@ private[liftweb] trait AbstractScreen extends Factory {
     case AVal(v) => List(v) case _ => Nil}, stuff.toList.flatMap{
     case AFilter(v) => List(v) case _ => Nil})
 
+  /**
+   * Create a field with a name, default value, and
+   *
+   * @param name - the name of the field.  This is a call-by-name parameter, so you can dynamically calculate
+   * the name of the field (e.g., localize its name)
+   * @param default - the default value of the field
+   * @param validate - any validation functions
+   */
+  protected def field[T](name: => String, default: => T, stuff: FilterOrValidate[T]*)(implicit man: Manifest[T]): Field{type ValueType = T} =
+  builder[T](name, default, stuff: _*).make
+
   protected object FilterOrValidate {
     implicit def promoteFilter[T](f: T => T): FilterOrValidate[T] = AFilter(f)  
     implicit def promoteValidate[T](v: T => List[FieldError]): FilterOrValidate[T] = AVal(v)  
@@ -264,19 +275,6 @@ private[liftweb] trait AbstractScreen extends Factory {
   protected final case class AFilter[T](val f: T => T) extends FilterOrValidate[T]
   protected final case class AVal[T](val v: T => List[FieldError]) extends FilterOrValidate[T]
 
-  /**
-   * Create a field with a name, default value, and
-   *
-   * @param name - the name of the field.  This is a call-by-name parameter, so you can dynamically calculate
-   * the name of the fiels (e.g., localize its name)
-   * @param default - the default value of the field
-   * @param validate - any validation functions
-   */
-  protected def field[T](name: => String, default: => T, stuff: FilterOrValidate[T]*)(implicit man: Manifest[T]): Field{type ValueType = T} =
-  new FieldBuilder[T](name, default, man, Empty, stuff.toList.flatMap{
-    case AVal(v) => List(v) case _ => Nil}, stuff.toList.flatMap{
-    case AFilter(v) => List(v) case _ => Nil}).make
-
   protected def removeRegExChars(regEx: String): String => String =
   s => s match {
     case null => null
@@ -577,26 +575,27 @@ private[liftweb] trait AbstractScreen extends Factory {
 
 
 trait ScreenWizardRendered {
-  protected def renderAll(currentScreenNumber: Box[NodeSeq],
+  protected def renderAll(
                           screenCount: Box[NodeSeq],
                           wizardTop: Box[Elem],
-                          screenTop: Box[Elem],
-                          fields: List[ScreenFieldInfo],
+                          screenInfo: (AbstractScreen,List[ScreenFieldInfo],List[ScreenFieldInfo],Box[NodeSeq]),
                           prev: Box[Elem],
                           cancel: Box[Elem],
                           next: Box[Elem],
                           finish: Box[Elem],
-                          screenBottom: Box[Elem],
                           wizardBottom: Box[Elem],
                           nextId: (String, () => Unit),
                           prevId: Box[(String, () => Unit)],
                           cancelId: (String, () => Unit),
-                          theScreen: AbstractScreen): NodeSeq = {
+                          confirmWizard: Boolean,
+                          confirmScreens: List[(AbstractScreen,List[ScreenFieldInfo],List[ScreenFieldInfo],Box[NodeSeq])]): NodeSeq = {
+
+    val theScreen = screenInfo._1
 
     val notices: List[(NoticeType.Value, NodeSeq, Box[String])] = S.getAllNotices
 
 
-    def bindFieldLine(xhtml: NodeSeq): NodeSeq = {
+    def bindFieldLine(xhtml: NodeSeq, fields: List[ScreenFieldInfo]): NodeSeq = {
       fields.flatMap {
         f =>
         val curId = f.field.uniqueFieldId openOr randomString(20)
@@ -659,11 +658,11 @@ trait ScreenWizardRendered {
 
 
 
-    def bindFields(xhtml: NodeSeq): NodeSeq =
+    def bindFields(screen: AbstractScreen, screenFields:List[ScreenFieldInfo], xhtml: NodeSeq): NodeSeq =
     (<form id={nextId._1} action={url} method="post">{S.formGroup(-1)(SHtml.hidden(() =>
-            snapshot.restore()))}{bind("wizard", xhtml, "line" -%> bindFieldLine _)}{S.formGroup(4)(SHtml.hidden(() =>
+            snapshot.restore()))}{bind("wizard", xhtml, "line" -%> (lineXml => bindFieldLine(lineXml,screenFields)))}{S.formGroup(4)(SHtml.hidden(() =>
             {nextId._2(); val localSnapshot = createSnapshot; S.seeOther(url, () => localSnapshot.restore)}))}</form> %
-      theScreen.additionalAttributes) ++
+      screen.additionalAttributes) ++
     prevId.toList.map{case (id, func) =>
         <form id={id} action={url} method="post">{SHtml.hidden(() => {snapshot.restore(); func();
                                                                       val localSnapshot = createSnapshot;
@@ -675,24 +674,53 @@ trait ScreenWizardRendered {
             S.seeOther(Referer.is)
           })}</form>
 
-    def bindScreenInfo(xhtml: NodeSeq): NodeSeq = (currentScreenNumber, screenCount) match {
-      case (Full(num), Full(cnt)) =>
-        bind("wizard", xhtml, "screen_number" -%> num/*Text(CurrentScreen.is.map(s => (s.myScreenNum + 1).toString) openOr "")*/,
-             "total_screens" -%> cnt /*Text(screenCount.toString)*/)
-      case _ => NodeSeq.Empty
+    def bindConfirmFields(screen: AbstractScreen, screenFields:List[ScreenFieldInfo], xhtml: NodeSeq): NodeSeq =
+    bind("wizard", xhtml, "line" -%> (lineXml => bindFieldLine(lineXml,screenFields)))
+
+    def bindScreenInfo(screenInfo: (AbstractScreen, List[ScreenFieldInfo], List[ScreenFieldInfo], Box[NodeSeq]), xhtml: NodeSeq): NodeSeq = screenInfo match {
+      case (screen, screenFields, confirmFields, screenNumber) =>
+        bind("wizard", xhtml,
+          "screen_number" -%> screenNumber /*Text(CurrentScreen.is.map(s => (s.myScreenNum + 1).toString) openOr "")*/ ,
+          "screen_name" -%> screen.screenNameAsHtml,
+          FuncBindParam("screen_top", xml => (screen.screenTop.map(top => bind("wizard", xml, "bind" -%> top)) openOr NodeSeq.Empty)),
+          FuncBindParam("screen_bottom", xml => (screen.screenBottom.map(bottom => bind("wizard", xml, "bind" -%> bottom)) openOr NodeSeq.Empty)),
+          FuncBindParam("fields", bindFields(screen, screenFields, _)),
+          "prev" -%> (prev openOr EntityRef("nbsp")),
+          "next" -%> ((next or finish) openOr EntityRef("nbsp")),
+          "cancel" -%> (cancel openOr EntityRef("nbsp"))
+        )
+    //case _ => NodeSeq.Empty
     }
 
+    def bindConfirmScreenInfo(screenInfo: (AbstractScreen, List[ScreenFieldInfo], List[ScreenFieldInfo], Box[NodeSeq]), xhtml: NodeSeq): NodeSeq = screenInfo match {
+      case (screen, screenFields, confirmFields, screenNumber) =>
+        bind("wizard", xhtml,
+          "screen_number" -%> screenNumber,
+          "screen_name" -%> screen.screenNameAsHtml,
+          FuncBindParam("screen_top", xml => (screen.screenTop.map(top => bind("wizard", xml, "bind" -%> top)) openOr NodeSeq.Empty)),
+          FuncBindParam("screen_bottom", xml => (screen.screenBottom.map(bottom => bind("wizard", xml, "bind" -%> bottom)) openOr NodeSeq.Empty)),
+          FuncBindParam("fields", bindConfirmFields(screen, confirmFields, _))
+        )
+    }
+
+    def bindConfirm(xhtml: NodeSeq): NodeSeq =
+      if (confirmWizard) bind("wizard", xhtml, "confirm_screen" -%>
+        (innerXml => confirmScreens.flatMap{bindConfirmScreenInfo(_, innerXml)}))
+      else NodeSeq.Empty
+
     Helpers.bind("wizard", allTemplate,
-                 "screen_info" -%> bindScreenInfo _,
+                 "total_screens" -%> screenCount,
+                 FuncBindParam("screen", bindScreenInfo(screenInfo,_)),
                  FuncBindParam("wizard_top", xml => (wizardTop.map(top => bind("wizard", xml, "bind" -%> top)) openOr NodeSeq.Empty)),
-                 FuncBindParam("screen_top", xml => (screenTop.map(top => bind("wizard", xml, "bind" -%> top)) openOr NodeSeq.Empty)),
+                 FuncBindParam("screen_top", xml => (theScreen.screenTop.map(top => bind("wizard", xml, "bind" -%> top)) openOr NodeSeq.Empty)),
                  FuncBindParam("wizard_bottom", xml => (wizardBottom.map(bottom => bind("wizard", xml, "bind" -%> bottom)) openOr NodeSeq.Empty)),
-                 FuncBindParam("screen_bottom", xml => (screenBottom.map(bottom => bind("wizard", xml, "bind" -%> bottom)) openOr NodeSeq.Empty)),
+                 FuncBindParam("screen_bottom", xml => (theScreen.screenBottom.map(bottom => bind("wizard", xml, "bind" -%> bottom)) openOr NodeSeq.Empty)),
+                 FuncBindParam("wizard_confirm", bindConfirm _),
                  "prev" -%> (prev openOr EntityRef("nbsp")),
                  "next" -%> ((next or finish) openOr EntityRef("nbsp")),
                  "cancel" -%> (cancel openOr EntityRef("nbsp")),
                  "errors" -%> bindErrors _,
-                 FuncBindParam("fields", bindFields _))
+                 FuncBindParam("fields", bindFields(theScreen,screenInfo._2,_)))
 
   }
 
@@ -700,10 +728,11 @@ trait ScreenWizardRendered {
 
   protected def allTemplateNodeSeq: NodeSeq = {
     <div>
-      <wizard:screen_info><div>Page <wizard:screen_number/> of <wizard:total_screens/></div></wizard:screen_info>
+      <wizard:screen><div>Page <wizard:screen_number/> of <wizard:total_screens/></div></wizard:screen>
       <wizard:wizard_top> <div> <wizard:bind/> </div> </wizard:wizard_top>
       <wizard:screen_top> <div> <wizard:bind/> </div> </wizard:screen_top>
       <wizard:errors> <div> <ul> <wizard:item> <li> <wizard:bind/> </li> </wizard:item> </ul> </div> </wizard:errors>
+      {additionHeaderSeq}
       <div> <wizard:fields>
           <table>
             <wizard:line>
@@ -723,6 +752,8 @@ trait ScreenWizardRendered {
     </div>
   }
 
+  protected def additionHeaderSeq: NodeSeq = NodeSeq.Empty
+
   protected trait Snapshot {
     def restore(): Unit
   }
@@ -856,22 +887,21 @@ trait LiftScreen extends AbstractScreen with StatefulSnippet with ScreenWizardRe
 
 
     renderAll(
-      Empty, //currentScreenNumber: Box[NodeSeq],
           Empty, //screenCount: Box[NodeSeq],
           Empty, // wizardTop: Box[Elem],
-          theScreen.screenTop, //screenTop: Box[Elem],
-          theScreen.screenFields.flatMap(f =>
-        if (f.show_?) List(ScreenFieldInfo(f, f.displayHtml, f.helpAsHtml, f.toForm)) else Nil), //fields: List[ScreenFieldInfo],
+      (theScreen,theScreen.screenFields.flatMap(f =>
+        if (f.show_?) List(ScreenFieldInfo(f, f.displayHtml, f.helpAsHtml, f.toForm)) else Nil),List(),Empty), //fields: (AbstractScreen,List[ScreenFieldInfo],List[ScreenFieldInfo],Box[NodeSeq])
             Empty, // prev: Box[Elem],
             Full(cancelButton), // cancel: Box[Elem],
             Empty, // next: Box[Elem],
             Full(finishButton), //finish: Box[Elem],
-            theScreen.screenBottom, // screenBottom: Box[Elem],
             Empty, //wizardBottom: Box[Elem],
             finishId -> doFinish _, // nextId: (String, () => Unit),
             Empty, // prevId: Box[(String, () => Unit)],
             cancelId -> (() => {}), //cancelId: (String, () => Unit),
-            theScreen)
+            false,
+            List() //confirmScreens: List[(AbstractScreen,List[ScreenFieldInfo],List[ScreenFieldInfo],Box[NodeSeq])]
+      )
   }
 
   protected def allTemplatePath: List[String] = LiftScreenRules.allTemplatePath.vend
diff --git a/framework/lift-modules/lift-wizard/src/main/scala/net/liftweb/wizard/Wizard.scala b/framework/lift-modules/lift-wizard/src/main/scala/net/liftweb/wizard/Wizard.scala
index 0aa5fd6..1ca1780 100644
--- a/framework/lift-modules/lift-wizard/src/main/scala/net/liftweb/wizard/Wizard.scala
+++ b/framework/lift-modules/lift-wizard/src/main/scala/net/liftweb/wizard/Wizard.scala
@@ -142,17 +142,13 @@ trait Wizard extends StatefulSnippet with Factory with ScreenWizardRendered {
     val url = S.uri
 
   renderAll(
-    CurrentScreen.is.map(s => Text((s.myScreenNum + 1).toString)), //currentScreenNumber: Box[NodeSeq],
           Full(Text(screenCount.toString)), //screenCount: Box[NodeSeq],
           wizardTop, // wizardTop: Box[Elem],
-          theScreen.screenTop, //screenTop: Box[Elem],
-          theScreen.screenFields.flatMap(f =>
-        if (f.show_?) List(ScreenFieldInfo(f, f.displayHtml, f.helpAsHtml, f.toForm)) else Nil), //fields: List[ScreenFieldInfo],
+            screenRenderData(theScreen),
             prevButton, // prev: Box[Elem],
             Full(cancelButton), // cancel: Box[Elem],
             nextButton, // next: Box[Elem],
             finishButton, //finish: Box[Elem],
-            theScreen.screenBottom, // screenBottom: Box[Elem],
             wizardBottom, //wizardBottom: Box[Elem],
             nextId -> (() => {
       this.nextScreen
@@ -160,19 +156,67 @@ trait Wizard extends StatefulSnippet with Factory with ScreenWizardRendered {
     }), // nextId: (String, () => Unit),
             Full(prevId -> (() => {this.prevScreen})), // prevId: Box[(String, () => Unit)],
             cancelId -> (() => { WizardRules.deregisterWizardSession(CurrentSession.is)}), //cancelId: (String, () => Unit),
-            theScreen)
+            wizardConfirm,
+            if (wizardConfirm) confirmScreens.map(screenRenderData _) else List())
   }
 
-
   protected def allTemplatePath: List[String] = WizardRules.allTemplatePath.vend
 
   protected def allTemplate: NodeSeq = TemplateFinder.findAnyTemplate(allTemplatePath) openOr allTemplateNodeSeq
 
+  override protected def additionHeaderSeq: NodeSeq = {
+      <wizard:wizard_confirm>
+        <table>
+          <wizard:confirm_screen>
+          <wizard:fields>
+            <wizard:line>
+              <tr>
+                <td>
+                  <wizard:label><b><wizard:bind/>:</b></wizard:label>
+                </td>
+                <td><wizard:form/></td>
+              </tr>
+            </wizard:line>
+          </wizard:fields>
+          </wizard:confirm_screen>
+        </table>
+      </wizard:wizard_confirm>
+  }
+
   /**
    * What additional attributes should be put on the
    */
   protected def formAttrs: MetaData = scala.xml.Null
 
+  protected def screenRenderData(screen: Screen) = (screen,screenFields(screen),confirmScreenFields(screen),Full(Text((screen.myScreenNum + 1).toString)))
+
+  def confirmScreens(snapshot : Box[WizardSnapshot]): List[Screen] =
+    if (snapshot.isDefined) {
+      val screen = ((snapshot open_!).currentScreen  open_!)
+      if(screen.onConfirm_?)
+        screen :: confirmScreens((snapshot open_!).snapshot)
+      else confirmScreens((snapshot open_!).snapshot)
+    }
+    else List()
+
+  /**
+   * Defines screens visible on the wizard confirmation (and their order)
+   */
+  protected def confirmScreens: List[Screen] =
+    confirmScreens(PrevSnapshot.is).reverse
+
+  protected def confirmScreenFields(screen: Screen): List[ScreenFieldInfo]=  screen.screenFields.flatMap(f =>
+        if (f.onConfirm_?) List(ScreenFieldInfo(f, f.displayHtml, f.helpAsHtml, Full(f.asHtml))) else Nil)
+
+  protected def screenFields(screen: Screen): List[ScreenFieldInfo]=  screen.screenFields.flatMap(f =>
+        if (f.show_?) List(ScreenFieldInfo(f, f.displayHtml, f.helpAsHtml, f.toForm)) else Nil)
+
+
+  /**
+   * whether to show wizard confirmation on current screen
+   */
+  protected def wizardConfirm: Boolean = (currentScreen open_!).confirmScreen_?
+
   protected def wizardTop: Box[Elem] = None
 
   protected def wizardBottom: Box[Elem] = None
@@ -307,7 +351,7 @@ trait Wizard extends StatefulSnippet with Factory with ScreenWizardRendered {
   protected def vendForm[T](implicit man: Manifest[T]): Box[(T, T => Unit) => NodeSeq] = Empty
 
   /**
-   * By default, are all the fields on all the screen in this wizardn on the confirm screen?
+   * By default, are all the fields on all the screen in this wizard on the confirm screen?
    */
   def onConfirm_? = true
 
@@ -334,6 +378,77 @@ trait Wizard extends StatefulSnippet with Factory with ScreenWizardRendered {
 
     def isLastScreen = nextScreen.isEmpty
 
+  override protected def builder[T](name: => String, default: => T, stuff: FilterOrValidate[T]*)(implicit man: Manifest[T]): FieldBuilder[T] =
+  new FieldBuilder[T](name, default, man, Empty, true,true, stuff.toList.flatMap{
+    case AVal(v) => List(v) case _ => Nil}, stuff.toList.flatMap{
+    case AFilter(v) => List(v) case _ => Nil})
+
+  override protected def field[T](name: => String, default: => T, stuff: FilterOrValidate[T]*)(implicit man: Manifest[T]): Field{type ValueType = T} =
+  builder[T](name, default, stuff: _*).make
+
+  protected class FieldBuilder[T](name: => String,
+                                  default: => T,
+                                  manifest: Manifest[T],
+                                  help: Box[NodeSeq],
+                                  showField: Boolean,
+                                  onConfirm: Boolean,
+                                  validations: List[T => List[FieldError]],
+                                  filters: List[T => T]) extends super.FieldBuilder[T](name,default,manifest,help,validations,filters)
+  {
+      /**
+       * Show or not to show field on screen
+       */
+    def show(showField: Boolean) = new FieldBuilder[T](name, default,
+        manifest, help, showField, onConfirm, validations, filters)
+
+    /**
+     * Show or not to show field on wizard confirmation
+    */
+    def onConfirm(onConfirm: Boolean) = new FieldBuilder[T](name, default,
+        manifest, help, showField, onConfirm, validations, filters)
+
+      /**
+       * Set the Help HTML
+       */
+     override def help(h: NodeSeq): FieldBuilder[T] = new FieldBuilder[T](name, default,
+                                                                  manifest, Full(h),showField,onConfirm, validations, filters)
+
+      /**
+       * Add a filter field (the wacky symbols are supposed to look like a filter symbol)
+       */
+     override def <*>(f: T => T): FieldBuilder[T] =
+      new FieldBuilder[T](name, default,
+                          manifest, help, showField,onConfirm,validations, filters ::: List(f))
+
+      /**
+       * Add a validation (the wacky symbols are supposed to look like a check mark)
+       */
+     override def ^/(f: T => List[FieldError]): FieldBuilder[T] =
+      new FieldBuilder[T](name, default,
+                          manifest, help, showField,onConfirm,validations ::: List(f), filters)
+
+    /**
+     * Convert the field builder into a field
+     */
+    override def make: Field{type ValueType = T} = new Field {
+      type ValueType = T
+      override def name: String = FieldBuilder.this.name
+      override def default = FieldBuilder.this.default
+      override implicit def manifest: Manifest[ValueType] = FieldBuilder.this.manifest
+      override def helpAsHtml = help
+      override def show_? = showField
+      override def onConfirm_? = onConfirm
+      override def validations = FieldBuilder.this.validations
+      override def setFilter = FieldBuilder.this.filters
+      override lazy val uniqueFieldId: Box[String] = Full("I"+randomString(15))
+    }
+  }
+
+    /**
+     * List of Fields overriden to provide Wizard.Field implementation (which exposes the info whether field is on confirm screen)
+     */
+  override def screenFields: List[Field] = super.screenFields.map(_.asInstanceOf[Field])
+
     /**
      * A notification that we are transitioning into
      * this screen.  Override this method to perform
