diff --git a/src/main/webapp/scripts/lib/form2js/src/form2js.js b/src/main/webapp/scripts/lib/form2js/src/form2js.js
index 55c9bac720e93c52afc21b818f1cf1cebb652124..61a977db1e8e2a5d8f1e34a5a5d2cabc2397f7f3 100755
--- a/src/main/webapp/scripts/lib/form2js/src/form2js.js
+++ b/src/main/webapp/scripts/lib/form2js/src/form2js.js
@@ -258,7 +258,7 @@
     function extractNodeValues(node, nodeCallback, useIdIfEmptyName, getDisabled) {
         if (node.disabled && !getDisabled) return [];
 
-        var callbackResult, fieldValue, result, fieldName = getFieldName(node, useIdIfEmptyName);
+        var callbackResult, hasValue, fieldValue, result, fieldName = getFieldName(node, useIdIfEmptyName);
 
         callbackResult = nodeCallback && nodeCallback(node);
 
@@ -267,7 +267,17 @@
         }
         else if (fieldName != '' && node.nodeName.match(/INPUT|TEXTAREA/i)) {
             fieldValue = getFieldValue(node, getDisabled);
-            if (null === fieldValue) {
+
+			hasValue = !!fieldValue;
+
+			// convert items with 'array-list' class to an actual array
+			if (hasValue && /array-list|list-array/i.test(node.className)) {
+				fieldValue = fieldValue.split(',').map(function(item, i){
+					return item.trim();
+				});
+			}
+
+            if (!hasValue) {
                 result = [];
             } else {
                 result = [ { name: fieldName, value: fieldValue} ];
diff --git a/src/main/webapp/scripts/xnat/ui/panel.js b/src/main/webapp/scripts/xnat/ui/panel.js
index 98b1dc8e72bc3b83290b46caae1cbb21401afea0..682c4dbdc9795d3b22fdb46de2997962ddb58d19 100644
--- a/src/main/webapp/scripts/xnat/ui/panel.js
+++ b/src/main/webapp/scripts/xnat/ui/panel.js
@@ -146,6 +146,7 @@ var XNAT = getObject(XNAT || {});
     }
 
     // creates a panel that's a form that can be submitted
+    // TODO: REFACTOR THIS BEAST
     panel.form = function panelForm(opts, callback){
 
         opts = cloneObject(opts);
@@ -211,23 +212,30 @@ var XNAT = getObject(XNAT || {});
             // find all form inputs with a name attribute
             $$(form).find(':input').each(function(){
 
+                var $this = $(this);
                 var val = lookupObjectValue(dataObj, this.name||this.title);
 
                 //if (!val) return;
 
                 if (Array.isArray(val)) {
                     val = val.join(', ');
+                    $this.addClass('array-list')
                 }
                 else {
                     val = stringable(val) ? val : JSON.stringify(val);
                 }
 
-                $(this).changeVal(val);
+                $this.not(':radio').changeVal(val);
 
-                if (/checkbox|radio/i.test(this.type)) {
+                if (/checkbox/i.test(this.type)) {
                     this.checked = !!this.value;
                 }
 
+                if (/radio/i.test(this.type)) {
+                    this.checked = (this.value === val);
+                    //$this.trigger('change');
+                }
+
             });
 
             loadingDialog().closeAll();
@@ -875,13 +883,20 @@ var XNAT = getObject(XNAT || {});
             panelTextarea.openEditor();
         };
 
-        opts.element.rows = 10;
+        opts.element.rows = opts.rows || opts.element.rows || 10;
         
         var textarea = spawn('textarea', opts.element);
         return XNAT.ui.template.panelDisplay(opts, textarea).spawned;
     };
     panel.input.textarea = panel.textarea;
 
+    panel.textarea.arrayList = function(opts){
+        opts = extend(true, {}, {
+            element: { $: { addClass: 'array-list' } }
+        }, opts);
+        return panel.textarea(opts);
+    };
+
     //////////////////////////////////////////////////
     // SELECT MENU PANEL ELEMENTS
     //////////////////////////////////////////////////
diff --git a/src/main/webapp/scripts/xnat/ui/templates.js b/src/main/webapp/scripts/xnat/ui/templates.js
index 0239e1e19f3cac2a79924129fad0f4263c2056bb..9c7733420f66dc68cea9e84f1f0ab3bad18a0c9f 100644
--- a/src/main/webapp/scripts/xnat/ui/templates.js
+++ b/src/main/webapp/scripts/xnat/ui/templates.js
@@ -128,7 +128,7 @@ var XNAT = getObject(XNAT);
         
         opts = cloneObject(opts);
         opts.id = opts.id||toDashed(opts.name||'');
-        opts.label = opts.label||opts.title||opts.name||'';
+        opts.label = opts.label||'';
         
         // pass in an element or create a new 'div' element
         element = 
@@ -140,7 +140,10 @@ var XNAT = getObject(XNAT);
             }, opts.element));
         
         return template.panelElement(opts, [
-            ['label.element-label|for='+element.id||opts.id, opts.label],
+
+            // only add a label if specified
+            (opts.label ? ['label.element-label|for='+element.id||opts.id, opts.label] : ''),
+
             ['div.element-wrapper', [].concat(
                 
                 (opts.beforeElement ? opts.beforeElement : []),