diff --git a/xos/core/xoslib/dashboards/xosHpc.html b/xos/core/xoslib/dashboards/xosHpc.html
new file mode 100644
index 0000000..bdb964d
--- /dev/null
+++ b/xos/core/xoslib/dashboards/xosHpc.html
@@ -0,0 +1,35 @@
+<script src="{{ STATIC_URL }}/js/vendor/underscore-min.js"></script>
+<script src="{{ STATIC_URL }}/js/vendor/backbone.js"></script>
+<script src="{{ STATIC_URL }}/js/vendor/backbone.syphon.js"></script>
+<script src="{{ STATIC_URL }}/js/vendor/backbone.wreqr.js"></script>
+<script src="{{ STATIC_URL }}/js/vendor/backbone.babysitter.js"></script>
+<script src="{{ STATIC_URL }}/js/vendor/backbone.marionette.js"></script>
+
+<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
+<link rel="stylesheet" type="text/css" href="{% static 'css/xosTenantDashboard.css' %}" media="all" >
+<link rel="stylesheet" type="text/css" href="{% static 'css/xosAdminSite.css' %}" media="all" >
+
+<script src="{{ STATIC_URL }}/js/xoslib/xos-util.js"></script>
+<script src="{{ STATIC_URL }}/js/xoslib/xos-defaults.js"></script>
+<script src="{{ STATIC_URL }}/js/xoslib/xos-validators.js"></script>
+<script src="{{ STATIC_URL }}/js/xoslib/xos-backbone.js"></script>
+<script src="{{ STATIC_URL }}/js/xoslib/xosHelper.js"></script>
+<script src="{{ STATIC_URL }}/js/xosHpc.js"></script>
+
+<div id="xos-hpc-view-panel"> <!-- contentPanel"> -->
+<div id="contentTitle">
+</div>
+
+<div id="contentInner">
+
+<h2>Request Routers</h2>
+<div id="xos-hpc-dns"></div>
+
+<br>
+<h2>HyperCache</h2>
+<div id="xos-hpc-hpc"></div>
+
+</div> <!-- end contentInner -->
+</div> <!-- end contentPanel -->
+
+{% include 'xosAdmin.html' %}
diff --git a/xos/core/xoslib/static/js/xosHpc.js b/xos/core/xoslib/static/js/xosHpc.js
new file mode 100644
index 0000000..1d8adf0
--- /dev/null
+++ b/xos/core/xoslib/static/js/xosHpc.js
@@ -0,0 +1,74 @@
+function staleCheck(row, time_key, msg_key) {
+    if (parseInt(row[time_key])>30) {
+        return "stale";
+    } else {
+        return row[msg_key];
+    }
+}
+
+function updateDnsDemuxTable(dnsdemux) {
+    $('#xos-hpc-dns').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamic_dnsdemux"></table>' );
+    var actualEntries = [];
+
+    console.log(dnsdemux);
+
+    for (rowkey in dnsdemux) {
+        row = dnsdemux[rowkey];
+
+        actualEntries.push( [row.name, row.ip, staleCheck(row, "watcher.DNS.time", "watcher.DNS.msg")] );
+    }
+    console.log(actualEntries);
+    oTable = $('#dynamic_dnsdemux').dataTable( {
+        "bJQueryUI": true,
+        "aaData":  actualEntries ,
+        "bStateSave": true,
+        "bFilter": false,
+        "bPaginate": false,
+        "aoColumns": [
+            { "sTitle": "Node" },
+            { "sTitle": "IP Address" },
+            { "sTitle": "Status" },
+        ]
+    } );
+}
+
+function updateHpcTable(dnsdemux) {
+    $('#xos-hpc-hpc').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamic_hpc"></table>' );
+    var actualEntries = [];
+
+    console.log(dnsdemux);
+
+    for (rowkey in dnsdemux) {
+        row = dnsdemux[rowkey];
+
+        actualEntries.push( [row.name, staleCheck(row, "watcher.HPC-hb.time", "watcher.HPC-hb.msg")] );
+    }
+    console.log(actualEntries);
+    oTable = $('#dynamic_hpc').dataTable( {
+        "bJQueryUI": true,
+        "aaData":  actualEntries ,
+        "bStateSave": true,
+        "bFilter": false,
+        "bPaginate": false,
+        "aoColumns": [
+            { "sTitle": "Node", },
+            { "sTitle": "Status" },
+        ]
+    } );
+}
+
+function updateHpcView(data) {
+    data = data[0];
+    updateDnsDemuxTable( data.attributes.dnsdemux );
+    updateHpcTable( data.attributes.hpc );
+}
+
+$(document).ready(function(){
+    xos.hpcview.on("change", function() { console.log("change"); updateHpcView(xos.hpcview.models); });
+    xos.hpcview.on("remove", function() { console.log("sort"); updateHpcView(xos.hpcview.models); });
+    xos.hpcview.on("sort", function() { console.log("sort"); updateHpcView(xos.hpcview.models); });
+
+    xos.hpcview.startPolling();
+});
+
+
diff --git a/xos/core/xoslib/static/js/xoslib/xos-backbone.js b/xos/core/xoslib/static/js/xoslib/xos-backbone.js
index 6188fa3..2e1795c 100644
--- a/xos/core/xoslib/static/js/xoslib/xos-backbone.js
+++ b/xos/core/xoslib/static/js/xoslib/xos-backbone.js
@@ -33,7 +33,8 @@
     XOSLIB_BASE = "/xoslib";
 
     SLICEPLUS_API = XOSLIB_BASE + "/slicesplus/";
-    TENANTVIEW_API = XOSLIB_BASE + "/tenantview/"
+    TENANTVIEW_API = XOSLIB_BASE + "/tenantview/";
+    HPCVIEW_API = XOSLIB_BASE + "/hpcview";
 
     XOSModel = Backbone.Model.extend({
         relatedCollections: [],
@@ -717,6 +718,13 @@
                             detailFields: [],
                             });
 
+        define_model(this, {urlRoot: HPCVIEW_API,
+                            modelName: "hpcview",
+                            collectionName: "hpcview",
+                            listFields: [],
+                            detailFields: [],
+                            });
+
         /* by default, have slicePlus only fetch the slices the user can see */
         this.slicesPlus.currentUserCanSee = true;
 
