diff --git a/planetstack/core/plus/sites.py b/planetstack/core/plus/sites.py
index da86a10..27ae352 100644
--- a/planetstack/core/plus/sites.py
+++ b/planetstack/core/plus/sites.py
@@ -12,13 +12,15 @@
     def get_urls(self):
         """Add our dashboard view to the admin urlconf. Deleted the default index."""
         from django.conf.urls import patterns, url
-        from views import DashboardWelcomeView
+        from views import DashboardWelcomeView, DashboardAjaxView
 
         urls = super(AdminMixin, self).get_urls()
         del urls[0]
         custom_url = patterns('',
                url(r'^$', self.admin_view(DashboardWelcomeView.as_view()), 
-                    name="index")
+                    name="index"),
+               url(r'^hpcdashboard/', self.admin_view(DashboardAjaxView.as_view()), 
+                    name="hpcdashboard")
         )
 
         return custom_url + urls
diff --git a/planetstack/core/plus/views.py b/planetstack/core/plus/views.py
index b49e3a3..653ee95 100644
--- a/planetstack/core/plus/views.py
+++ b/planetstack/core/plus/views.py
@@ -1,177 +1,196 @@
 #views.py
-from django.views.generic import TemplateView
+from django.views.generic import TemplateView, View
+import datetime
 
+import json 
 from core.models import Slice,SliceRole,SlicePrivilege,Site,Reservation
+from django.http import HttpResponse
+
 
 class DashboardWelcomeView(TemplateView):
     template_name = 'admin/dashboard/welcome.html'
 
     def get(self, request, *args, **kwargs):
         context = self.get_context_data(**kwargs)
-        sliceList = Slice.objects.all()
         try:
             site = Site.objects.filter(id=request.user.site.id)
         except:
             site = Site.objects.filter(name="Princeton")
         context['site'] = site[0]
 
-        slicePrivs = SlicePrivilege.objects.filter(user=request.user)
-        userSliceInfo = []
-        for entry in slicePrivs:
-
-            try:
-                reservationList = Reservation.objects.filter(slice=entry.slice)
-                reservations = (True,reservationList)
-
-            except:
-                reservations = None
-
-            userSliceInfo.append({'slice': Slice.objects.get(id=entry.slice.id),
-                               'role': SliceRole.objects.get(id=entry.role.id).role,
-                               'reservations': reservations})
-
-        context['userSliceInfo'] = userSliceInfo
-        context['cdnData'] = self.getCDNOperatorData();
+        context['userSliceInfo'] = getSliceInfo(request, context)
+        context['cdnData'] = getCDNOperatorData();
         return self.render_to_response(context=context)
 
