Index: Dev/trunk/src/client/qed-client/css/model/widgets/ScaleWidget.less
===================================================================
--- Dev/trunk/src/client/qed-client/css/model/widgets/ScaleWidget.less	(revision 504)
+++ Dev/trunk/src/client/qed-client/css/model/widgets/ScaleWidget.less	(revision 506)
@@ -3,5 +3,12 @@
         text-align: center;
     }
-    th { font-weight: normal; }
+    th {
+        font-weight: normal;
+    }
+    .subcode {
+        .dijitTextBox {
+            width: 4em;
+        }
+    }
     .item {
         text-align: left;
@@ -9,7 +16,25 @@
         max-width: 15em;
     }
-    .min { text-align: right; padding-left: 2em; }
-    .max { text-align: left;  padding-right: 2em; }
-    .na { text-align: center; }
+    .minLabel {
+        text-align: right;
+        padding-left: 2em;
+    }
+    .min {
+        .dijitTextBox {
+            width: 4em;
+        }
+    }
+    .max {
+        .dijitTextBox {
+            width: 4em;
+        }
+    }
+    .maxLabel {
+        text-align: left;
+        padding-right: 2em;
+    }
+    .na {
+        text-align: center;
+    }
 
     .dijitTextBox {
Index: Dev/trunk/src/client/qed-client/css/qed.less
===================================================================
--- Dev/trunk/src/client/qed-client/css/qed.less	(revision 504)
+++ Dev/trunk/src/client/qed-client/css/qed.less	(revision 506)
@@ -32,4 +32,5 @@
 @import "widgets/LineWithActions.less";
 @import "model/widgets/ScaleWidget.less";
+@import "model/widgets/MultipleChoiceWidget.less";
 @import "model/widgets/QuestionListView.less";
 @import "model/widgets/QuestionEditor.less";
Index: Dev/trunk/src/client/qed-client/lib/async.js
===================================================================
--- Dev/trunk/src/client/qed-client/lib/async.js	(revision 504)
+++ 	(revision )
@@ -1,134 +1,0 @@
-define([
-    'dojo/_base/array',
-    'dojo/_base/lang',
-    'dojo/when',
-    'dojo/Deferred'
-],function(array,lang,when,Deferred){
-
-    /** Execute possible async functions in sequence
-     * Execute functions in order. When a function returns a Promise,
-     * the next function is only executed when the promise resolves.
-     * If the function returns a value, the next function is executed
-     * synchronously. The return value of every function is passed as argument
-     * to the next.
-     * Returns the return value of the last function in the chain.
-     */
-    function seq(functions,ctx) {
-        var d = new Deferred();
-
-        var cancelled = false;
-        var running = null;
-        function cancel(err) {
-            if ( cancelled ) { return; }
-            cancelled = true;
-            if ( running && running.cancel && !running.isFulfilled() ) {
-                running.cancel();
-            }
-            d.reject(err);
-        }
-
-        function update(fs,arg) {
-            if ( cancelled ) { return; }
-            if ( fs.length > 0 ) {
-                try {
-                    var f = fs.shift();
-                    running = when(f.call(ctx,arg))
-                    .then(function(res){
-                        update(fs,res);
-                    },function(err){
-                        cancel(err);
-                    });
-                } catch(err) {
-                    cancel(err);
-                }
-            } else {
-                d.resolve(arg);
-            }
-        }
-
-        update(functions);
-
-        return d.promise;
-    }
-
-    /** Execute possible async functions in parallel
-     * Execute all functions in parallel, resolve only when all have resolved.
-     * NB. When a function is not async, it will fully complete before the next
-     * async function is started. If you mix async and non async functions, put
-     * the sync functions last to fully exploit the async ones.
-     * Return an array with all the return values of the functions.
-     */
-    function par(functions,ctx) {
-        var d; // later: Deferred
-        
-        var cancelled = false;
-        var running = [];
-        function cancel(err) {
-            if (cancelled) { return; }
-            cancelled = true;
-            array.forEach(running,function(running){
-                if ( running && running.cancel && !running.isFulfilled() ) {
-                    running.cancel();
-                }
-            });
-            d.reject(err);
-        }
-
-        d = new Deferred(cancel);
-
-        var results = [];
-        var left = functions.length;
-        function update(res,idx) {
-            if (cancelled) { return; }
-            results[idx] = res;
-            left -= 1; // Works because/as long as AJAX/JS is single-threaded.
-            if ( left === 0 ) {
-                d.resolve(results);
-            }
-        }
-
-        array.forEach(functions,function(f,idx){
-            if (cancelled) { return; }
-            try {
-                running.push(when(f.call(ctx)).then(function(res){
-                    update(res,idx);
-                },function(err){
-                    cancel(err);
-                }));
-            } catch (err) {
-                cancel();
-            }
-        });
-
-        return d.promise;
-    }
-
-    /** Iterate over an array with async callback
-     * Execute the callback and if it's async, wait until it's finished before
-     * executing the next one.
-     */
-    function forEach(list,callback,ctx) {
-        var fs = array.map(list,function(item,index,items){
-            return lang.hitch(ctx,callback,item,index,items);
-        });
-        return seq(fs);
-    }
-
-    /** Map a list, possible async
-     * Map every element of a list, returning a promise to the mapped list.
-     */
-    function map(list,callback,ctx) {
-        var fs = array.map(list,function(item,index,items){
-            return lang.hitch(ctx,callback,item,index,items);
-        });
-        return par(fs);
-    }
-
-    return {
-        seq: seq,
-        par: par,
-        forEach: forEach,
-        map: map
-    };
-
-});
Index: Dev/trunk/src/client/qed-client/lib/func.js
===================================================================
--- Dev/trunk/src/client/qed-client/lib/func.js	(revision 504)
+++ 	(revision )
@@ -1,21 +1,0 @@
-define(['dojo/_base/lang'],function(lang){
-
-    Function.prototype.compose = function(g) {
-        var f = this;
-        return function(){
-            return f(g.apply(arguments));
-        };
-    };
-
-    function modPropIf(object,prop,pred,map) {
-        var value = object[prop];
-        if ( pred(value) ) {
-            object[prop] = map(value);
-        }
-        return object;
-    }
-
-    return {
-        modPropIf: modPropIf
-    };
-});
Index: Dev/trunk/src/client/qed-client/model/classes/_Class.js
===================================================================
--- Dev/trunk/src/client/qed-client/model/classes/_Class.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/classes/_Class.js	(revision 506)
@@ -1,8 +1,9 @@
 define([
     "./_View",
+    "dojo/_base/array",
     "dojo/_base/declare",
     "dojo/_base/lang",
     "dojo/date/stamp"
-], function(_View, declare, lang, stamp) {
+], function(_View, array, declare, lang, stamp) {
 
     var _Class = declare([_View],{
@@ -22,5 +23,7 @@
         _doSerialize: function(obj) {
             obj = lang.clone(obj);
-            return this._serialize(obj) || obj;
+            obj = this._serialize(obj) || obj;
+            this._strip(obj);
+            return obj;
         },
         _serialize: function(obj) {
@@ -61,4 +64,21 @@
         _formatDate: function(date) {
             return stamp.toISOString(date,{zulu:true,milliseconds:false});
+        },
+        _strip: function(obj) {
+            if ( lang.isArray(obj) ) {
+                array.forEach(obj,this._strip,this);
+            } else if ( lang.isObject(obj) ) {
+                for ( var prop in obj ) {
+                    if ( obj.hasOwnProperty(prop) ) {
+                        var v = obj[prop];
+                        if ( v === null || v === "" || (typeof v === "number" && isNaN(v)) ) {
+                            delete obj[prop];
+                        } else {
+                            this._strip(v);
+                        }
+                    }
+                }
+            }
+
         }
     });
Index: Dev/trunk/src/client/qed-client/model/widgets/SurveyRunWidget.js
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/SurveyRunWidget.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/SurveyRunWidget.js	(revision 506)
@@ -15,6 +15,4 @@
         _getValueAttr: function() {
             var value = this.inherited(arguments);
-            if ( !value.startDate ) { delete value.startDate; }
-            if ( !value.endDate ) { delete value.endDate; }
             value.respondentCanDeleteOwnResponse =
                 value.respondentCanDeleteOwnResponse.length > 0;
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/MultipleChoiceInputConfigWidget.js
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/MultipleChoiceInputConfigWidget.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/MultipleChoiceInputConfigWidget.js	(revision 506)
@@ -20,4 +20,5 @@
     return declare([_ComplexValueWidget],{
         type: 'MultipleChoiceInput',
+        baseClass: 'qedMultipleChoiceWidget',
         templateString: template,
         buildRendering: function() {
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/NumberInputConfigWidget.js
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/NumberInputConfigWidget.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/NumberInputConfigWidget.js	(revision 506)
@@ -10,7 +10,4 @@
             var value = this.inherited(arguments);
             value.type = this.type;
-            if ( !value.min ) { delete value.min; }
-            if ( !value.max ) { delete value.max; }
-            if ( !value.places ) { delete value.places; }
             return value;
         }
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/TextInputConfigWidget.js
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/TextInputConfigWidget.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/TextInputConfigWidget.js	(revision 506)
@@ -10,5 +10,4 @@
             var value = this.inherited(arguments);
             value.type = this.type;
-            if ( !value.maxLength ) { delete value.maxLength; }
             return value;
         }
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/templates/HeaderConfigWidget.html
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/templates/HeaderConfigWidget.html	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/HeaderConfigWidget.html	(revision 506)
@@ -1,4 +1,6 @@
 <form>
   <label for="text" class="qedLabel">Text</label>
-  <div class="qedField" data-dojo-type="dijit/form/TextBox" name="text"></div>
+  <div class="qedField" data-dojo-type="dijit/form/ValidationTextBox"
+       data-dojo-props="'required': true, placeHolder:'Text'"
+       name="text"></div>
 </form>
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigRowWidget.html
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigRowWidget.html	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigRowWidget.html	(revision 506)
@@ -1,6 +1,10 @@
 <form>
+    <div data-dojo-type="dijit/form/ValidationTextBox"
+         data-dojo-props="required: true, placeholder: 'Subcode'"
+       class="subcode"
+         name="subcode"></div>
   <div data-dojo-type="dijit/form/ValidationTextBox"
-       name="text" required="required"
-       data-dojo-attach-point="textBox"></div>
+       data-dojo-props="required: true, placeholder: 'Item text'"
+       name="text"></div>
   <div data-dojo-type="dijit/form/Button"
        data-dojo-attach-event="onClick:onDestroy">X</div>
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigWidget.html
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigWidget.html	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigWidget.html	(revision 506)
@@ -1,3 +1,3 @@
-<form>
+<form class="${baseClass}">
   <div>
     <label class="qedLabel" for="allowMultiple">Allow multiple</label>
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/templates/NumberInputConfigWidget.html
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/templates/NumberInputConfigWidget.html	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/NumberInputConfigWidget.html	(revision 506)
@@ -1,3 +1,11 @@
 <form>
+  <div>
+    <label class="qedLabel" for="text">Subcode</label>
+    <div class="qedField"
+         data-dojo-attach-point="subcodeBox"
+         data-dojo-type="dijit/form/ValidationTextBox"
+         data-dojo-props="required: true, placeholder: 'Subcode'"
+         name="subcode"></div>
+  </div>
   <div>
     <label class="qedLabel" for="text">Item/Question Text</label>
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputConfigRowWidget.html
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputConfigRowWidget.html	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputConfigRowWidget.html	(revision 506)
@@ -1,3 +1,8 @@
 <tr>
+  <th class="subcode">
+    <div data-dojo-type="dijit/form/ValidationTextBox"
+         data-dojo-props="required: true, placeholder: 'Subcode'"
+         name="subcode"></div>
+  </th>
   <th class="item">
     <div name="text"
@@ -6,5 +11,5 @@
          data-dojo-props="placeholder: 'Item/Question text'"></div>
   </th>
-  <th class="min">
+  <th class="minLabel">
     <div name="minLabel"
          required="required"
@@ -13,13 +18,13 @@
   </th>
   <td>
-    <div disabled="disabled"
+    <div disabled="disabled" class="min"
          data-dojo-type="dijit/form/RadioButton"></div>
   </td>
   <td>...</td>
   <td>
-    <div disabled="disabled"
+    <div disabled="disabled" class="max"
          data-dojo-type="dijit/form/RadioButton"></div>
   </td>
-  <th class="max">
+  <th class="maxLabel">
     <div name="maxLabel"
          required="required"
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputConfigWidget.html
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputConfigWidget.html	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputConfigWidget.html	(revision 506)
@@ -3,12 +3,13 @@
     <thead>
       <tr>
+        <th class="subcode"></th>
         <th class="item"></th>
         <th data-dojo-attach-point="minLabelNode"
-            class="min">
+            class="minLabel">
           <div name="minLabel"
                data-dojo-type="dijit/form/TextBox"
                data-dojo-props="placeholder: 'Minimum label'"></div>
         </th>
-        <th data-dojo-attach-point="minNode">
+        <th class="min" data-dojo-attach-point="minNode">
           <div name="min"
                data-dojo-type="dijit/form/NumberTextBox"
@@ -16,10 +17,10 @@
         </th>
         <th>...</th>
-        <th data-dojo-attach-point="maxNode">
+        <th class="max" data-dojo-attach-point="maxNode">
           <div name="max"
                data-dojo-type="dijit/form/NumberTextBox"
                data-dojo-props="required: true, placeholder: 'Maximum value'"></div>
         </th>
-        <th data-dojo-attach-point="maxLabelNode" class="max">
+        <th data-dojo-attach-point="maxLabelNode" class="maxLabel">
           <div name="maxLabel"
                data-dojo-type="dijit/form/TextBox"
@@ -37,12 +38,9 @@
     <tbody data-dojo-attach-point="itemsNode">
     </tbody>
-    <tbody>
-      <tr>
-        <td class="item">
-          <button data-dojo-type="dijit/form/Button"
-                  data-dojo-attach-event="onClick:onAddNewItem">Click to add item</button>
-        </td>
-      </tr>
-    </tbody>
   </table>
+<div>
+  <button data-dojo-type="dijit/form/Button"
+          data-dojo-attach-event="onClick:onAddNewItem">
+    Click to add item</button>
+</div>
 </form>
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/templates/StringInputConfigWidget.html
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/templates/StringInputConfigWidget.html	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/StringInputConfigWidget.html	(revision 506)
@@ -1,4 +1,18 @@
 <form>
-  <label class="qedLabel" for="text">Item/Question Text</label>
-  <div class="qedField" data-dojo-attach-point="textBox" data-dojo-type="dijit/form/TextBox" data-dojo-props="placeholder: 'Item/Question Text'" name="text"></div>
+  <div>
+    <label class="qedLabel" for="text">Subcode</label>
+    <div class="qedField"
+         data-dojo-attach-point="subcodeBox"
+         data-dojo-type="dijit/form/ValidationTextBox"
+         data-dojo-props="required: true, placeholder: 'Subcode'"
+         name="subcode"></div>
+  </div>
+  <div>
+    <label class="qedLabel" for="text">Item/Question Text</label>
+    <div class="qedField"
+         data-dojo-attach-point="textBox"
+         data-dojo-type="dijit/form/TextBox"
+         data-dojo-props="placeholder: 'Item/Question Text'"
+         name="text"></div>
+  </div>
 </form>
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/templates/TextInputConfigWidget.html
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/templates/TextInputConfigWidget.html	(revision 504)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/TextInputConfigWidget.html	(revision 506)
@@ -1,3 +1,11 @@
 <form>
+  <div>
+    <label class="qedLabel" for="text">Subcode</label>
+    <div class="qedField"
+         data-dojo-attach-point="subcodeBox"
+         data-dojo-type="dijit/form/ValidationTextBox"
+         data-dojo-props="required: true, placeholder: 'Subcode'"
+         name="subcode"></div>
+  </div>
   <div>
     <label class="qedLabel" for="text">Item/Question Text</label>
Index: Dev/trunk/src/client/qed-client/pages/question.js
===================================================================
--- Dev/trunk/src/client/qed-client/pages/question.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/pages/question.js	(revision 506)
@@ -55,5 +55,5 @@
                 return this.inherited(arguments);
             } else {
-                return new Deferred().reject();
+                return new Deferred().reject({error:"Please correct invalid values."});
             }
         },
Index: Dev/trunk/src/client/qed-client/pages/surveyRun.js
===================================================================
--- Dev/trunk/src/client/qed-client/pages/surveyRun.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/pages/surveyRun.js	(revision 506)
@@ -3,5 +3,4 @@
     "../app/Path",
     "../app/Router",
-    "../lib/func",
     "../model/classes/responses",
     "../model/classes/surveyRuns",
@@ -17,5 +16,5 @@
     "require",
     "dojo/text!./templates/surveyRun.html"
-], function(Content, Path, Router, func, responses, surveyRuns, surveys, LineWithActionsWidget, _ObjectPage, Deferred, array, declare, event, lang, when, require, template) {
+], function(Content, Path, Router, responses, surveyRuns, surveys, LineWithActionsWidget, _ObjectPage, Deferred, array, declare, event, lang, when, require, template) {
     return declare([_ObjectPage],{
         contextRequire: require,
@@ -91,5 +90,5 @@
                 return this.inherited(arguments);
             } else {
-                return new Deferred.reject();
+                return new Deferred().reject({error:"Please correct invalid values."});
             }
         },
Index: Dev/trunk/src/client/qed-client/response.js
===================================================================
--- Dev/trunk/src/client/qed-client/response.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/response.js	(revision 506)
@@ -3,5 +3,4 @@
     "./app/Page",
     "./app/Path",
-    "./lib/async",
     "./model/classes/responses",
     "./model/classes/surveyRuns",
@@ -15,5 +14,5 @@
     "./stddeps",
     "dojo/domReady!"
-], function(Content, Page, Path, async, responses, surveyRuns, ResponsePage, json, date, locale, hash, parser, request) {
+], function(Content, Page, Path, responses, surveyRuns, ResponsePage, json, date, locale, hash, parser, request) {
     parser.parse();
     Content.startup();
Index: Dev/trunk/src/client/qed-client/stddeps.js
===================================================================
--- Dev/trunk/src/client/qed-client/stddeps.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/stddeps.js	(revision 506)
@@ -22,4 +22,5 @@
     'dijit/form/Textarea',
     'dijit/form/TextBox',
+    'dijit/form/ValidationTextBox',
     'dijit/form/TimeTextBox',
 
Index: Dev/trunk/src/client/qed-client/widgets/ListWidget.js
===================================================================
--- Dev/trunk/src/client/qed-client/widgets/ListWidget.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/widgets/ListWidget.js	(revision 506)
@@ -25,4 +25,5 @@
         _restoreParams: null,
         _onChangeActive: false,
+        _onChangeHandle: null,
         buildRendering: function() {
             this.inherited(arguments);
@@ -86,5 +87,4 @@
                 }
             }
-            //this.own(on(nodeOrWidget,'change',lang.hitch(this,'_handleChange')));
             var node = nodeOrWidget.domNode ? nodeOrWidget.domNode : nodeOrWidget;
             if ( hint !== "avatar" && node.id !== id ) {
@@ -190,15 +190,29 @@
         _handleChange: function(evt) {
             if ( evt.target !== this.domNode ) {
-                if ( this._onChangeActive && !(this.readOnly || this.disabled) ) {
-                    this.emit('change',this.get('value'));
-                }
+                this._onChange();
                 if ( evt ) { event.stop(evt); }
                 return false;
-            }
-            return true;
-        },
-        _handleDrop: function() {
-            if ( this._onChangeActive && !(this.readOnly || this.disabled) ) {
-                this.emit('change',this.get('value'));
+            } else {
+                return evt;
+            }
+        },
+        _handleDrop: function(evt) {
+            this._onChange();
+        },
+        _onChange: function(){
+            if ( this._onChangeActive &&
+                 !(this.readOnly || this.disabled) ) {
+                if ( this._onChangeHandle ) {
+                    this._onChangeHandle.cancel();
+                }
+                this._onChangeHandle = this.defer(function(){
+                    this._onChangeHandle = null;
+                    on.emit(this.domNode,'change',{
+                        target: this.domNode,
+                        value: this.get('value'),
+                        bubbles: true,
+                        cancellable: true
+                    });
+                });
             }
         }
Index: Dev/trunk/src/client/qed-client/widgets/_ComplexValueMixin.js
===================================================================
--- Dev/trunk/src/client/qed-client/widgets/_ComplexValueMixin.js	(revision 504)
+++ Dev/trunk/src/client/qed-client/widgets/_ComplexValueMixin.js	(revision 506)
@@ -15,4 +15,5 @@
         readOnly: false,
         _onChangeActive: false,
+        _onChangeHandle: null,
         constructor: function() {
             this._listenerMap = {};
@@ -98,11 +99,24 @@
         _handleChange: function(evt) {
             if ( evt.target !== this.domNode ) {
-                if ( this._onChangeActive && !(this.readOnly || this.disabled) ) {
-                    this.emit('change',this.get('value'));
+                if ( this._onChangeActive &&
+                     !(this.readOnly || this.disabled) ) {
+                    if ( this._onChangeHandle ) {
+                        this._onChangeHandle.cancel();
+                    }
+                    this._onChangeHandle = this.defer(function(){
+                        this._onChangeHandle = null;
+                        on.emit(this.domNode,'change',{
+                            target: this.domNode,
+                            value: this.get('value'),
+                            bubbles: true,
+                            cancellable: true
+                        });
+                    });
                 }
                 if ( evt ) { event.stop(evt); }
                 return false;
+            } else {
+                return evt;
             }
-            return true;
         },
         _handleSubmit: function(evt) {
