diff --git a/examples/src/org/apache/click/examples/page/form/TabbedFormDemo.java b/examples/src/org/apache/click/examples/page/form/TabbedFormDemo.java
index c1cbccb..6ca6a1a 100644
--- a/examples/src/org/apache/click/examples/page/form/TabbedFormDemo.java
+++ b/examples/src/org/apache/click/examples/page/form/TabbedFormDemo.java
@@ -18,6 +18,8 @@
  */
 package org.apache.click.examples.page.form;
 
+import java.io.Serializable;
+
 import org.apache.click.control.Checkbox;
 import org.apache.click.control.Field;
 import org.apache.click.control.FieldSet;
@@ -31,6 +33,7 @@
 import org.apache.click.examples.control.TitleSelect;
 import org.apache.click.examples.page.BorderPage;
 import org.apache.click.examples.page.HomePage;
+import org.apache.click.examples.util.ExampleUtils;
 import org.apache.click.extras.control.CreditCardField;
 import org.apache.click.extras.control.DateField;
 import org.apache.click.extras.control.EmailField;
@@ -55,6 +58,16 @@
     private CreditCardField cardNumber = new CreditCardField("cardNumber");
     private IntegerField expiry = new IntegerField("expiry");
 
+
+    protected Form optionsForm = new Form("optionsForm");
+
+    /** Form options holder. */
+    public static class Options implements Serializable {
+        static final long serialVersionUID = 1L;
+        boolean javaScriptValidate = false;
+    }
+
+    private Checkbox jsValidate = new Checkbox("jsValidate", "JavaScript Validate");
     // Constructor ------------------------------------------------------------
 
     public TabbedFormDemo() {
@@ -121,10 +134,37 @@
         form.add(new PageSubmit("cancel", HomePage.class));
 
         addControl(form);
+
+        // Settings Form
+        FieldSet fieldSet = new FieldSet("options", "Form Options");
+        jsValidate.setAttribute("onclick", "form.submit();");
+        fieldSet.add(jsValidate);
+        optionsForm.add(fieldSet);
+        optionsForm.setListener(this, "onOptionsSubmit");
+        addControl(optionsForm);
     }
 
     // Event Handlers ---------------------------------------------------------
 
+    /**
+     * @see org.apache.click.Page#onInit()
+     */
+    @Override
+    public void onInit() {
+        super.onInit();
+
+        applyOptions();
+    }
+
+    public boolean onOptionsSubmit() {
+        Options options = new Options();
+        options.javaScriptValidate = jsValidate.isChecked();
+        ExampleUtils.setSessionObject(options);
+        applyOptions();
+        return true;
+    }
+
+
     public boolean onOkClick() {
         if (isFormValid()) {
             processDelivery();
@@ -162,4 +202,11 @@
             System.out.println(field.getName() + "=" + field.getValue());
         }
     }
+
+    private void applyOptions() {
+        Options options = (Options) ExampleUtils.getSessionObject(Options.class);
+
+        form.setJavaScriptValidation(options.javaScriptValidate);
+        jsValidate.setChecked(options.javaScriptValidate);
+    }
 }
diff --git a/examples/webapp/form/tabbed-form-demo.htm b/examples/webapp/form/tabbed-form-demo.htm
index b4b3bf6..58dcf14 100644
--- a/examples/webapp/form/tabbed-form-demo.htm
+++ b/examples/webapp/form/tabbed-form-demo.htm
@@ -18,3 +18,7 @@
 -->
 
 $form
+
+<br/>
+
+$optionsForm
\ No newline at end of file
