diff --git a/src/main/webapp/scripts/xnat/app/timeout.js b/src/main/webapp/scripts/xnat/app/timeout.js
index 96315e3a682826028f12b8352e614046cd84e723..04bb9561bd3213f6d778a6169220b2e61f1bad77 100644
--- a/src/main/webapp/scripts/xnat/app/timeout.js
+++ b/src/main/webapp/scripts/xnat/app/timeout.js
@@ -272,7 +272,7 @@ var XNAT = getObject(XNAT);
             // need to wait a little longer before reloading
             setTimeout(function(){
                 window.location.reload();
-            }, 120000);
+            }, 2000);
         }
 
 
diff --git a/src/main/webapp/scripts/xnat/ui/panel.js b/src/main/webapp/scripts/xnat/ui/panel.js
index 410aeb12a34e6f0957d271ccf597b651f9d7e332..6ef65f211c7f13beaed985ba7155821dd3614f1d 100644
--- a/src/main/webapp/scripts/xnat/ui/panel.js
+++ b/src/main/webapp/scripts/xnat/ui/panel.js
@@ -426,7 +426,8 @@ var XNAT = getObject(XNAT || {});
             }
 
             var ajaxConfig = {
-                method: opts.method,
+                //method: opts.method,
+                method: $form.data('method') || opts.method || 'POST',
                 url: this.action,
                 success: function(){
                     var obj = {};
@@ -845,54 +846,10 @@ var XNAT = getObject(XNAT || {});
     panel.data = {};
 
     panel.data.table = function(opts){
+
         // initialize the table
-        opts = cloneObject(opts);
-        opts.element = opts.element || {};
-        addClassName(opts.element, 'data-table xnat-table');
-        if (opts.sortable) {
-            if (opts.sortable === true) {
-                addClassName(opts.element, 'sortable');
-            }
-            else {
-                opts.sortable = opts.sortable.split(',').map(function(item){return item.trim()});
-            }
-        }
-        opts.element.style = {
-            width: opts.width || '100%'
-        };
-        var dataTable = XNAT.table(opts.element);
-        // request data for table rows
-        XNAT.xhr.get({
-            url: XNAT.url.rootUrl(opts.load||opts.url),
-            dataType: opts.dataType || 'json',
-            success: function(data){
-                var props = [];
-                if (opts.items) {
-                    dataTable.tr();
-                    forOwn(opts.items, function(name, val){
-                        props.push(name);
-                        dataTable.th(val);
-                        if (opts.sortable === true || opts.sortable.indexOf(name) !== -1) {
-                            addClassName(dataTable.last.th, 'sort');
-                        }
-                    });
-                }
-                else {
-                    forOwn(data[0], function(name, val){
-                        props.push(name);
-                    });
-                }
-                data.forEach(function(item){
-                    dataTable.tr();
-                    props.forEach(function(name){
-                        dataTable.td({ className: name }, item[name]);
-                    });
-                });
-                if (opts.container) {
-                    $$(opts.container).append(dataTable.table);
-                }
-            }
-        });
+        var dataTable = XNAT.table.dataTable(opts.data||[], opts);
+
         return {
             element: dataTable.table,
             spawned: dataTable.table,
@@ -900,6 +857,7 @@ var XNAT = getObject(XNAT || {});
                 return dataTable.table
             }
         };
+        
     };
 
     panel.data.list = function(opts){
diff --git a/src/main/webapp/scripts/xnat/ui/table.js b/src/main/webapp/scripts/xnat/ui/table.js
index 5a645866d1561676b29942bc306b2e242645dff0..ec651f9445b3086c73c0b42e8f414aa715d4f0b4 100755
--- a/src/main/webapp/scripts/xnat/ui/table.js
+++ b/src/main/webapp/scripts/xnat/ui/table.js
@@ -275,6 +275,7 @@ var XNAT = getObject(XNAT);
         else {
             obj = data || {};
         }
+
         if (obj.header) {
             // if there's a 'header' property
             // set to true, pick the header from
@@ -347,15 +348,103 @@ var XNAT = getObject(XNAT);
 
     // helper for future XNAT DataTable widget
     table.dataTable = function(data, opts){
+
         var tableData = data;
+
         // tolerate reversed arguments
         if (Array.isArray(opts)){
             tableData = opts;
-            opts = data;
+            opts = getObject(data);
         }
-        addClassName(opts, 'xnat-table data-table');
-        var newTable = new Table(opts);
-        return newTable.init(tableData);
+
+        // don't modify original object
+        opts = cloneObject(opts);
+
+        var allItems = opts.header || (opts.items && opts.items === 'all');
+
+        // properties for spawned element
+        opts.element = opts.element || {};
+
+        addClassName(opts.element, 'data-table xnat-table');
+
+        if (opts.sortable) {
+            if (opts.sortable === true) {
+                addClassName(opts.element, 'sortable');
+            }
+            else {
+                opts.sortable = opts.sortable.split(',').map(function(item){return item.trim()});
+            }
+        }
+
+        opts.element = extend(true, {
+            style: {
+                width: opts.width || '100%'
+            }
+        }, opts.element);
+
+        // initialize the table
+        var newTable = new Table(opts.element);
+
+        function createTable(rows){
+            var props = [];
+            if (!allItems && (opts.items || opts.properties)) {
+                newTable.tr();
+                forOwn(opts.items||opts.properties, function(name, val){
+                    props.push(name);
+                    newTable.th(val);
+                    if (!opts.sortable) return;
+                    if (opts.sortable === true || opts.sortable.indexOf(name) !== -1) {
+                        addClassName(newTable.last.th, 'sort');
+                    }
+                });
+            }
+            else {
+                if (allItems) {
+                    newTable.tr();
+                }
+                forOwn(rows[0], function(name, val){
+                    if (allItems) {
+                        newTable.th(name);
+                    }
+                    props.push(name);
+                });
+            }
+            rows.forEach(function(item){
+                newTable.tr();
+                props.forEach(function(name){
+                    newTable.td({ className: name }, item[name]);
+                });
+            });
+        }
+
+        // if 'tableData' is a string, use as the url
+        if (typeof tableData == 'string') {
+            opts.url = tableData;
+        }
+
+        // request data for table rows
+        if (opts.load || opts.url) {
+            XNAT.xhr.get({
+                url: XNAT.url.rootUrl(opts.load||opts.url),
+                dataType: opts.dataType || 'json',
+                success: function(json){
+                    // handle data returned in ResultSet.Result array
+                    json = (json.ResultSet && json.ResultSet.Result) ? json.ResultSet.Result : json;
+                    createTable(json);
+                }
+            });
+        }
+        else {
+            createTable(tableData.data||tableData);
+            // newTable.init(tableData);
+        }
+
+        if (opts.container) {
+            $$(opts.container).append(newTable.table);
+        }
+
+        return newTable;
+
     };
 
     // table with <input> elements in the cells
@@ -395,4 +484,3 @@ var XNAT = getObject(XNAT);
     XNAT.ui.inputTable = XNAT.inputTable = table.inputTable;
 
 }));
-
diff --git a/src/main/webapp/scripts/xnat/ui/tabs.js b/src/main/webapp/scripts/xnat/ui/tabs.js
index 61bec657552be5fde90b963b8a7246cf0d4bf80d..73eaf37aa06abe936f9f260c154a195e415d0bba 100755
--- a/src/main/webapp/scripts/xnat/ui/tabs.js
+++ b/src/main/webapp/scripts/xnat/ui/tabs.js
@@ -171,9 +171,9 @@ var XNAT = getObject(XNAT || {});
 
         // set container and layout before spawning:
         // XNAT.tabs.container = 'div.foo';
-        container = tabs.container || 'div.xnat-tab-container';
+        container = obj.container || tabs.container || 'div.xnat-tab-container';
 
-        layout = tabs.layout || 'left';
+        layout = obj.layout || tabs.layout || 'left';
 
         navTabs = spawn('div.xnat-nav-tabs');
         tabContent = spawn('div.xnat-tab-content');