diff --git a/xos/core/static/cord.css b/xos/core/static/cord.css
index 9d66efb..fa8d42f 100644
--- a/xos/core/static/cord.css
+++ b/xos/core/static/cord.css
@@ -1,13 +1,155 @@
+/* login page background image */
 .login {
     background-image: url('cord_bg.jpg');
     background-size: 100%;
     background-repeat: no-repeat;
 }
 
+/* login page logo */
 .login #content-main h1 {
     background: url("cord_logo1.jpg") no-repeat scroll 40% center / 89% auto rgba(235, 240, 242, 0);
-    height: 55px;  
-    background-repeat: no-repeat; 
+    height: 55px;
+    background-repeat: no-repeat;
     font-size: 0px;
     padding-top: 70px;
 }
+
+/* content page logo */
+.logo {
+   display: block;
+   -moz-box-sizing: border-box;
+   box-sizing: border-box;
+   background: url('cord_logo1.jpg') no-repeat;
+   width: 167px;
+   height: 55px;
+   padding-left: 167px;
+}
+
+/* content page header, adjust the margin to match logo */
+.header{
+    margin-top: -90px !important;
+}
+
+/* hide the quick search box */
+.nav-quick-search {
+    display: None;
+}
+
+/* -----------------------------------------
+   Service Grid Page
+   -----------------------------------------
+*/
+
+.service-grid tr td {
+   width: 132px;
+}
+
+.service-grid-icon img {
+    width: 96px;
+    height: 96px;
+    margin-bottom: 10px;
+}
+
+/* Service Icon Screen */
+.service-grid-icon-link {
+    font-size: 125%;
+}
+
+/* -----------------------------------------
+   Font Sizes
+   -----------------------------------------
+*/
+
+/* the welcome line at the top of the screen */
+#user-tools {
+    font-size: 125%;
+}
+
+/* suit navigation tabs */
+.nav-tabs-suit li a {
+    font-size: 125%;
+}
+.nav-tabs-suit li.active a:hover,.nav-tabs-suit li a:hover{
+    font-size: 125%;
+}
+
+/* bread crumb */
+.breadcrumb {
+    font-size: 125%;
+}
+
+/* tablularInline */
+.inline-related {
+    font-size: 125%;
+}
+.inline-related select {
+    font-size: 125%;
+    height: 40px;
+}
+.table .add-row a {
+    font-size: 125%;
+}
+
+/* list view */
+#result_list th, #result_list td {
+    font-size: 125%;
+}
+
+/* application list of admins */
+.applist th, .applist td, .applist caption a {
+    font-size: 125%;
+}
+
+/* ModelAdmin stuff */
+.form-row label, .form-row span, .form-row input, .form-row textarea {
+   font-size: 125%;
+}
+
+.form-row .linked-select {
+   font-size: 125%;
+   height: 40px;
+}
+.form-row .linked-select-link {
+   font-size: 125%;
+}
+
+/* ModelAdmin help text */
+.form-horizontal .control-group .help-inline {
+   font-size: 125%;
+}
+
+/* the save buttons and tools */
+.save-box button, .save-box .btn-info, .save-box .deletelink {
+    font-size: 125%;
+}
+.italic-title {
+    font-size: 125%;
+}
+.menu-box li {
+    font-size: 125%;
+}
+
+/* left nav buttons */
+.left-nav>ul>li>a {
+    font-size: 125%;
+}
+.left-nav>ul>li>a:hover {
+    font-size: 125%;
+}
+
+/* bottom of page tools */
+.tools {
+    font-size: 125%;
+}
+
+/* bottom of page branding */
+.branding {
+    font-size: 125%;
+}
+
+
+
+
+
+
+
diff --git a/xos/templates/cord_admin/base.html b/xos/templates/cord_admin/base.html
new file mode 100644
index 0000000..80779df
--- /dev/null
+++ b/xos/templates/cord_admin/base.html
@@ -0,0 +1,287 @@
+﻿{% load admin_static %}{% load suit_tags %}{% load url from future %}<!DOCTYPE html>
+<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
+<head>
+  <title>{% block title %}  {%if title %} {{ title }} | {% endif %} {{ 'ADMIN_NAME'|suit_conf }}{% endblock %}</title>
+  <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% endblock %}"/>
+  <link rel="stylesheet" type="text/css" href="{% static 'suit/bootstrap/css/bootstrap.min.css' %}" media="all"/>
+  <link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
+  <link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
+  <link rel="stylesheet" type="text/css" href="{% static 'cord.css' %}" media="all">
+  {% block extrastyle %}{% endblock %}
+  {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}"/>{% endif %}
+  <script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
+  <script src="{% static 'suit/js/jquery-1.9.1.min.js' %}"></script>
+  <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
+  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
+  <script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
+  <script type="text/javascript" src="{% static 'uploadTextarea.js' %}"></script>
+  <script type="text/javascript" src="{% static 'observer_status.js' %}"></script>
+
+  <script type="text/javascript">var Suit = { $: $.noConflict() }; if (!$) $ = Suit.$; </script>
+  {% if 'SHOW_REQUIRED_ASTERISK'|suit_conf %}
+  <style type="text/css">.required:after { content: '*'; margin: 0 0 0 5px; position: absolute; color: #ccc;}</style>
+  {% endif %}
+  {% block extrahead %}{% endblock %}
+  {% block blockbots %}
+    <meta name="robots" content="NONE,NOARCHIVE"/>{% endblock %}
+  <link rel="shortcut icon" href="{% static 'favicon.png' %}">
+</head>
+{% load i18n %}
+
+<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
+
+<div id="dialog-placeholder">
+<!-- This is a placeholder for dialog boxes, like the observer calendar -->
+</div>
+
+<!-- Sticky footer wrap -->
+<div id="wrap">
+
+  <!-- Container -->
+  {% block container %}
+    <div id="container">
+
+      {% block logo %}
+      <a href="{% url 'admin:index' %}"><h1 id="site-name"><img class="logo" height="70" width="259" src="{% static 'open-cloud-login-themed-light.png' %}"/></h1></a>
+      {% endblock %}
+      {% block header %}
+        {% if not is_popup %}
+          <!-- Header -->
+          <div id="header" class="header">
+            
+            <div id="branding">
+                  {% block quick-search %}
+                {% with 'SEARCH_URL'|suit_conf as search_url %}
+                  {% if search_url %}
+                    <form class="form-search nav-quick-search" autocomplete="off" action="{% if '/' in search_url %}{{ search_url }}{% else %}{% url search_url %}{% endif %}" method="GET">
+                      <i class="input-icon icon-search"></i>
+                      <input type="text" name="q" class="input-medium search-query" id="quick-search">
+                      <input type="submit" class="submit" value="">
+                    </form>
+                  {% endif %}
+                {% endwith %}
+              {% endblock %}
+            </div>
+          
+            {% block header_time %}
+            <div id="branding2">
+            <!--<div class="header-content header-content-first">
+              <div class="header-column icon">
+                <i class="icon-time"></i>
+              </div>
+              <div class="header-column">
+                <span class="date"> {% suit_date %}</span><br>
+                <span class="time" id="clock">{% suit_time %}</span>
+              </div>
+            </div>-->
+          
+            {% endblock %}
+
+            {% block header_content %}
+              <!--<div class="header-content">
+                <div class="header-column icon">
+                  <i class="icon-comment"></i>
+                </div>
+                <div class="header-column">
+                  <a href="" class="grey"><b>2</b> new messages</a>
+                </div>
+              </div>-->
+            {% endblock %}
+
+            {% if user.is_active and user.is_staff %}
+              <div id="user-tools">
+                {% trans 'Welcome,' %}
+                <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">{{user.email}}</a>
+                <span id="observer-status"></span>
+                <span class="user-links">
+                {% block userlinks %}
+                  {% url 'django-admindocs-docroot' as docsroot %}
+                  {% if docsroot %}
+                    <a href="http://guide.xosproject.org/">{% trans 'Documentation' %}</a>
+                   <span class="separator">|</span>
+                  {% endif %}
+                  <a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a>
+                  <span class="separator">|</span>
+                  <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
+                  </span>
+                {% endblock %}
+              </div>
+            {% endif %}
+
+            {% block nav-global %}{% endblock %}
+
+          </div>
+           </div>
+        {% endif %}
+        <!-- END Header -->
+      {% endblock %}
+
+
+      <div class="suit-columns {{ is_popup|yesno:'one-column,two-columns' }}">
+
+        {% block content-center %}
+          <div id="suit-center" class="suit-column">
+
+            {% if not is_popup %}
+            {% block minidash %}
+            <div id=openCloudTopPage>
+            {% include "admin/newminidashboard.html" %}
+            </div>
+            {% endblock %} 
+
+              {% block breadcrumbs %}
+                <ul class="breadcrumb"> 
+                  <li><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+                    {% if title %}
+                      <span class="divider">&raquo;</span>
+                      </li>
+                      <li class="active">
+                      {{ title }}
+                    {% endif %}
+                    </li>
+                </ul>
+              {% endblock %}
+            {% endif %}
+
+            {% block messages %}
+              {% if messages %}
+
+                {% for message in messages %}
+                  <div class="alert alert-{% firstof message.tags 'info' %}">
+                    <button class="close" data-dismiss="alert">×</button>
+                    <strong>
+                      {% if message.tags %}{{ message.tags|capfirst }}{% else %}
+                        Message{% endif %}!</strong>
+                    {{ message }}
+                  </div>
+                {% endfor %}
+              {% endif %}
+            {% endblock messages %}
+
+            <!-- Content -->
+            <div id="content" class="{% block coltype %}colM{% endblock %} row-fluid">
+              {% block pretitle %}{% endblock %}
+              {% block content_title %}{% if title %}
+                <h2 class="content-title">{{ title }}</h2>
+              {% endif %}{% endblock %}
+              {% block content %}
+                {% block object-tools %}{% endblock %}
+                {{ content }}
+              {% endblock %}
+              {% block sidebar_content %}
+                {% block sidebar %}{% endblock %}
+              {% endblock %}
+            </div>
+            <!-- END Content -->
+          <span class="clearfix"></span>
+          </div>
+        {% endblock %}
+
+
+        {% block content-left %}
+          {% if not user.is_appuser %}
+              {% if not is_popup %}
+                <div id="suit-left" class="suit-column">
+
+
+                  {% include 'suit/menu.html' %}
+
+                </div>
+              {% endif %}
+          {% endif %}
+        {% endblock %}
+
+      </div>
+    </div>
+  {% endblock %}
+
+  {% if not is_popup %}
+  <!-- Sticky footer push -->
+  <div id="push"></div>
+  {% endif %}
+
+</div>
+
+{% block footer %}
+  {% if not is_popup %}
+  <div id="footer" class="footer">
+    <div class="content">
+      <div class="tools">
+        {% block footer_links %}
+          <a href="http://djangosuit.com/support/" target="_blank" class="icon"><i class="icon-question-sign"></i>Support</a>
+          <a href="http://djangosuit.com/pricing/" target="_blank" class="icon"><i class="icon-bookmark"></i>Licence</a>
+          <a href="http://github.com/darklow/django-suit/issues" target="_blank" class="icon"><i class="icon-comment"></i>Report a bug</a>
+        {% endblock %}
+      </div>
+
+      <div class="statusMsg" id="statusMsg">
+      <!-- this is a placeholder for xoslib views to display status messages -->
+      </div>
+
+      <!-- <div class="copyright">
+        {% block copyright %}
+          Copyright &copy; 2013 DjangoSuit.com<br>Developed by <a href="http://djangosuit.com" target="_blank">DjangoSuit.com</a>
+        {% endblock %}
+      </div> -->
+
+      <div class="branding">{% block footer_branding %}
+        CORD
+      {% endblock %}</div>
+    </div>
+  </div>
+  {% endif %}
+{% endblock %}
+
+  <script src="{% static 'suit/bootstrap/js/bootstrap.min.js' %}"></script>
+  <script src="{% static 'suit/js/suit.js' %}"></script>
+  <script type="text/javascript" src="//www.google.com/jsapi"></script>
+  <!-- src="{% static 'xos_graphs.js' %}" -->
+
+  {% block extrajs %}{% endblock %}
+<script src="http://d3js.org/d3.v3.js"></script>
+	<div class="modal fade hide" id="chartsModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+	  <div class="modal-dialog">
+	    <div class="modal-content">
+	      <!--<div class="modal-header">
+		<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+		<h4 class="modal-title" id="myModalLabel">OpenCloud</h4>
+	      </div>-->
+	      <div class="modal-body" style="overflow-y:hidden; overflow-x:hidden;">
+		<div class="chartContainer">
+			<div class="row">
+				<div class=" padding">
+				</div>
+			</div>
+
+			<div class="row">
+				<div class=" heading">
+					<p id="chartHeading" class="heading">OpenCloud</p>	
+				</div>
+			</div>
+			<div class="row">
+				<div class="padding"></div>
+				<div class="padding"></div>
+			</div>
+			<div class="row">
+				<div id="graph" class="graph">
+				</div>
+			</div>
+		</div>
+                <div id="graph_work" style="display:none"></div>
+	      </div>
+	      <!--<div class="modal-footer">
+		<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+	      </div>-->
+	    </div><!-- /.modal-content -->
+	  </div><!-- /.modal-dialog -->
+	</div><!-- /.modal -->
+
+
+<script>
+
+
+
+
+</script>
+</body>
+</html>
diff --git a/xos/templates/cord_admin/dashboard_base.html b/xos/templates/cord_admin/dashboard_base.html
new file mode 100644
index 0000000..ea8b7f2
--- /dev/null
+++ b/xos/templates/cord_admin/dashboard_base.html
@@ -0,0 +1,92 @@
+{% extends "admin/base.html" %}
+{% load admin_static %}
+
+{% block extrahead %}
+<link rel="stylesheet"  href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.0/css/jquery.dataTables.css">
+<link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
+<link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.0/css/jquery.dataTables_themeroller.css">
+<link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
+<link rel="stylesheet" type="text/css" href="{% static 'cord.css' %}" media="all">
+<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
+<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" />
+<script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"></script>
+
+
+<!-- no need to include jquery here as it's already included by base.html. Including it multiple times will break mtuity statistics. -->
+<!-- src="http://code.jquery.com/jquery-1.9.1.js" -->
+
+<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
+<script src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
+<script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
+<script src="{% static 'js/Leaflet.MakiMarkers.js' %}" > </script>
+  
+<script>
+  $(function() {
+    $( "#hometabs" ).tabs({active: 0, //event: "mouseover"
+      //collapsible: true
+    });
+  });
+
+var consoleAppender = new log4javascript.BrowserConsoleAppender();
+var patternLayout = new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %l{s:l} %-5p - %m{1}%n");
+consoleAppender.setLayout(patternLayout);
+//var log  = log4javascript.getDefaultLogger();
+var log  = log4javascript.getRootLogger();
+log.addAppender(consoleAppender);
+log.setLevel(log4javascript.Level.ERROR);
+
+function confirmDialog(title,msg) {
+    var dialog = $('<div>'+msg+'</div>');
+    var def = $.Deferred();
+
+    $(dialog).dialog({
+        resizable: false,
+        title: title,
+        autoOpen: true,
+        modal: true,
+        dialogClass: "dashboard-hpc-sliver",
+        buttons: {
+            'OK': function() {
+                def.resolve();
+                log.debug("Chose to add a sliver");
+                $( this ).dialog( "close" );
+            },
+            'Cancel': function() {
+                def.reject();
+                $( this ).dialog( "close" );
+            }
+        },
+        close: {
+        }
+    });
+    return def.promise();
+}
+
+function errorDialog(title,msg) {
+    var dialog = $('<div>'+msg+'</div>');
+    var def = $.Deferred();
+
+    $(dialog).dialog({
+        resizable: false,
+        title: title,
+        autoOpen: true,
+        modal: true,
+        dialogClass: "dashboard-hpc-sliver",
+        buttons: {
+            'OK': function() {
+                def.resolve();
+                $( this ).dialog( "close" );
+            },
+        },
+        close: {
+        }
+    });
+    return def.promise();
+}
+
+</script>
+{% endblock %}
+
+{% block content %}
+dashboard goes here
+{% endblock %}
diff --git a/xos/templates/cord_admin/login.html b/xos/templates/cord_admin/login.html
new file mode 100644
index 0000000..634ed02
--- /dev/null
+++ b/xos/templates/cord_admin/login.html
@@ -0,0 +1,159 @@
+{% extends "admin/base_site_login.html" %}
+{% load i18n admin_static %}
+
+{% block extrastyle %}{{ block.super }}
+<link rel="stylesheet" type="text/css" href="/static/suit/bootstrap/css/bootstrap.min.css" media="all"/>
+<link rel="stylesheet" type="text/css" href="{% static "xos.css" %}" />
+<script src="{% static 'suit/js/jquery-1.9.1.min.js' %}"></script>
+<script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
+{% endblock %}
+
+
+{% block bodyclass %}login{% endblock %}
+
+{% block nav-global %}{% endblock %}
+
+{% block content_title %}{% endblock %}
+
+{% block breadcrumbs %}{% endblock %}
+
+{% block content %}
+{% if form.errors and not form.non_field_errors and not form.this_is_the_login_form.errors %}
+<p class="errornote">
+{% blocktrans count counter=form.errors.items|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
+</p>
+{% endif %}
+
+{% if form.non_field_errors or form.this_is_the_login_form.errors %}
+{% for error in form.non_field_errors %}
+<p class="errornote">
+    {{ error }}
+</p>
+{% endfor %}
+{% for error in form.this_is_the_login_form.errors %}
+<p class="errornote">
+    {{ error }}
+</p>
+{% endfor %}
+{% endif %}
+<div id="wrap">
+<div id="content-main">
+<h1><i class="icon-lock icon-white"></i> OpenCloud</h1>
+<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
+  <div class="form-row">
+    {% if not form.this_is_the_login_form.errors %}{{ form.username.errors }}{% endif %}
+     {{ form.username }}
+  </div>
+  <div class="form-row">
+    {% if not form.this_is_the_login_form.errors %}{{ form.password.errors }}{% endif %}
+     {{ form.password }}
+    <input type="hidden" name="this_is_the_login_form" value="1" />
+    <input type="hidden" name="next" value="{{ next }}" />
+  </div>
+  <div class="submit-row">
+    <input type="submit" class="btn btn-info" value="{% trans 'SIGN IN' %}" />
+  </div>
+        <div id="requestAccountLink">{% trans 'Request a new Account' %}</div>
+</form>
+
+<div id="request-account-form" title="Request an Account" style="display: none;">
+	<form>
+		<fieldset>
+			<div class="request-form-row">
+				<label for="request-first-name">First Name</label>
+				<input type="text" name="request-first-name" id="request-first-name">
+			</div>
+			 <div class="request-form-row">
+                                <label for="request-last-name">Last Name</label>
+                                <input type="text" name="request-last-name" id="request-last-name">
+                        </div>
+			 <div class="request-form-row">
+                                <label for="request-email">Email</label>
+                                <input type="text" name="request-email" id="request-email">
+                        </div>
+			 <div class="request-form-row">
+                                <label for="request-site-name">Site</label><br>
+				<select id="request-site-name" name="request-site-name">
+                                    <option>---------</option>
+                                    {% for site in sites %}
+                                        {% if site.allowNewUsers %}
+                                            <option>{{ site.name }}</option>
+                                        {% endif %}
+                                    {% endfor %}
+				</select>
+                        </div>
+			<div class="submit-row">
+    				<input id ="request-signup" class="btn btn-info" value="SIGN UP">
+  			</div>
+		</fieldset>
+	</form>
+</div>
+</div>
+</div>
+
+
+<script type="text/javascript">
+$(function() {
+	initRequest();
+});
+function initRequest(){
+	$.ajax({
+			url: '/tenantview',
+			dataType: 'json',
+			success: function (data) {
+				var sites = data['sitesToBeRequested'];
+				console.log(sites);
+				for (site in sites){
+					$("#request-site-name").append("<option>" + site + "</option>");
+				}
+			}
+		});
+}
+$("#requestAccountLink").unbind().click(function(){
+	$("#request-account-form").dialog({
+					autoOpen: false,
+					modal: true,
+					dialogClass: "requestDialog",
+				});
+				$("#request-account-form").dialog("open");
+})
+$("#request-signup").unbind().click(function(){
+							$.ajax({
+								url: '/requestaccess/',
+								dataType: 'json',
+								data: {
+									email: $("#request-email").val(),
+									firstname: $("#request-first-name").val(),
+									lastname: $("#request-last-name").val(),
+									site: $("#request-site-name").val(),
+									csrfmiddlewaretoken: "{{ csrf_token }}", // < here 
+									state: "inactive"
+								},
+								async: false,
+								type: 'POST',
+								success: function (response) {
+                                                                    if (response && response.error) {
+                                                                        if (response.error == "already_approved") {
+                                                                            alert("Your request has already been proccessed and approved. We are sending you another email with a new temporary password");
+                                                                            return;
+                                                                        } else if (response.error == "already_pending") {
+                                                                            alert("Your request is already pending and awaiting approval");
+                                                                            return;
+                                                                        } else if (response.error == "is_deleted") {
+                                                                            alert("Your user record is in a deleted state. Please contact OpenCloud support");
+                                                                            return;
+                                                                        }
+                                                                    }
+								    $("#request-account-form").dialog("close");
+								    alert("Your request has been submitted");
+								},
+								error:function (xhr, textStatus, thrownError){
+         							   alert("Error:", textStatus + " " + xhr.responseText);
+        						        }
+							});
+})
+document.getElementById('id_username').focus()
+</script>
+</div>
+</div>
+{% endblock %}