-    def getCDNOperatorData(self):
-        cdnData = {
-            "Arizona": {
-                "lat": 32.2333,
-                "long": -110.94799999999998,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 2,
-                "siteUrl": "http://www.cs.arizona.edu/"
-            },
-            "I2 Singapore": {
-                "lat": 1.33544,
-                "long": 103.88999999999999,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 5,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "ON.Lab": {
-                "lat": 37.452955,
-                "long": -122.18176599999998,
-                "health": 0,
-                "numNodes": 45,
-                "numHPCSlivers": 12,
-                "siteUrl": "http://www.onlab.us/"
-            },
-            "I2 Washington DC": {
-                "lat": 38.009,
-                "long": -77.00029999999998,
-                "health": 0,
-                "numNodes": 50,
-                "numHPCSlivers": 7,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "I2 Seattle": {
-                "lat": 47.6531,
-                "long": -122.31299999999999,
-                "health": 0,
-                "numNodes": 100,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "I2 Salt Lake City": {
-                "lat": 40.7659,
-                "long": -111.844,
-                "health": 0,
-                "numNodes": 35,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "I2 New York": {
-                "lat": 40.72,
-                "long": -73.99000000000001,
-                "health": 0,
-                "numNodes": 25,
-                "numHPCSlivers": 4,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "I2 Los Angeles": {
-                "lat": 33.2505,
-                "long": -117.50299999999999,
-                "health": 0,
-                "numNodes": 20,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "I2 Kansas City": {
-                "lat": 39.0012,
-                "long": -94.00630000000001,
-                "health": 0,
-                "numNodes": 17,
-                "numHPCSlivers": 8,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "I2 Houston": {
-                "lat": 29.0077,
-                "long": -95.00369999999998,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "I2 Chicago": {
-                "lat": 41.0085,
-                "long": -87.00650000000002,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "I2 Atlanta": {
-                "lat": 33.0075,
-                "long": -84.00380000000001,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.internet2.edu/"
-            },
-            "MaxPlanck": {
-                "lat": 49.14,
-                "long": 6.588999999999942,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.mpi-sws.mpg.de/"
-            },
-            "GeorgiaTech": {
-                "lat": 33.7772,
-                "long": -84.39760000000001,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.gatech.edu/"
-            },
-            "Princeton": {
-                "lat": 40.3502,
-                "long": -74.6524,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://princeton.edu/"
-            },
-            "Washington": {
-                "lat": 47.6531,
-                "long": -122.31299999999999,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 10,
-                "siteUrl": "https://www.washington.edu/"
-            },
-            "Stanford": {
-                "lat": 37.4294,
-                "long": -122.17200000000003,
-                "health": 0,
-                "numNodes": 15,
-                "numHPCSlivers": 10,
-                "siteUrl": "http://www.stanford.edu/"
-            },
-        }
-        return cdnData
+def getSliceInfo(request, context):
+    sliceList = Slice.objects.all()
+    slicePrivs = SlicePrivilege.objects.filter(user=request.user)
+    userSliceInfo = []
+    for entry in slicePrivs:
 
+        try:
+            reservationList = Reservation.objects.filter(slice=entry.slice)
+            reservations = (True,reservationList)
+
+        except:
+            reservations = None
+
+        userSliceInfo.append({'slice': Slice.objects.get(id=entry.slice.id),
+                           'role': SliceRole.objects.get(id=entry.role.id).role,
+                           'reservations': reservations})
+    return userSliceInfo
+
+
+def getCDNOperatorData(randomizeData = False):
+    cdnData = {
+        "Arizona": {
+            "lat": 32.2333,
+            "long": -110.94799999999998,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 2,
+            "siteUrl": "http://www.cs.arizona.edu/"
+        },
+        "I2 Singapore": {
+            "lat": 1.33544,
+            "long": 103.88999999999999,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 5,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "ON.Lab": {
+            "lat": 37.452955,
+            "long": -122.18176599999998,
+            "health": 0,
+            "numNodes": 45,
+            "numHPCSlivers": 12,
+            "siteUrl": "http://www.onlab.us/"
+        },
+        "I2 Washington DC": {
+            "lat": 38.009,
+            "long": -77.00029999999998,
+            "health": 0,
+            "numNodes": 50,
+            "numHPCSlivers": 7,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "I2 Seattle": {
+            "lat": 47.6531,
+            "long": -122.31299999999999,
+            "health": 0,
+            "numNodes": 100,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "I2 Salt Lake City": {
+            "lat": 40.7659,
+            "long": -111.844,
+            "health": 0,
+            "numNodes": 35,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "I2 New York": {
+            "lat": 40.72,
+            "long": -73.99000000000001,
+            "health": 0,
+            "numNodes": 25,
+            "numHPCSlivers": 4,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "I2 Los Angeles": {
+            "lat": 33.2505,
+            "long": -117.50299999999999,
+            "health": 0,
+            "numNodes": 20,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "I2 Kansas City": {
+            "lat": 39.0012,
+            "long": -94.00630000000001,
+            "health": 0,
+            "numNodes": 17,
+            "numHPCSlivers": 8,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "I2 Houston": {
+            "lat": 29.0077,
+            "long": -95.00369999999998,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "I2 Chicago": {
+            "lat": 41.0085,
+            "long": -87.00650000000002,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "I2 Atlanta": {
+            "lat": 33.0075,
+            "long": -84.00380000000001,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.internet2.edu/"
+        },
+        "MaxPlanck": {
+            "lat": 49.14,
+            "long": 6.588999999999942,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.mpi-sws.mpg.de/"
+        },
+        "GeorgiaTech": {
+            "lat": 33.7772,
+            "long": -84.39760000000001,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.gatech.edu/"
+        },
+        "Princeton": {
+            "lat": 40.3502,
+            "long": -74.6524,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://princeton.edu/"
+        },
+        "Washington": {
+            "lat": 47.6531,
+            "long": -122.31299999999999,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 10,
+            "siteUrl": "https://www.washington.edu/"
+        },
+        "Stanford": {
+            "lat": 37.4294,
+            "long": -122.17200000000003,
+            "health": 0,
+            "numNodes": 15,
+            "numHPCSlivers": 10,
+            "siteUrl": "http://www.stanford.edu/"
+        },
+    }
+
+    if randomizeData:
+        cdnData["Siobhan"] = { "lat": 43.34203, "long": -70.56351, "health": 10, "numNodes": 5, "numHPCSlivers": 3, "siteUrl": "https:devonrexes"}
+        del cdnData["Princeton"]
+        cdnData["I2 Seattle"]['siteUrl'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+        cdnData["I2 Salt Lake City"]["numHPCSlivers"] = 34
+
+
+    return cdnData
+
+class DashboardAjaxView(View):
+    def get(self, request, **kwargs):
+        return HttpResponse(json.dumps(getCDNOperatorData(True)), mimetype='application/javascript')
+        
