Index: Dev/trunk/src/client/qed-client/model/classes/_Class.js
===================================================================
--- Dev/trunk/src/client/qed-client/model/classes/_Class.js	(revision 524)
+++ Dev/trunk/src/client/qed-client/model/classes/_Class.js	(revision 525)
@@ -71,7 +71,9 @@
             } else if ( lang.isObject(obj) ) {
                 objectFuns.forEach(obj,function(v,prop){
-                    if ( v === null ||
-                         v === "" ||
-                         (typeof v === "number" && isNaN(v)) ) {
+                    if ( ( v === null ||
+                           v === "" ||
+                           (typeof v === "number" && isNaN(v)) ) && 
+                         prop !== 'subcode' ) // HACK : this hardcoded exclusion for subcode is quite nasty
+                    {
                         delete obj[prop];
                     } else {
Index: Dev/trunk/src/client/qed-client/model/widgets/QuestionEditorPreviewItem.js
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/QuestionEditorPreviewItem.js	(revision 524)
+++ Dev/trunk/src/client/qed-client/model/widgets/QuestionEditorPreviewItem.js	(revision 525)
@@ -149,6 +149,8 @@
             if ( this.innerWidget !== null ) {
                 if ( this._editing === true ) {
-                    this._onChange();
-                    // how to force event on widget here?
+                    // because the widget doesn't generate an event
+                    // unless it loses focus, we set the value here
+                    // just to be sure not to lose any user input
+                    this._setValueInternal(this.innerWidget.get('value'));
                 }
                 this.removeChild(this.innerWidget);
Index: Dev/trunk/src/client/qed-client/model/widgets/questions/ScaleInputWidget.js
===================================================================
--- Dev/trunk/src/client/qed-client/model/widgets/questions/ScaleInputWidget.js	(revision 524)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/ScaleInputWidget.js	(revision 525)
@@ -22,5 +22,5 @@
             this.minNode.innerHTML = this.minLabel || "";
             this.maxNode.innerHTML = this.maxLabel || "";
-            if ( this.naLabel !== null ) {
+            if ( this.naLabel ) {
                 this.naNode.innerHTML = this.naLabel;
             }
@@ -56,5 +56,5 @@
                     className: 'max'
                 }, tr);
-                if ( this.naLabel !== null && this.naLabel !== "" ) {
+                if ( this.naLabel ) {
                     td = domConstruct.create("td", {}, tr);
                     radio = new RadioButton({
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 524)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/MultipleChoiceInputConfigWidget.html	(revision 525)
@@ -3,5 +3,5 @@
     <label class="qedLabel" for="subcode">Subcode</label>
     <input data-dojo-type="dijit/form/ValidationTextBox"
-           data-dojo-props="required:true,placeHolder:'Subcode'"
+           data-dojo-props="placeHolder:'Subcode'"
            class="subcode"
            name="subcode"/>
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 524)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/NumberInputConfigWidget.html	(revision 525)
@@ -5,5 +5,5 @@
          data-dojo-attach-point="subcodeBox"
          data-dojo-type="dijit/form/ValidationTextBox"
-         data-dojo-props="required: true, placeholder: 'Subcode'"
+         data-dojo-props="placeholder: 'Subcode'"
          name="subcode"></div>
   </div>
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 524)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/ScaleInputConfigRowWidget.html	(revision 525)
@@ -2,5 +2,5 @@
   <th class="subcode">
     <div data-dojo-type="dijit/form/ValidationTextBox"
-         data-dojo-props="required: true, placeholder: 'Subcode'"
+         data-dojo-props="placeholder: 'Subcode'"
          name="subcode"></div>
   </th>
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 524)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/StringInputConfigWidget.html	(revision 525)
@@ -5,5 +5,5 @@
          data-dojo-attach-point="subcodeBox"
          data-dojo-type="dijit/form/ValidationTextBox"
-         data-dojo-props="required: true, placeholder: 'Subcode'"
+         data-dojo-props="placeholder: 'Subcode'"
          name="subcode"></div>
   </div>
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 524)
+++ Dev/trunk/src/client/qed-client/model/widgets/questions/templates/TextInputConfigWidget.html	(revision 525)
@@ -5,5 +5,5 @@
          data-dojo-attach-point="subcodeBox"
          data-dojo-type="dijit/form/ValidationTextBox"
-         data-dojo-props="required: true, placeholder: 'Subcode'"
+         data-dojo-props="placeholder: 'Subcode'"
          name="subcode"></div>
   </div>
Index: Dev/trunk/src/client/qed-client/widgets/ListWidget.js
===================================================================
--- Dev/trunk/src/client/qed-client/widgets/ListWidget.js	(revision 524)
+++ Dev/trunk/src/client/qed-client/widgets/ListWidget.js	(revision 525)
@@ -98,7 +98,13 @@
         _getValueAttr: function() {
             return array.map(
-                this._getDescendantFormWidgets(),
-                function(child) { return child.get('value'); }
-                ,this);
+                this.source.getAllNodes(),
+                lang.hitch(this,function(node){
+                    var widget = registry.byNode(node);
+                    if ( widget && 'value' in widget ) {
+                        return widget.get('value');
+                    } else {
+                        return this.source.getItem(node.id).data;
+                    }
+                }));
         },
         _setValueAttr: function(value,priorityChange) {
Index: Dev/trunk/src/client/qed-client/widgets/_ComplexValueMixin.js
===================================================================
--- Dev/trunk/src/client/qed-client/widgets/_ComplexValueMixin.js	(revision 524)
+++ Dev/trunk/src/client/qed-client/widgets/_ComplexValueMixin.js	(revision 525)
@@ -64,5 +64,7 @@
                     if (typeof widgets[0].checked === 'boolean') {
                         array.forEach(widgets, function(w){
-                            w.set('value', array.indexOf(values, w._get('value')) !== -1, priorityChange);
+                            w.set('value',
+                                  array.indexOf(values,w._get('value'))!==-1,
+                                  priorityChange);
                         });
                     } else if (widgets[0].multiple) {
@@ -90,4 +92,5 @@
         _setDisabledAttr: function(disabled) {
             this.inherited(arguments);
+            this._set('disabled',disabled);
             array.forEach(
                 this._getDescendantFormWidgets(),
@@ -98,4 +101,5 @@
         _setReadOnlyAttr: function(readOnly) {
             this.inherited(arguments);
+            this._set('readOnly',readOnly);
             array.forEach(
                 this._getDescendantFormWidgets(),
