better tolerate missing enacted/updated fields
diff --git a/planetstack/core/xoslib/static/js/xoslib/xos-defaults.js b/planetstack/core/xoslib/static/js/xoslib/xos-defaults.js
index b536eaf..a4a48a5 100644
--- a/planetstack/core/xoslib/static/js/xoslib/xos-defaults.js
+++ b/planetstack/core/xoslib/static/js/xoslib/xos-defaults.js
@@ -1,23 +1,31 @@
 function xos_get_defaults() {
   this.account = {"updated": null, "created": null, "deleted": false, "site": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.charge = {"updated": null, "slice": null, "created": null, "deleted": false, "object": null, "account": null, "date": null, "amount": 0.0, "state": "pending", "invoice": null, "coreHours": 0.0, "backend_status": "Provisioning in progress", "kind": "besteffort", "enacted": null};
+  this.controller = {"updated": null, "backend_type": null, "name": "", "created": null, "deleted": false, "admin_user": null, "auth_url": null, "admin_password": null, "version": "", "backend_status": "Provisioning in progress", "admin_tenant": null, "enacted": null};
+  this.controllerDashboardView = {"updated": null, "created": null, "deleted": false, "dashboardView": null, "url": "", "controller": null, "backend_status": "Provisioning in progress", "enacted": null};
+  this.controllerImages = {"updated": null, "created": null, "deleted": false, "image": null, "controller": null, "backend_status": "Provisioning in progress", "glance_image_id": null, "enacted": null};
+  this.controllerNetworks = {"router_id": null, "subnet": "", "updated": null, "network": null, "created": null, "deleted": false, "subnet_id": null, "controller": null, "backend_status": "Provisioning in progress", "net_id": null, "enacted": null};
+  this.controllerPrivilege = {"updated": null, "created": null, "deleted": false, "controller": null, "role": null, "user": null, "backend_status": "Provisioning in progress", "enacted": null};
+  this.controllerRole = {"updated": null, "created": null, "deleted": false, "role": "", "backend_status": "Provisioning in progress", "enacted": null};
+  this.controllerSlices = {"updated": null, "slice": null, "created": null, "deleted": false, "tenant_id": null, "controller": null, "backend_status": "Provisioning in progress", "enacted": null};
+  this.controllerUsers = {"updated": null, "created": null, "deleted": false, "kuser_id": null, "controller": null, "user": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.dashboardView = {"updated": null, "name": "", "created": null, "deleted": false, "url": "", "backend_status": "Provisioning in progress", "enacted": null};
-  this.deployment = {"accessControl": "allow all", "updated": null, "admin_user": null, "name": "", "created": null, "deleted": false, "availability_zone": null, "backend_type": "", "auth_url": null, "admin_password": null, "backend_status": "Provisioning in progress", "admin_tenant": null, "enacted": null};
+  this.deployment = {"accessControl": "allow all", "updated": null, "name": "", "created": null, "deleted": false, "backend_status": "Provisioning in progress", "enacted": null};
   this.deploymentPrivilege = {"updated": null, "created": null, "deleted": false, "role": null, "user": null, "deployment": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.deploymentRole = {"updated": null, "created": null, "deleted": false, "role": "", "backend_status": "Provisioning in progress", "enacted": null};
   this.flavor = {"updated": null, "description": null, "created": null, "deleted": false, "enacted": null, "default": false, "flavor": "", "backend_status": "Provisioning in progress", "order": 0, "name": ""};
   this.image = {"updated": null, "name": "", "created": null, "deleted": false, "container_format": "", "disk_format": "", "path": null, "backend_status": "Provisioning in progress", "enacted": null};
-  this.imageDeployments = {"updated": null, "created": null, "deleted": false, "image": null, "deployment": null, "backend_status": "Provisioning in progress", "glance_image_id": null, "enacted": null};
+  this.imageDeployments = {"updated": null, "created": null, "deleted": false, "image": null, "deployment": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.invoice = {"updated": null, "created": null, "deleted": false, "account": null, "date": null, "backend_status": "Provisioning in progress", "enacted": null};
-  this.network = {"router_id": null, "subnet": "", "updated": null, "name": "", "created": null, "subnet_id": null, "network_id": null, "labels": null, "guaranteedBandwidth": 0, "deleted": false, "template": null, "owner": null, "backend_status": "Provisioning in progress", "ports": null, "permitAllSlices": false, "enacted": null};
-  this.networkDeployments = {"router_id": null, "subnet": "", "updated": null, "network": null, "created": null, "deleted": false, "subnet_id": null, "deployment": null, "backend_status": "Provisioning in progress", "net_id": null, "enacted": null};
+  this.network = {"permit_all_slices": false, "subnet": "", "updated": null, "controller_url": null, "name": "", "created": null, "subnet_id": null, "network_id": null, "labels": null, "owner": null, "deleted": false, "router_id": null, "controller_parameters": null, "guaranteed_bandwidth": 0, "topology_parameters": null, "enacted": null, "backend_status": "Provisioning in progress", "ports": null, "template": null};
   this.networkParameter = {"updated": null, "created": null, "deleted": false, "object_id": null, "value": "", "content_type": null, "backend_status": "Provisioning in progress", "parameter": null, "enacted": null};
   this.networkParameterType = {"updated": null, "description": "", "created": null, "deleted": false, "enacted": null, "backend_status": "Provisioning in progress", "name": ""};
   this.networkSlice = {"updated": null, "slice": null, "network": null, "created": null, "deleted": false, "backend_status": "Provisioning in progress", "enacted": null};
   this.networkSliver = {"updated": null, "network": null, "created": null, "deleted": false, "ip": null, "enacted": null, "backend_status": "Provisioning in progress", "port_id": null, "sliver": null};
-  this.networkTemplate = {"enacted": null, "updated": null, "backend_status": "Provisioning in progress", "description": null, "created": null, "deleted": false, "shared_network_name": null, "guaranteed_bandwidth": 0, "visibility": "private", "translation": "none", "shared_network_id": null, "name": ""};
-  this.node = {"updated": null, "name": "", "created": null, "deleted": false, "site": null, "deployment": null, "backend_status": "Provisioning in progress", "enacted": null};
-  this.payment = {"updated": null, "created": null, "deleted": false, "account": null, "amount": 0.0, "date": "2014-11-12T01:19:50.077Z", "backend_status": "Provisioning in progress", "enacted": null};
+XXX warning: topology_kind invalid case
+  this.networkTemplate = {"updated": null, "description": null, "created": null, "deleted": false, "enacted": null, "visibility": "private", "topology_kind": "bigswitch", "shared_network_name": null, "guaranteed_bandwidth": 0, "translation": "none", "backend_status": "Provisioning in progress", "shared_network_id": null, "controller_kind": null, "name": ""};
+  this.node = {"updated": null, "name": "", "created": null, "deleted": false, "backend_status": "Provisioning in progress", "site_deployment": null, "enacted": null};
+  this.payment = {"updated": null, "created": null, "deleted": false, "account": null, "amount": 0.0, "date": "2015-01-06T01:16:32.733Z", "backend_status": "Provisioning in progress", "enacted": null};
   this.planetStack = {"updated": null, "description": "PlanetStack", "created": null, "deleted": false, "backend_status": "Provisioning in progress", "enacted": null};
   this.planetStackPrivilege = {"updated": null, "created": null, "deleted": false, "role": null, "user": null, "backend_status": "Provisioning in progress", "planetstack": 1, "enacted": null};
   this.planetStackRole = {"updated": null, "created": null, "deleted": false, "role": "", "backend_status": "Provisioning in progress", "enacted": null};
@@ -30,23 +38,21 @@
   this.serviceAttribute = {"updated": null, "name": "", "service": null, "created": null, "deleted": false, "value": "", "backend_status": "Provisioning in progress", "enacted": null};
   this.serviceClass = {"updated": null, "membershipFee": 0, "membershipFeeMonths": 12, "created": null, "deleted": false, "description": "", "commitment": 365, "enacted": null, "backend_status": "Provisioning in progress", "upgradeRequiresApproval": false, "name": ""};
   this.serviceResource = {"updated": null, "name": "", "bucketMaxSize": 0, "created": null, "deleted": false, "serviceClass": null, "maxUnitsDeployment": 1, "maxDuration": 1, "maxUnitsNode": 1, "cost": 0, "enacted": null, "backend_status": "Provisioning in progress", "bucketInRate": 0, "calendarReservable": true};
-  this.site = {"updated": null, "name": "", "created": null, "deleted": false, "enabled": true, "longitude": null, "site_url": null, "login_base": "", "location": "0,0", "latitude": null, "is_public": true, "backend_status": "Provisioning in progress", "abbreviated_name": "", "enacted": null};
+  this.site = {"updated": null, "name": "", "created": null, "deleted": false, "enabled": true, "longitude": null, "site_url": null, "login_base": "", "location": null, "latitude": null, "is_public": true, "backend_status": "Provisioning in progress", "abbreviated_name": "", "enacted": null};
   this.siteCredential = {"updated": null, "name": "", "created": null, "deleted": false, "site": null, "key_id": "", "enacted": null, "backend_status": "Provisioning in progress", "enc_value": ""};
-  this.siteDeployments = {"updated": null, "created": null, "deleted": false, "tenant_id": null, "site": null, "deployment": null, "backend_status": "Provisioning in progress", "enacted": null};
+  this.siteDeployments = {"updated": null, "availability_zone": null, "deleted": false, "tenant_id": null, "created": null, "site": null, "controller": null, "deployment": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.sitePrivilege = {"updated": null, "created": null, "deleted": false, "site": null, "role": null, "user": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.siteRole = {"updated": null, "created": null, "deleted": false, "role": "", "backend_status": "Provisioning in progress", "enacted": null};
-  this.slice = {"updated": null, "imagePreference": "Ubuntu 12.04 LTS", "name": "", "service": null, "created": null, "deleted": false, "slice_url": "", "serviceClass": 1, "enabled": true, "site": null, "omf_friendly": false, "network": "Private Only", "max_slivers": 10, "mountDataSets": "GenBank", "enacted": null, "backend_status": "Provisioning in progress", "creator": null, "description": ""};
+  this.slice = {"updated": null, "name": "", "service": null, "created": null, "deleted": false, "slice_url": "", "serviceClass": 1, "enabled": true, "site": null, "image_preference": "Ubuntu 12.04 LTS", "omf_friendly": false, "network": "Private Only", "mount_data_sets": "GenBank", "max_slivers": 10, "enacted": null, "backend_status": "Provisioning in progress", "creator": null, "description": ""};
   this.sliceCredential = {"updated": null, "slice": null, "name": "", "created": null, "deleted": false, "key_id": "", "enacted": null, "backend_status": "Provisioning in progress", "enc_value": ""};
-  this.sliceDeployments = {"router_id": null, "updated": null, "slice": null, "network_id": null, "created": null, "deleted": false, "tenant_id": null, "subnet_id": null, "deployment": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.slicePrivilege = {"updated": null, "slice": null, "created": null, "deleted": false, "role": null, "user": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.sliceRole = {"updated": null, "created": null, "deleted": false, "role": "", "backend_status": "Provisioning in progress", "enacted": null};
   this.sliceTag = {"updated": null, "slice": null, "name": "", "created": null, "deleted": false, "value": "", "backend_status": "Provisioning in progress", "enacted": null};
-  this.sliver = {"node": null, "instance_id": null, "updated": null, "slice": null, "deploymentNetwork": null, "name": "", "created": null, "deleted": false, "ip": null, "image": null, "creator": null, "numberCores": 0, "instance_name": null, "userData": null, "backend_status": "Provisioning in progress", "flavor": 2, "enacted": null};
+  this.sliver = {"node": null, "userData": null, "updated": null, "slice": null, "name": "", "created": null, "deleted": false, "ip": null, "image": null, "creator": null, "numberCores": 0, "instance_name": null, "deployment": null, "instance_id": null, "backend_status": "Provisioning in progress", "flavor": 2, "enacted": null};
   this.tag = {"updated": null, "name": "", "service": null, "created": null, "deleted": false, "value": "", "object_id": null, "content_type": null, "backend_status": "Provisioning in progress", "enacted": null};
   this.usableObject = {"updated": null, "name": "", "created": null, "deleted": false, "backend_status": "Provisioning in progress", "enacted": null};
-  this.user = {"username": "Something", "public_key": null, "updated": null, "password": "", "is_readonly": false, "firstname": "", "user_url": null, "deleted": false, "lastname": "", "created": null, "is_active": true, "site": null, "phone": null, "is_staff": true, "last_login": "2014-11-12T01:19:50.111Z", "is_admin": true, "timezone": "America/New_York", "backend_status": "Provisioning in progress", "email": "", "enacted": null};
+  this.user = {"username": "Something", "public_key": null, "updated": null, "password": "", "is_readonly": false, "firstname": "", "user_url": null, "deleted": false, "lastname": "", "created": null, "is_active": true, "site": null, "phone": null, "is_staff": true, "last_login": "2015-01-06T01:16:32.758Z", "is_admin": true, "timezone": "America/New_York", "backend_status": "Provisioning in progress", "email": "", "enacted": null};
   this.userCredential = {"updated": null, "name": "", "created": null, "deleted": false, "user": null, "key_id": "", "enacted": null, "backend_status": "Provisioning in progress", "enc_value": ""};
   this.userDashboardView = {"updated": null, "created": null, "deleted": false, "dashboardView": null, "user": null, "backend_status": "Provisioning in progress", "order": 0, "enacted": null};
-  this.userDeployments = {"updated": null, "created": null, "deleted": false, "kuser_id": null, "user": null, "deployment": null, "backend_status": "Provisioning in progress", "enacted": null};
 };
 xosdefaults = new xos_get_defaults();
diff --git a/planetstack/core/xoslib/static/js/xoslib/xos-validators.js b/planetstack/core/xoslib/static/js/xoslib/xos-validators.js
index 9af6ba7..89765e8 100644
--- a/planetstack/core/xoslib/static/js/xoslib/xos-validators.js
+++ b/planetstack/core/xoslib/static/js/xoslib/xos-validators.js
@@ -1,52 +1,58 @@
 function xos_get_validators() {
-  this.account = {"updated": [], "created": [], "deleted": [], "site": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.charge = {"updated": [], "slice": [], "created": [], "deleted": [], "amount": ["notBlank"], "object": ["notBlank"], "account": ["notBlank"], "kind": ["notBlank"], "state": ["notBlank"], "coreHours": ["notBlank"], "invoice": [], "date": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.dashboardView = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "url": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.deployment = {"accessControl": ["notBlank"], "updated": [], "admin_user": [], "name": ["notBlank"], "created": [], "deleted": [], "availability_zone": [], "backend_type": [], "auth_url": [], "admin_password": [], "backend_status": ["notBlank"], "admin_tenant": [], "id": [], "enacted": ["notBlank"]};
-  this.deploymentPrivilege = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "user": ["notBlank"], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.deploymentRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.flavor = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "description": [], "order": ["notBlank"], "default": [], "flavor": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.image = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "container_format": ["notBlank"], "disk_format": ["notBlank"], "path": [], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.imageDeployments = {"updated": [], "created": [], "deleted": [], "image": ["notBlank"], "glance_image_id": [], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.invoice = {"updated": [], "created": [], "deleted": [], "account": ["notBlank"], "date": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.network = {"controllerParameters": [], "subnet": [], "updated": [], "subnet_id": [], "topologyParameters": [], "name": ["notBlank"], "created": [], "deleted": [], "network_id": [], "labels": [], "guaranteedBandwidth": ["notBlank"], "controllerUrl": [], "ports": [], "permitAllSlices": [], "router_id": [], "template": ["notBlank"], "owner": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.networkDeployments = {"router_id": [], "subnet": [], "updated": [], "network": ["notBlank"], "created": [], "deleted": [], "net_id": [], "subnet_id": [], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.networkParameter = {"updated": [], "created": [], "deleted": [], "value": ["notBlank"], "object_id": ["notBlank"], "content_type": ["notBlank"], "backend_status": ["notBlank"], "parameter": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.networkParameterType = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "description": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.networkSlice = {"updated": [], "slice": ["notBlank"], "network": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.networkSliver = {"updated": [], "network": ["notBlank"], "created": [], "deleted": [], "ip": [], "sliver": ["notBlank"], "backend_status": ["notBlank"], "port_id": [], "id": [], "enacted": ["notBlank"]};
-  this.networkTemplate = {"controller_kind": [], "updated": [], "name": ["notBlank"], "created": [], "deleted": [], "description": [], "shared_network_name": [], "guaranteed_bandwidth": ["notBlank"], "visibility": ["notBlank"], "topology_kind": ["notBlank"], "shared_network_id": [], "translation": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.node = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "site": ["notBlank"], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.payment = {"updated": [], "created": [], "deleted": [], "account": ["notBlank"], "amount": ["notBlank"], "date": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.planetStack = {"updated": [], "description": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.planetStackPrivilege = {"updated": [], "created": [], "deleted": [], "planetstack": ["notBlank"], "role": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.planetStackRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.project = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.reservation = {"updated": [], "slice": ["notBlank"], "created": [], "deleted": [], "startTime": ["notBlank"], "duration": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.reservedResource = {"updated": [], "resource": ["notBlank"], "created": [], "deleted": [], "sliver": ["notBlank"], "reservationSet": ["notBlank"], "backend_status": ["notBlank"], "id": [], "quantity": ["notBlank"], "enacted": ["notBlank"]};
-  this.role = {"updated": [], "description": ["notBlank"], "created": [], "deleted": [], "role": [], "content_type": ["notBlank"], "backend_status": ["notBlank"], "id": [], "role_type": ["notBlank"], "enacted": ["notBlank"]};
-  this.router = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "owner": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.service = {"updated": [], "description": [], "created": [], "deleted": [], "enabled": [], "name": ["notBlank"], "versionNumber": ["notBlank"], "published": [], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.serviceAttribute = {"updated": [], "name": ["notBlank"], "service": ["notBlank"], "created": [], "deleted": [], "value": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.serviceClass = {"updated": [], "membershipFee": ["notBlank"], "name": ["notBlank"], "membershipFeeMonths": ["notBlank"], "created": [], "deleted": [], "description": ["notBlank"], "commitment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "upgradeRequiresApproval": [], "enacted": ["notBlank"]};
-  this.serviceResource = {"updated": [], "bucketInRate": ["notBlank"], "name": ["notBlank"], "bucketMaxSize": ["notBlank"], "created": [], "deleted": [], "serviceClass": ["notBlank"], "maxUnitsDeployment": ["notBlank"], "calendarReservable": [], "maxDuration": ["notBlank"], "maxUnitsNode": ["notBlank"], "cost": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.site = {"abbreviated_name": ["notBlank"], "updated": [], "name": ["notBlank"], "created": [], "deleted": [], "enabled": [], "longitude": [], "site_url": [], "login_base": ["notBlank"], "location": ["notBlank"], "latitude": [], "is_public": [], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.siteCredential = {"updated": [], "enc_value": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "site": ["notBlank"], "key_id": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.siteDeployments = {"updated": [], "created": [], "deleted": [], "tenant_id": [], "site": ["notBlank"], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.sitePrivilege = {"updated": [], "created": [], "deleted": [], "site": ["notBlank"], "role": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.siteRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.slice = {"updated": [], "imagePreference": [], "name": ["notBlank"], "service": [], "created": [], "deleted": [], "slice_url": [], "description": [], "serviceClass": ["notBlank"], "enabled": [], "site": ["notBlank"], "omf_friendly": [], "network": [], "max_slivers": ["notBlank"], "mountDataSets": [], "backend_status": ["notBlank"], "creator": [], "id": [], "enacted": ["notBlank"]};
-  this.sliceCredential = {"updated": [], "slice": ["notBlank"], "enc_value": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "key_id": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.sliceDeployments = {"router_id": [], "updated": [], "slice": ["notBlank"], "created": [], "deleted": [], "tenant_id": [], "subnet_id": [], "network_id": [], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.slicePrivilege = {"updated": [], "slice": ["notBlank"], "created": [], "deleted": [], "role": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.sliceRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.sliceTag = {"updated": [], "slice": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "value": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.sliver = {"node": ["notBlank"], "instance_name": [], "updated": [], "slice": ["notBlank"], "deploymentNetwork": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "ip": [], "image": ["notBlank"], "creator": [], "numberCores": ["notBlank"], "instance_id": [], "userData": [], "flavor": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.tag = {"updated": [], "name": ["notBlank"], "service": ["notBlank"], "created": [], "deleted": [], "value": ["notBlank"], "object_id": ["notBlank"], "content_type": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.usableObject = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.user = {"username": ["notBlank"], "public_key": [], "updated": [], "backend_status": ["notBlank"], "is_readonly": [], "firstname": ["notBlank"], "user_url": [], "deleted": [], "lastname": ["notBlank"], "created": [], "is_active": [], "site": ["notBlank"], "email": ["notBlank"], "phone": [], "is_staff": [], "last_login": ["notBlank"], "timezone": ["notBlank"], "is_admin": [], "password": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.userCredential = {"updated": [], "enc_value": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "user": ["notBlank"], "key_id": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.userDashboardView = {"updated": [], "created": [], "deleted": [], "dashboardView": ["notBlank"], "order": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
-  this.userDeployments = {"updated": [], "created": [], "deleted": [], "kuser_id": [], "user": ["notBlank"], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": ["notBlank"]};
+  this.account = {"updated": [], "created": [], "deleted": [], "site": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.charge = {"updated": [], "slice": [], "created": [], "deleted": [], "amount": ["notBlank"], "object": ["notBlank"], "account": ["notBlank"], "kind": ["notBlank"], "state": ["notBlank"], "coreHours": ["notBlank"], "invoice": [], "date": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.controller = {"updated": [], "backend_type": [], "name": ["notBlank"], "admin_user": [], "created": [], "deleted": [], "version": ["notBlank"], "auth_url": [], "admin_password": [], "backend_status": ["notBlank"], "admin_tenant": [], "id": [], "enacted": []};
+  this.controllerDashboardView = {"updated": [], "created": [], "deleted": [], "dashboardView": ["notBlank"], "url": ["notBlank"], "controller": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.controllerImages = {"updated": [], "created": [], "deleted": [], "image": ["notBlank"], "glance_image_id": [], "controller": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.controllerNetworks = {"router_id": [], "subnet": [], "updated": [], "network": ["notBlank"], "created": [], "deleted": [], "net_id": [], "subnet_id": [], "controller": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.controllerPrivilege = {"updated": [], "created": [], "deleted": [], "controller": ["notBlank"], "role": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.controllerRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.controllerSlices = {"updated": [], "slice": ["notBlank"], "created": [], "deleted": [], "tenant_id": [], "controller": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.controllerUsers = {"updated": [], "created": [], "deleted": [], "kuser_id": [], "controller": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.dashboardView = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "url": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.deployment = {"accessControl": ["notBlank"], "updated": [], "name": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.deploymentPrivilege = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "user": ["notBlank"], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.deploymentRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.flavor = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "description": [], "order": ["notBlank"], "default": [], "flavor": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.image = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "container_format": ["notBlank"], "disk_format": ["notBlank"], "path": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.imageDeployments = {"updated": [], "created": [], "deleted": [], "image": ["notBlank"], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.invoice = {"updated": [], "created": [], "deleted": [], "account": ["notBlank"], "date": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.network = {"permit_all_slices": [], "subnet": [], "updated": [], "subnet_id": [], "controller_url": [], "name": ["notBlank"], "created": [], "deleted": [], "network_id": [], "labels": [], "ports": [], "guaranteed_bandwidth": ["notBlank"], "controller_parameters": [], "router_id": [], "template": ["notBlank"], "owner": ["notBlank"], "topology_parameters": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.networkParameter = {"updated": [], "created": [], "deleted": [], "value": ["notBlank"], "object_id": ["notBlank"], "content_type": ["notBlank"], "backend_status": ["notBlank"], "parameter": ["notBlank"], "id": [], "enacted": []};
+  this.networkParameterType = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "description": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.networkSlice = {"updated": [], "slice": ["notBlank"], "network": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.networkSliver = {"updated": [], "network": ["notBlank"], "created": [], "deleted": [], "ip": [], "sliver": ["notBlank"], "backend_status": ["notBlank"], "port_id": [], "id": [], "enacted": []};
+XXX warning: topology_kind invalid case
+  this.networkTemplate = {"shared_network_id": [], "updated": [], "name": ["notBlank"], "created": [], "deleted": [], "description": [], "visibility": ["notBlank"], "shared_network_name": [], "topology_kind": ["notBlank"], "guaranteed_bandwidth": ["notBlank"], "translation": ["notBlank"], "backend_status": ["notBlank"], "id": [], "controller_kind": [], "enacted": []};
+  this.node = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "site_deployment": ["notBlank"], "enacted": []};
+  this.payment = {"updated": [], "created": [], "deleted": [], "account": ["notBlank"], "amount": ["notBlank"], "date": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.planetStack = {"updated": [], "description": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.planetStackPrivilege = {"updated": [], "created": [], "deleted": [], "planetstack": ["notBlank"], "role": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.planetStackRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.project = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.reservation = {"updated": [], "slice": ["notBlank"], "created": [], "deleted": [], "startTime": ["notBlank"], "duration": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.reservedResource = {"updated": [], "resource": ["notBlank"], "created": [], "deleted": [], "sliver": ["notBlank"], "reservationSet": ["notBlank"], "backend_status": ["notBlank"], "id": [], "quantity": ["notBlank"], "enacted": []};
+  this.role = {"updated": [], "description": ["notBlank"], "created": [], "deleted": [], "role": [], "content_type": ["notBlank"], "backend_status": ["notBlank"], "id": [], "role_type": ["notBlank"], "enacted": []};
+  this.router = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "owner": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.service = {"updated": [], "description": [], "created": [], "deleted": [], "enabled": [], "name": ["notBlank"], "versionNumber": ["notBlank"], "published": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.serviceAttribute = {"updated": [], "name": ["notBlank"], "service": ["notBlank"], "created": [], "deleted": [], "value": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.serviceClass = {"updated": [], "membershipFee": ["notBlank"], "name": ["notBlank"], "membershipFeeMonths": ["notBlank"], "created": [], "deleted": [], "description": ["notBlank"], "commitment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "upgradeRequiresApproval": [], "enacted": []};
+  this.serviceResource = {"updated": [], "bucketInRate": ["notBlank"], "name": ["notBlank"], "bucketMaxSize": ["notBlank"], "created": [], "deleted": [], "serviceClass": ["notBlank"], "maxUnitsDeployment": ["notBlank"], "calendarReservable": [], "maxDuration": ["notBlank"], "maxUnitsNode": ["notBlank"], "cost": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.site = {"abbreviated_name": ["notBlank"], "updated": [], "name": ["notBlank"], "created": [], "deleted": [], "enabled": [], "longitude": [], "site_url": ["url"], "login_base": ["notBlank"], "location": ["notBlank"], "latitude": [], "is_public": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.siteCredential = {"updated": [], "enc_value": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "site": ["notBlank"], "key_id": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.siteDeployments = {"updated": [], "created": [], "deleted": [], "tenant_id": [], "availability_zone": [], "site": ["notBlank"], "controller": [], "deployment": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.sitePrivilege = {"updated": [], "created": [], "deleted": [], "site": ["notBlank"], "role": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.siteRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.slice = {"updated": [], "name": ["notBlank"], "service": [], "created": [], "deleted": [], "slice_url": ["url"], "description": [], "serviceClass": ["notBlank"], "enabled": [], "site": ["notBlank"], "image_preference": [], "omf_friendly": [], "network": [], "mount_data_sets": [], "max_slivers": ["notBlank"], "backend_status": ["notBlank"], "creator": [], "id": [], "enacted": []};
+  this.sliceCredential = {"updated": [], "slice": ["notBlank"], "enc_value": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "key_id": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.slicePrivilege = {"updated": [], "slice": ["notBlank"], "created": [], "deleted": [], "role": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.sliceRole = {"updated": [], "created": [], "deleted": [], "role": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.sliceTag = {"updated": [], "slice": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "value": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.sliver = {"node": ["notBlank"], "instance_name": [], "updated": [], "slice": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "ip": [], "image": ["notBlank"], "creator": [], "numberCores": ["notBlank"], "userData": [], "instance_id": [], "deployment": ["notBlank"], "flavor": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.tag = {"updated": [], "name": ["notBlank"], "service": ["notBlank"], "created": [], "deleted": [], "value": ["notBlank"], "object_id": ["notBlank"], "content_type": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.usableObject = {"updated": [], "name": ["notBlank"], "created": [], "deleted": [], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.user = {"username": ["notBlank"], "public_key": [], "updated": [], "backend_status": ["notBlank"], "is_readonly": [], "firstname": ["notBlank"], "user_url": ["url"], "deleted": [], "lastname": ["notBlank"], "created": [], "is_active": [], "site": ["notBlank"], "email": ["notBlank"], "phone": [], "is_staff": [], "last_login": ["notBlank"], "timezone": ["notBlank"], "is_admin": [], "password": ["notBlank"], "id": [], "enacted": ["notBlank"]};
+  this.userCredential = {"updated": [], "enc_value": ["notBlank"], "name": ["notBlank"], "created": [], "deleted": [], "user": ["notBlank"], "key_id": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
+  this.userDashboardView = {"updated": [], "created": [], "deleted": [], "dashboardView": ["notBlank"], "order": ["notBlank"], "user": ["notBlank"], "backend_status": ["notBlank"], "id": [], "enacted": []};
 };
 xosvalidators = new xos_get_validators();
diff --git a/planetstack/core/xoslib/templates/xosAdmin.html b/planetstack/core/xoslib/templates/xosAdmin.html
index 700fd19..4862cea 100644
--- a/planetstack/core/xoslib/templates/xosAdmin.html
+++ b/planetstack/core/xoslib/templates/xosAdmin.html
@@ -84,7 +84,7 @@
 </script>
 
 <script type="text/template" id="xos-backend-status-icon-template">
-    <% if (model.enacted === undefined) { %>
+    <% if (! ("enacted" in arguments) ) { %>
         <!-- enacted is undefined; this must be a new object -->
     <% } else if ((enacted) && (enacted >= updated)) { %>
         <span style="min-width:16px;"><img src="/static/admin/img/icon_success.gif"></span>