diff --git a/planetstack/core/xoslib/static/js/xosTenant.js b/planetstack/core/xoslib/static/js/xosTenant.js
index 8bf2442..fc510f3 100644
--- a/planetstack/core/xoslib/static/js/xosTenant.js
+++ b/planetstack/core/xoslib/static/js/xosTenant.js
@@ -9,7 +9,7 @@
     modelName: "tenantSite",
     collectionName: "tenantSites",
 
-    updateFromSlice: function(slice) {
+    getFromSlice: function(slice) {
         var tenantSites = [];
         var id = 0;
         for (siteName in slice.attributes.site_allocation) {
@@ -26,8 +26,31 @@
         }
         this.set(tenantSites);
     },
+
+    putToSlice: function(slice) {
+        slice.attributes.site_allocation = {};
+        for (index in this.models) {
+            model = this.models[index];
+            slice.attributes.site_allocation[ model.attributes.name ] = model.attributes.allocated;
+        }
+    },
 });
 
+XOSEditUsersView = Marionette.ItemView.extend({
+            template: "#tenant-edit-users",
+            viewInitializers: [],
+
+            onShow: function() {
+                _.each(this.viewInitializers, function(initializer) {
+                    initializer();
+                });
+            },
+
+            templateHelpers: function() { return { detailView: this, model: this.model }; },
+
+            });
+
+
 XOSTenantButtonView = Marionette.ItemView.extend({
             template: "#xos-tenant-buttons-template",
 
@@ -46,9 +69,12 @@
                      },
 
             addUserClicked: function(e) {
+                     XOSTenantApp.editUsers(this.options.linkedView.model);
                      },
 
             saveClicked: function(e) {
+                     model = this.options.linkedView.model;
+                     model.tenantSiteCollection.putToSlice(model);
                      this.options.linkedView.submitContinueClicked.call(this.options.linkedView, e);
                      },
             });
@@ -66,6 +92,7 @@
     tenantSiteList: "#tenantSiteList",
     tenantButtons: "#tenantButtons",
     tenantAddSliceInterior: "#tenant-addslice-interior",
+    tenantEditUsersInterior: "#tenant-edit-users-interior",
 });
 
 XOSTenantApp.buildViews = function() {
@@ -73,7 +100,9 @@
 
      tenantSummaryClass = XOSDetailView.extend({template: "#xos-detail-template",
                                                 app: XOSTenantApp,
-                                                detailFields: ["serviceClass", "default_image", "default_flavor", "network_ports", "mount_data_sets"]});
+                                                detailFields: ["serviceClass", "default_image", "default_flavor", "network_ports", "mount_data_sets"],
+                                                fieldDisplayNames: {serviceClass: "Service Level", "default_flavor": "Flavor", "default_image": "Image"},
+                                                });
 
      XOSTenantApp.tenantSummaryView = tenantSummaryClass;
 
@@ -138,10 +167,14 @@
 
 XOSTenantApp.addSlice = function() {
     var app=this;
-    model = new xos.slicesPlus.model({site: xos.tenant().current_user_site_id});
+    model = new xos.slicesPlus.model({site: xos.tenant().current_user_site_id,
+                                      name: xos.tenant().current_user_login_base + "_"});
     console.log(model);
-    var detailView = new XOSTenantApp.tenantAddView({model: model, collection: xos.slicesPlus});
-    detailView.dialog = $("tenant-addslice-dialog");
+    var detailView = new XOSTenantApp.tenantAddView({model: model,
+                                                    collection: xos.slicesPlus,
+                                                    noSubmitButton: true,
+                                                    });
+    detailView.dialog = $("#tenant-addslice-dialog");
     app.tenantAddSliceInterior.show(detailView);
     $("#tenant-addslice-dialog").dialog({
        autoOpen: false,
@@ -150,6 +183,7 @@
        buttons : {
             "Save" : function() {
               var addDialog = this;
+              console.log("SAVE!!!");
               detailView.synchronous = true;
               detailView.afterSave = function() { $(addDialog).dialog("close"); XOSTenantApp.navToSlice(detailView.model.id); }
               detailView.save();
@@ -162,6 +196,31 @@
     $("#tenant-addslice-dialog").dialog("open");
 };
 
+XOSTenantApp.editUsers = function(model) {
+    var app=this;
+    var detailView = new XOSEditUsersView({model: model, collection: xos.slicesPlus});
+    detailView.dialog = $("#tenant-edit-users-dialog");
+    app.tenantEditUsersInterior.show(detailView);
+    $("#tenant-edit-users-dialog").dialog({
+       autoOpen: false,
+       modal: true,
+       width: 640,
+       buttons : {
+            "Save" : function() {
+              var editDialog = this;
+              user_ids = all_options($("#tenant-edit-users-dialog").find(".select-picker-to"));
+              user_ids = user_ids.map( function(x) { return parseInt(x,10); } );
+              model.attributes.users = user_ids;
+              $(editDialog).dialog("close");
+            },
+            "Cancel" : function() {
+              $(this).dialog("close");
+            }
+          }
+        });
+    $("#tenant-edit-users-dialog").dialog("open");
+};
+
 XOSTenantApp.deleteSlice = function(model) {
     var app=this;
     app.deleteDialog(model, function() { console.log("afterDelete"); app.viewSlice(undefined); });
@@ -181,13 +240,14 @@
     tenantSummary = new XOSTenantApp.tenantSummaryView({model: model,
                                                         choices: {mount_data_sets: make_choices(xos.tenant().public_volume_names, null),
                                                                   serviceClass: make_choices(xos.tenant().blessed_service_class_names, xos.tenant().blessed_service_classes),
-                                                                  default_image: make_choices(xos.tenant().blessed_image_names, xos.tenant().blessed_image_ids),
-                                                                  default_flavor: make_choices(xos.tenant().blessed_flavor_names, xos.tenant().blessed_flavor_ids),},
+                                                                  default_image: make_choices(xos.tenant().blessed_image_names, xos.tenant().blessed_images),
+                                                                  default_flavor: make_choices(xos.tenant().blessed_flavor_names, xos.tenant().blessed_flavors),},
                                                        });
     XOSTenantApp.tenantSummary.show(tenantSummary);
 
     tenantSites = new XOSTenantSiteCollection();
-    tenantSites.updateFromSlice(model);
+    tenantSites.getFromSlice(model);
+    model.tenantSiteCollection = tenantSites;
     XOSTenantApp.tenantSites = tenantSites;
 
     tenantSiteList = new XOSTenantApp.tenantSiteListView({collection: tenantSites });
