diff --git a/planetstack/core/xoslib/dashboards/xosTenant.html b/planetstack/core/xoslib/dashboards/xosTenant.html
index 49236d4..42a41e0 100644
--- a/planetstack/core/xoslib/dashboards/xosTenant.html
+++ b/planetstack/core/xoslib/dashboards/xosTenant.html
@@ -37,6 +37,10 @@
   Are you sure about this?
 </div>
 
+<div id="tenant-addslice-dialog" title="Add Child">
+<div id="tenant-addslice-interior"></div>
+</div>
+
 <div id="xos-error-dialog" title="Error Message">
 </div>
 
diff --git a/planetstack/core/xoslib/static/js/xosTenant.js b/planetstack/core/xoslib/static/js/xosTenant.js
index 5095505..6f73046 100644
--- a/planetstack/core/xoslib/static/js/xosTenant.js
+++ b/planetstack/core/xoslib/static/js/xosTenant.js
@@ -38,6 +38,7 @@
                      },
 
             createClicked: function(e) {
+                     XOSTenantApp.addSlice();
                      },
 
             deleteClicked: function(e) {
@@ -55,7 +56,8 @@
 XOSTenantApp = new XOSApplication({
     logTableId: "#logTable",
     statusMsgId: "#statusMsg",
-    hideTabsByDefault: true
+    hideTabsByDefault: true,
+    varName: "XOSTenantApp",
 });
 
 XOSTenantApp.addRegions({
@@ -63,9 +65,10 @@
     tenantSummary: "#tenantSummary",
     tenantSiteList: "#tenantSiteList",
     tenantButtons: "#tenantButtons",
+    tenantAddSliceInterior: "#tenant-addslice-interior",
 });
 
-XOSTenantApp.buildViews = function() {
+XOSTenantApp.buildViews = function() {
      XOSTenantApp.tenantSites = new XOSTenantSiteCollection();
 
      tenantSummaryClass = XOSDetailView.extend({template: "#xos-detail-template",
@@ -74,6 +77,12 @@
 
      XOSTenantApp.tenantSummaryView = tenantSummaryClass;
 
+     tenantAddClass = XOSDetailView.extend({template: "#xos-detail-template",
+                                                app: XOSTenantApp,
+                                                detailFields: ["name", "description"]});
+
+     XOSTenantApp.tenantAddView = tenantAddClass;
+
      tenantSiteItemClass = XOSItemView.extend({template: "#xos-listitem-template",
                                                app: XOSTenantApp});
 
@@ -92,8 +101,7 @@
 
      XOSTenantApp.tenantSliceSelectorView = SliceSelectorView.extend( {
          sliceChanged: function(id) {
-             //console.log("navigate to " + id);
-             XOSTenantApp.Router.navigate("slice/" + id, {trigger: true});
+             XOSTenantApp.navToSlice(id);
          },
      });
 
@@ -113,6 +121,41 @@
     return result;
 };
 
+XOSTenantApp.navToSlice = function(id) {
+    XOSTenantApp.viewSlice(xos.slicesPlus.get(id));
+};
+
+XOSTenantApp.adjustCollectionField = function(collectionName, id, fieldName, amount) {
+    model = XOSTenantApp[collectionName].get(id);
+    model.set(fieldName, Math.max(model.get(fieldName) + amount, 0));
+};
+
+XOSTenantApp.addSlice = function() {
+    var app=this;
+    model = new xos.slicesPlus.model({site: xos.tenant().current_user_site_id});
+    console.log(model);
+    var detailView = new XOSTenantApp.tenantAddView({model: model, collection: xos.slicesPlus});
+    detailView.dialog = $("tenant-addslice-dialog");
+    app.tenantAddSliceInterior.show(detailView);
+    $("#tenant-addslice-dialog").dialog({
+       autoOpen: false,
+       modal: true,
+       width: 640,
+       buttons : {
+            "Save" : function() {
+              var addDialog = this;
+              detailView.synchronous = true;
+              detailView.afterSave = function() { $(addDialog).dialog("close"); XOSTenantApp.navToSlice(detailView.model.id); }
+              detailView.save();
+            },
+            "Cancel" : function() {
+              $(this).dialog("close");
+            }
+          }
+        });
+    $("#tenant-addslice-dialog").dialog("open");
+};
+
 XOSTenantApp.viewSlice = function(model) {
     if (!model && xos.slicesPlus.models.length > 0) {
         model = xos.slicesPlus.models[0];
@@ -142,42 +185,6 @@
                                                                 linkedView: tenantSummary } ) );
 };
 
-XOSTenantApp.initRouter = function() {
-    router = XOSRouter;
-    var api = {};
-    var routes = {};
-
-    nav_url = "slice/:id";
-    api_command = "viewSlice";
-    api[api_command] = function(id) { XOSTenantApp.viewSlice(xos.slicesPlus.get(id)); };
-    routes[nav_url] = api_command;
-
-    nav_url = "increase/:collectionName/:id/:fieldName";
-    api_command = "increase";
-    api[api_command] = function(collectionName, id, fieldName) {
-                           XOSTenantApp.Router.showPreviousURL();
-                           model = XOSTenantApp[collectionName].get(id);
-                           model.set(fieldName, model.get(fieldName) + 1);
-                       };
-    routes[nav_url] = api_command;
-
-    nav_url = "decrease/:collectionName/:id/:fieldName";
-    api_command = "decrease";
-    api[api_command] = function(collectionName, id, fieldName) {
-                           XOSTenantApp.Router.showPreviousURL();
-                           model = XOSTenantApp[collectionName].get(id);
-                           model.set(fieldName, Math.max(0, model.get(fieldName) - 1));
-                       };
-    routes[nav_url] = api_command;
-
-    nav_url = "*path";
-    api_command = "defaultRoute";
-    api[api_command] = function() { XOSTenantApp.viewSlice(undefined); };
-    routes[nav_url] = api_command;
-
-    XOSTenantApp.Router = new router({ appRoutes: routes, controller: api });
-};
-
 XOSTenantApp.startNavigation = function() {
     Backbone.history.start();
     XOSTenantApp.navigationStarted = true;
@@ -188,11 +195,7 @@
 
     if (!XOSTenantApp.navigationStarted) {
         if (stats["isLoaded"] + stats["failedLoad"] >= stats["startedLoad"]) {
-            XOSTenantApp.startNavigation();
-
-            //if (xos.slicesPlus.models.length > 0) {
-            //    XOSTenantApp.Router.navigate("slice/" + xos.slicesPlus.models[0].id, {trigger:true});
-            //}
+            XOSTenantApp.viewSlice(undefined);
         } else {
             $("#tenantSummary").html("<h3>Loading...</h3><div id='xos-startup-progress'></div>");
             $("#xos-startup-progress").progressbar({value: stats["completedLoad"], max: stats["startedLoad"]});
@@ -203,8 +206,6 @@
 XOSTenantApp.on("start", function() {
      XOSTenantApp.buildViews();
 
-     XOSTenantApp.initRouter();
-
      // fire it once to initially show the progress bar
      XOSTenantApp.collectionLoadChange();
 
diff --git a/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js b/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js
index 762a2b5..d359f36 100644
--- a/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js
+++ b/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js
@@ -398,8 +398,6 @@
         if (!modelAttrs.defaults) {
             modelAttrs.defaults = get_defaults(modelName);
         }
-        console.log(modelName);
-        console.log(modelAttrs);
 
 //        if ((typeof xosdefaults !== "undefined") && xosdefaults[modelName]) {
 //            modelAttrs["defaults"] = xosdefaults[modelName];
@@ -694,6 +692,8 @@
                             detailFields: [],
                             });
 
+        this.tenant = function() { return this.tenantview.models[0].attributes; }
+
         this.listObjects = function() { return this.allCollectionNames; };
 
         this.getCollectionStatus = function() {
diff --git a/planetstack/core/xoslib/static/js/xoslib/xosHelper.js b/planetstack/core/xoslib/static/js/xoslib/xosHelper.js
index 0cadf79..4ec75a6 100644
--- a/planetstack/core/xoslib/static/js/xoslib/xosHelper.js
+++ b/planetstack/core/xoslib/static/js/xoslib/xosHelper.js
@@ -8,9 +8,6 @@
     template: "#xos-sliceselector-option",
     tagName: "option",
     attributes: function() {
-        console.log("XXX");
-        console.log(this.options.selectedID);
-        console.log(this.model.get("id"));
         if (this.options.selectedID == this.model.get("id")) {
             return { value: this.model.get("id"), selected: 1 };
         } else {
@@ -881,7 +878,7 @@
                 var foreignCollection = view.collection.foreignFields[fieldName];
                 mSearchText = function(x) { return idToName(x, foreignCollection, "humanReadableName"); };
             } else if (inputType[fieldName] == "spinner") {
-                mRender = function(x,y,z) { return xosDataTableSpinnerTemplate( {value: x, collectionName: view.collection.collectionName, fieldName: fieldName, id: z.id} ); };
+                mRender = function(x,y,z) { return xosDataTableSpinnerTemplate( {value: x, collectionName: view.collection.collectionName, fieldName: fieldName, id: z.id, app: view.app} ); };
             }
             if ($.inArray(fieldName, view.collection.detailLinkFields)>=0) {
                 var collectionName = view.collection.collectionName;
