Index: /Dev/branches/rest-dojo-ui/client/config/docs.json
===================================================================
--- /Dev/branches/rest-dojo-ui/client/config/docs.json	(revision 381)
+++ /Dev/branches/rest-dojo-ui/client/config/docs.json	(revision 382)
@@ -54,9 +54,4 @@
         "_id": "q4",
         "title": "Rate your experience at your current employer from 1 to 10.",
-        "categories": [
-            "Respondent personals",
-            "Professional background"
-        ],
-        "topic": "Work enjoyment",
         "type": "Question"
     },
@@ -74,5 +69,5 @@
             },
             "questions": {
-                "map": "function(doc){ if ( doc.type === 'Question' ) { for (var i = 0; i < doc.categories.length; i++) { emit([doc.categories[i],doc.topic],1); } } }",
+                "map": "function(doc){ if ( doc.type === 'Question' ) { if ( doc.categories && doc.categories.length > 0 ) { for (var i = 0; i < doc.categories.length; i++) { emit([doc.categories[i],doc.topic || '[No topic]'],1); } } else { emit(['[No category]','[No topic]'],1); } } }",
                 "reduce": "function(keys,values) { return sum(values); }"
             },
Index: /Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticReadStore.js
===================================================================
--- /Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticReadStore.js	(revision 381)
+++ /Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticReadStore.js	(revision 382)
@@ -1,8 +1,11 @@
-define(["dojo", "dojox", "dojo/json"], function(dojo, dojox, JSON) {
-	dojo.provide("rft.elastic.ElasticReadStore");
+define([
+    'dojo/_base/declare',
+    "dojo/_base/json",
+    'dojo/_base/lang',
+    'dojo/_base/xhr',
+    'dojox/data/QueryReadStore'
+    ],function(declare, json, lang, xhr, QueryReadStore) {
 
-	dojo.require("dojox.data.QueryReadStore");
-
-	dojo.declare("rft.elastic.ElasticReadStore", dojox.data.QueryReadStore, {
+	return declare("rft.elastic.ElasticReadStore", QueryReadStore, {
 	    fetch:function(request){
 	    	var attr = Object.keys(request.query)[0];
@@ -12,5 +15,5 @@
 	    	var q = request.query[attr];
 
-	    	request.serverQuery = dojo.toJson({ 
+	    	request.serverQuery = json.toJson({ 
 		    						query: 
 		    						{
@@ -27,11 +30,13 @@
 		_fetchItems: function(request, fetchHandler, errorHandler){
 			var serverQuery = request.serverQuery;
-			var xhrHandler = dojo.xhrPost( { url:this.url,
-								handleAs: "json",
-								postData: serverQuery });
+			var xhrHandler = xhr.post({
+                url: this.url,
+                handleAs: "json",
+                postData: serverQuery
+            });
 			request.abort = function(){
 				xhrHandler.cancel();
 			};
-			xhrHandler.addCallback(dojo.hitch(this, function(data){
+			xhrHandler.addCallback(lang.hitch(this, function(data){
 				this._xhrFetchHandler(data, request, fetchHandler, errorHandler);
 			}));
Index: /Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticSearchFilteringSelect.js
===================================================================
--- /Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticSearchFilteringSelect.js	(revision 381)
+++ /Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticSearchFilteringSelect.js	(revision 382)
@@ -1,8 +1,7 @@
-define(["dojo"], function(dojo) {
-	dojo.provide("rft.elastic.ElasticSearchFilteringSelect");
-
-	dojo.require("dijit.form.FilteringSelect");
-
-	dojo.declare("rft.elastic.ElasticSearchFilteringSelect", dijit.form.FilteringSelect, {
+define([
+    'dojo/_base/declare',
+    'dijit/form/FilteringSelect'
+    ], function(declare, FilteringSelect) {
+	return declare("rft.elastic.ElasticSearchFilteringSelect", FilteringSelect, {
 	     // custom min input character count to trigger search
          minKeyCount: 3,
Index: /Dev/branches/rest-dojo-ui/client/rft/pages/survey.html
===================================================================
--- /Dev/branches/rest-dojo-ui/client/rft/pages/survey.html	(revision 381)
+++ /Dev/branches/rest-dojo-ui/client/rft/pages/survey.html	(revision 382)
@@ -46,5 +46,7 @@
               data-rft-attach-point="propertiesForm">
             <label for="title">Title</label>
-            <input data-dojo-type="dijit.form.TextBox" name="title"/>
+            <input data-dojo-type="dijit.form.TextBox" name="title"/><br/>
+            <label for="description">Description</label>
+            <input data-dojo-type="dijit.form.Textarea" name="description"/><br/>
         </form>
             
Index: /Dev/branches/rest-dojo-ui/client/rft/run.js
===================================================================
--- /Dev/branches/rest-dojo-ui/client/rft/run.js	(revision 381)
+++ /Dev/branches/rest-dojo-ui/client/rft/run.js	(revision 382)
@@ -1,48 +1,49 @@
 require([
     // functions required for run
-    'dojo/_base/window','dojo/parser', 'rft/ui/LoginDialog', 
-    'dojo/dom', 'dojo/_base/connect', 'rft/auth', 'rft/content',
+    'dojo/_base/connect',
+    'dojo/_base/window',
+    'dojo/dom',
+    'dojo/parser',
+    'rft/auth',
+    'rft/content',
+    'rft/ui/LoginDialog',
     'dojo/domReady!',
     
-    // general widgets
-    'dojo/data/ObjectStore',
-    'dojo/store/JsonRest',
+    // dijit & rft widgets used declaratively in templates and pages
     'dijit/Dialog',
+    'dijit/DropDownMenu',
     'dijit/InlineEditBox',
     'dijit/MenuBar',
     'dijit/MenuBarItem',
     'dijit/PopupMenuBarItem',
-    'dijit/DropDownMenu',
     'dijit/TitlePane',
+    'dijit/layout/AccordionContainer',
     'dijit/layout/BorderContainer',
     'dijit/layout/ContentPane',
     'dijit/layout/TabContainer',
-    'dijit/layout/AccordionContainer',
+    'dijit/form/Button',
+    'dijit/form/ComboBox',
     'dijit/form/DateTextBox',
     'dijit/form/Form',
+    'dijit/form/NumberSpinner',
+    'dijit/form/Select',
+    'dijit/form/SimpleTextarea',
+    'dijit/form/Textarea',
     'dijit/form/TextBox',
-    'dijit/form/Button',
-    'dijit/form/Textarea',
-    'dijit/form/SimpleTextarea',
-    'dijit/form/ComboBox',
-    'dijit/form/Select',
-    'dijit/form/NumberSpinner',
     'dojox/grid/DataGrid',
     'dojox/widget/TitleGroup',
-    'dojox/data/QueryReadStore',
-    'rft/elastic/ElasticReadStore',
+    'rft/ui/AccountListView',
+    'rft/ui/LineWithActionsWidget',
     'rft/ui/List',
-    'rft/ui/OrderedList',
-    'rft/ui/AccountListView',
     'rft/ui/MainMenu',
     'rft/ui/MenuBarLink',
     'rft/ui/MenuLink',
     'rft/ui/Notifications',
-    'rft/ui/LineWithActionsWidget',
     'rft/ui/ObjectBox',
+    'rft/ui/OrderedList',
     'rft/ui/QuestionWidget',
     'rft/ui/Selector',
     'rft/ui/TitleGroup',
-    'rft/ui/InnerWidgetFactory',
+
     // pages -> load dynamically?
     'rft/pages/index',
@@ -54,5 +55,5 @@
     'rft/pages/survey'
     ],
-    function(win,parser,LoginDialog,dom,connect,auth,content) {
+    function(connect,win,dom,parser,auth,content,LoginDialog) {
         parser.parse();
 
Index: /Dev/branches/rest-dojo-ui/client/rft/ui/TabbedQuestionBrowser.js
===================================================================
--- /Dev/branches/rest-dojo-ui/client/rft/ui/TabbedQuestionBrowser.js	(revision 381)
+++ /Dev/branches/rest-dojo-ui/client/rft/ui/TabbedQuestionBrowser.js	(revision 382)
@@ -2,11 +2,13 @@
     'dojo/_base/declare',
     'dojo/_base/lang',
+    'dojo/_base/window',
     'dijit/layout/ContentPane',
     'dijit/layout/TabContainer',
+    'dojox/widget/Standby',
     'rft/store',
     'rft/ui/Selector',
     'dojo/domReady!'
     ],
-    function(declare,lang,ContentPane,TabContainer,store,Selector){
+    function(declare,lang,win,ContentPane,TabContainer,Standby,store,Selector){
         return declare('rft.ui.TabbedQuestionBrowser',[TabContainer],{
             tabPosition: 'left-h',
@@ -16,8 +18,14 @@
 
             _dataMap: null,
+            _busyCount: 0,
             constructor: function(){
                 this._dataMap = {};
             },
             startup: function() {
+                this._busyWidget = new Standby({
+                    target: this.domNode,
+                    duration: 200
+                }).placeAt(win.body());
+                this._busyWidget.startup();
                 this.watch("selectedChildWidget",lang.hitch(this,function(name,oldTab,newTab){
                     this._fillCategoryTab(newTab.__category);
@@ -44,8 +52,11 @@
                 var categoryMap = this._dataMap[category];
                 if (!categoryMap._filled) {
+                    this._busy();
                     categoryMap._filled = true;
                     store.query('_design/default/_view/questions', {reduce:true,group:true,group_level:2,startkey:[category],endkey:[category,{}]})
                     .forPairs(lang.hitch(this,function(value,key){
                         this._createTopicSelector(key[1],category,value);
+                    })).then(lang.hitch(this,function(){
+                        this._done();
                     }));
                 }
@@ -73,8 +84,28 @@
                 var topicMap = categoryMap[topic];
                 if (!topicMap._filled) {
+                    topicMap._filled = true;
+                    this._busy();
                     store.query('_design/default/_view/questions', {reduce:false,include_docs:true,key:[category,topic]})
                     .forEach(lang.hitch(this,function(value){
                         topicMap._widget.addItem(value);
+                    })).then(lang.hitch(this,function(){
+                        this._done();
                     }));
+                }
+            },
+            _busy: function() {
+                if ( this._busyCount === 0 ) {
+                    this._busyWidget.show();
+                }
+                this._busyCount++;
+            },
+            _done: function() {
+                if ( this._busyCount > 0 ) {
+                    this._busyCount--;
+                    if ( this._busyCount === 0 ) {
+                        this._busyWidget.hide();
+                    }
+                } else {
+                    console.warn('Busycount <= 0 when _done is called.');
                 }
             },
