diff --git a/planetstack/core/xoslib/templates/xosAdmin.html b/planetstack/core/xoslib/templates/xosAdmin.html
index 3848fc0..8047580 100644
--- a/planetstack/core/xoslib/templates/xosAdmin.html
+++ b/planetstack/core/xoslib/templates/xosAdmin.html
@@ -108,7 +108,7 @@
   <table>
   <% _.each(addFields, function(fieldName) { %>
      <tr><td><%= fieldNameToHumanReadable(fieldName) %>:</td>
-        <% readOnly = $.inArray(fieldName, model.readOnlyFields)>=0 ? " readonly" : "";  console.log(fieldName + " " + readOnly); console.log(model.readOnlyFields); %>
+        <% readOnly = $.inArray(fieldName, model.readOnlyFields)>=0 ? " readonly" : "";  %>
         <% if (fieldName in foreignFields) { %>
             <td><%= idToSelect(fieldName, model.attributes[fieldName], foreignFields[fieldName], "humanReadableName", readOnly) %></td>
         <% } else if (inputType[fieldName] == "checkbox") { %>
@@ -129,12 +129,13 @@
   <table>
   <% console.log(model); _.each(detailFields, function(fieldName) { %>
      <tr><td><%= fieldNameToHumanReadable(fieldName) %>:</td>
+        <% readOnly = $.inArray(fieldName, model.readOnlyFields)>=0 ? " readonly" : "";  console.log(fieldName + " " + readOnly); console.log(model.readOnlyFields); %>
         <% if (fieldName in foreignFields) { %>
-            <td><%= idToSelect(fieldName, model.attributes[fieldName], foreignFields[fieldName], "humanReadableName") %></td>
+            <td><%= idToSelect(fieldName, model.attributes[fieldName], foreignFields[fieldName], "humanReadableName", readOnly) %></td>
         <% } else if (inputType[fieldName] == "checkbox") { %>
-            <td><input type="checkbox" name="<%= fieldName %>" <% if (model.attributes[fieldName]) print("checked"); %>></td>
+            <td><input type="checkbox" name="<%= fieldName %>" <% if (model.attributes[fieldName]) print("checked"); %><%= readOnly %>></td>
         <% } else { %>
-            <td><input type="text" name="<%= fieldName %>" value="<%= model.attributes[fieldName] %>"></td>
+            <td><input type="text" name="<%= fieldName %>" value="<%= model.attributes[fieldName] %>"<%= readOnly %>></td>
         <% } %>
      </tr>
   <% }); %>
@@ -143,478 +144,32 @@
   </form>
 </script>
 
-<!-- Deployment -->
-
-<script type="text/template" id="xosAdmin-deployment-list-template">
+<script type="text/template" id="xos-list-template">
   <h3 class="xos-list-title"><%= title %></h3>
   <%= xosListHeaderTemplate() %>
   <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>backend</th>
-     <th>admin_tenant</th>
-     <th># sites</th>
-     <th>delete</th>
+  <thead>
+  <tr>
+  <% _.each(listFields, function(fieldName) { %>
+      <th><%= fieldNameToHumanReadable(fieldName) %></th>
+  <% }); %>
+  <th>delete</th>
   </tr></thead>
   <tbody></tbody>
   </table>
   <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
 </script>
 
-
-<script type="text/template" id="xosAdmin-deployment-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= backend_type %></td>
-  <td><%= admin_tenant %></td>
-  <td><%= typeof sites != 'undefined' && sites.length || 0 %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- Image -->
-
-<script type="text/template" id="xosAdmin-image-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>disk_format</th>
-     <th>container_format</th>
-     <th>path</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-image-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= disk_format %></td>
-  <td><%= container_format %></td>
-  <td><%= path %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- NetworkTemplate -->
-
-<script type="text/template" id="xosAdmin-networkTemplate-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>description</th>
-     <th>visibility</th>
-     <th>translation</th>
-     <th>sharedNetworkName</th>
-     <th>sharedNetworkId</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-
-<script type="text/template" id="xosAdmin-networkTemplate-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= description %></td>
-  <td><%= visibility %></td>
-  <td><%= translation %></td>
-  <td><%= sharedNetworkName %></td>
-  <td><%= sharedNetworkId %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- Network -->
-
-<script type="text/template" id="xosAdmin-network-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>template</th>
-     <th>ports</th>
-     <th>labels</th>
-     <th>owner</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-network-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= idToName(template,"networkTemplates","name") %></td>
-  <td><%= ports %></td>
-  <td><%= labels %></td>
-  <td><%= idToName(owner,"slices","name") %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- NetworkSliver -->
-
-<script type="text/template" id="xosAdmin-networkSliver-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>network</th>
-     <th>sliver</th>
-     <th>ip</th>
-     <th>port_id</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-networkSliver-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td><%= idToName(network,"networks","name") %></td>
-  <td><%= idToName(sliver,"slivers","name") %></td>
-  <td><%= ip %></td>
-  <td><%= port_id %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- NetworkDeployment -->
-
-<script type="text/template" id="xosAdmin-networkDeployment-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>network</th>
-     <th>deployment</th>
-     <th>net_id</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-networkDeployment-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td><%= idToName(network,"networks","name") %></td>
-  <td><%= idToName(deployment,"deployments","name") %></td>
-  <td><%= net_id %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- Node -->
-
-<script type="text/template" id="xosAdmin-node-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>site</th>
-     <th>deployment</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-
-<script type="text/template" id="xosAdmin-node-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= idToName(site,"sites","name") %></td>
-  <td><%= idToName(deployment,"deployments","name") %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- SliceRole -->
-
-<script type="text/template" id="xosAdmin-sliceRole-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>role</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-sliceRole-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td><%= role %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- Service -->
-
-<script type="text/template" id="xosAdmin-service-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>description</th>
-     <th>enabled</th>
-     <th>versionNumber</th>
-     <th>published</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-
-<script type="text/template" id="xosAdmin-service-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= description %></td>
-  <td><%= enabled %></td>
-  <td><%= versionNumber %></td>
-  <td><%= published %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- Site -->
-
-<script type="text/template" id="xosAdmin-site-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>url</th>
-     <th>enabled</th>
-     <th>login_base</th>
-     <th>is_public</th>
-     <th>abbreviated_name</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-site-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= site_url %></td>
-  <td><%= enabled %></td>
-  <td><%= login_base %></td>
-  <td><%= is_public %></td>
-  <td><%= abbreviated_name %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- Slice -->
-
-<script type="text/template" id="xosAdmin-slice-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>enabled</th>
-     <th>omf_friendly</th>
-     <th>description</th>
-     <th>slice_url</th>
-     <th>site</th>
-     <th>max_slivers</th>
-     <th>service</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-slice-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= enabled %></td>
-  <td><%= omf_friendly %></td>
-  <td><%= description %></td>
-  <td><%= slice_url %></td>
-  <td><%= idToName(site,"sites","name") %></td>
-  <td><%= max_slivers %></td>
-  <td><%= idToName(service,"services","name") %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- SliceDeployment -->
-
-<script type="text/template" id="xosAdmin-sliceDeployment-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>slice</th>
-     <th>deployment</th>
-     <th>tenant_id</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-sliceDeployment-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td><%= idToName(slice,"slices","name") %></td>
-  <td><%= idToName(deployment,"deployments","name") %></td>
-  <td><%= tenant_id %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- SlicePrivilege -->
-
-<script type="text/template" id="xosAdmin-slicePrivilege-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>user</th>
-     <th>slice</th>
-     <th>role</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-slicePrivilege-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td><%= idToName(user,"users","username") %></td>
-  <td><%= idToName(slice,"slices","name") %></td>
-  <td><%= idToName(role,"sliceRoles","role") %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-
-<!-- Sliver -->
-
-<script type="text/template" id="xosAdmin-sliver-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>name</th>
-     <th>instance_id</th>
-     <th>instance_name</th>
-     <th>image</th>
-     <th>creator</th>
-     <th>slice</th>
-     <th>node</th>
-     <th>deploymentNetwork</th>
-     <th>flavor</th>
-     <th>userData</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-
-<script type="text/template" id="xosAdmin-sliver-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: name}) %></td>
-  <td><%= instance_id %></td>
-  <td><%= instance_name %></td>
-  <td><%= idToName(image,"images","name") %></td>
-  <td><%= idToName(creator,"users","name") %></td>
-  <td><%= idToName(slice,"slices","name") %></td>
-  <td><%= idToName(node,"nodes","name") %></td>
-  <td><%= idToName(deploymentNetwork,"deployments","name") %></td>
-  <td><%= flavor %></td>
-  <td><%= userData %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- User -->
-
-<script type="text/template" id="xosAdmin-user-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>username</th>
-     <th>firstname</th>
-     <th>lastname</th>
-     <th>phone</th>
-     <th>user_url</th>
-     <th>site</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-
-<script type="text/template" id="xosAdmin-user-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: username}) %></td>
-  <td><%= firstname %></td>
-  <td><%= lastname %></td>
-  <td><%= phone %></td>
-  <td><%= user_url %></td>
-  <td><%= idToName(site,"sites","name") %></td>
-  <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
-</script>
-
-<!-- UserDeployments -->
-
-<script type="text/template" id="xosAdmin-userDeployment-list-template">
-  <h3 class="xos-list-title"><%= title %></h3>
-  <%= xosListHeaderTemplate() %>
-  <table class="test-table">
-  <thead><tr>
-     <th>id</th>
-     <th>user</th>
-     <th>deployment</th>
-     <th>kuser_id</th>
-     <th>delete</th>
-  </tr></thead>
-  <tbody></tbody>
-  </table>
-  <%= xosListFooterTemplate({addChildHash: addChildHash}) %>
-</script>
-
-<script type="text/template" id="xosAdmin-userDeployment-listitem-template">
-  <td> <%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: id}) %></td>
-  <td><%= idToName(user,"users","username") %></td>
-  <td><%= idToName(deployment,"deployments","name") %></td>
-  <td><%= kuser_id %></td>
+<script type="text/template" id="xos-listitem-template">
+  <% _.each(listFields, function(fieldName) { %>
+      <% if ($.inArray(fieldName, model.detailLinkFields)>=0) { %>
+          <td><%= xosDetailLinkTemplate({collectionName: collectionName, id: id, text: model.attributes[fieldName]}) %></td>
+      <% } else if (fieldName in foreignFields) { %>
+          <td><%= idToName(model.attributes[fieldName], foreignFields[fieldName], "humanReadableName") %></td>
+      <% } else { %>
+      <td><%= model.attributes[fieldName] %></td>
+      <% } %>
+  <% }); %>
   <td><%= xosDeleteButtonTemplate({modelName: modelName, id: id}) %></td>
 </script>
 
