diff --git a/apps/dashboard-app/src/main/js/src/app/diagnostic/views/adapter.controller.js b/apps/dashboard-app/src/main/js/src/app/diagnostic/views/adapter.controller.js
index 30df3762d..19e6191c5 100644
--- a/apps/dashboard-app/src/main/js/src/app/diagnostic/views/adapter.controller.js
+++ b/apps/dashboard-app/src/main/js/src/app/diagnostic/views/adapter.controller.js
@@ -1,73 +1,84 @@
 (function () {
     'use strict';
 
     // -- register conroller with angular -- //
     angular.module('shrine-tools')
         .controller('AdapterController', AdapterController);
 
     /**
      *
      * @type {string[]}
      */
     AdapterController.$inject = ['$app', '$log'];
     function AdapterController ($app, $log) {
         var vm = this;
 
         init();
 
         function init () {
             $app.model.getAdapter()
                 .then(setAdapter, handleFailure)
                 .then($app.model.getI2B2)
                 .then(setI2B2, handleFailure);
 
             $app.model.getSummary()
                 .then(setSummary, handleFailure);
         }
 
         function handleFailure(failure) {
             // TODO: HANDLE FAILURE
             $log.error(JSON.stringify(failure));
         }
 
 
         function setSummary (summary) {
             vm.adapter  = {
                 term:           summary.ontologyTerm, //config.networkStatusQuery,
                 success:        summary.queryResult.response.problemDigest === undefined
             };
 
             if (summary.queryResult.response.problemDigest !== undefined) {
                 vm.adapter.errorData = summary.queryResult.response.problemDigest;
             }
             else {
                 //TODO FIGURE OUT THE CORRECT FIELDS FOR SUCCESSFUL QUERY RESULT
                 vm.adapter.description =  summary.queryResult.response.singleNodeResult.setSize;
                 vm.adapter.description += ' ';
                 vm.adapter.description += summary.queryResult.response.singleNodeResult.resultType
                                             .i2b2Options.description;
             }
         }
 
+
+        function formatDate(maybeEpoch) {
+            if (!(maybeEpoch && isFinite(maybeEpoch))) {
+                return 'UNKNOWN';
+            } else {
+                var d = new Date(maybeEpoch);
+                return d.toUTCString();
+            }
+        }
+
         function setAdapter (adapter) {
             vm.mappings = {
-                mappingsFilename:  adapter.adapterMappingsFilename
+                mappingsFilename:  adapter.adapterMappingsFilename,
+                mappingsDate:      formatDate(adapter.adapterMappingsDate)
             };
 
             vm.configuration = {
                 crcEndpointURL:     adapter.crcEndpointUrl,
                 crcProjectId:       "", //config.hiveCredentials.crcProjectId,
                 domain:             "", //config.hiveCredentials.domain,
                 username:           "", //config.hiveCredentials.username,
                 password:           "REDACTED", //config.hiveCredentials.password,
                 lockoutThreshold:   adapter.adapterLockoutAttemptsThreshold
             };
         }
 
         function setI2B2 (i2b2) {
             vm.configuration.crcProjectId = i2b2.crcProject;
             vm.configuration.domain = i2b2.i2b2Domain;
             vm.configuration.username = i2b2.username;
         }
     }
 })();
diff --git a/apps/dashboard-app/src/main/js/src/app/diagnostic/views/adapter.tpl.html b/apps/dashboard-app/src/main/js/src/app/diagnostic/views/adapter.tpl.html
index 88cec6157..538372485 100644
--- a/apps/dashboard-app/src/main/js/src/app/diagnostic/views/adapter.tpl.html
+++ b/apps/dashboard-app/src/main/js/src/app/diagnostic/views/adapter.tpl.html
@@ -1,155 +1,163 @@
 <div>
 
     <table class="table table-striped">
         <thead>
         <tr>
             <td colspan="2">
                 Adapter Configuration
             </td>
         </tr>
         <tr>
             <td colspan="2">
                 <i>These are the parameters that the SHRINE Adapter will use for querying the i2b2 CRC.</i>
             </td>
         </tr>
         </thead>
 
         <tbody>
             <tr>
                 <td>
                     CRC URL
                 </td>
                 <td>
                     {{vm.configuration.crcEndpointURL}}
                 </td>
             </tr>
             <tr>
                 <td>
                     CRC Project
                 </td>
                 <td>
                     {{vm.configuration.crcProjectId}}
                 </td>
             </tr>
             <tr>
                 <td>
                     Domain
                 </td>
                 <td>
                     {{vm.configuration.domain}}
                 </td>
             </tr>
             <tr>
                 <td>
                     Adapter User
                 </td>
                 <td>
                     {{vm.configuration.username}}
                 </td>
             </tr>
             <tr>
                 <td>
                     Adapter Password
                 </td>
                 <td>
                     {{vm.configuration.password}}
                 </td>
             </tr>
             <tr>
                 <td>
                     Lockout Threshold
                 </td>
                 <td>
                     {{vm.configuration.lockoutThreshold}}
                 </td>
             </tr>
         </tbody>
     </table>
 
     <table class="table table-striped">
         <thead>
         <tr>
             <td colspan="2">
                 Adapter Query Test
             </td>
         </tr>
         </thead>
 
         <tbody>
         <tr>
             <td>
                 SHRINE Query Term
             </td>
             <td>
                 {{vm.adapter.term}}
             </td>
         </tr>
         <tr>
             <td>
                 Status
             </td>
             <td ng-if="vm.adapter.success" style="color:green">
                 Success
             </td>
             <td ng-if="!vm.adapter.success" style="color:red">
                 Failed
             </td>
         </tr>
         <tr ng-if="vm.adapter.success">
             <td>
                 Details
             </td>
             <td ng-if="vm.adapter.success">
                 {{vm.adapter.description}}
             </td>
         </tr>
         <tr ng-if="!vm.adapter.success">
             <td>
                 Error Details
             </td>
             <td ng-if="!vm.adapter.success">
 
                 <div><b>Summary:</b></div>
                 <div>{{vm.adapter.errorData.summary }}</div><br/>
                 <div><b>Description:</b></div>
                 <div>{{vm.adapter.errorData.description }}</div><br/>
                 <div><i>For information on troubleshooting and resolution, check
                     <a href="https://open.med.harvard.edu/wiki/display/SHRINE/{{vm.adapter.errorData.codec}}" target="_blank">the SHRINE Error
                         Codex</a>.</i>
                 </div>
                 <br/>
                 <div><b><i>Copy the text below and paste it in an email to your site administrator for a faster response.</i></b></div>
                 <br/>
                 <div><b>Technical Details:</b></div><pre style="margin-top:0">{{vm.adapter.errorData.description}}</pre><br/>
                 <div><b>Codec:</b></div><pre style="margin-top:0">{{vm.adapter.errorData.codec }}</pre><br/>
                 <div><b>Stamp:</b></div><pre style="margin-top:0">{{vm.adapter.errorData.stampText}}</pre><br/>
                 <div><b>Stack Trace Name:</b></div><pre style="margin-top:0">{{vm.adapter.errorData.detailsXml.details.exception.name }}</pre><br/>
                 <div><b>Stack Trace Message:</b></div><pre style="margin-top:0">{{vm.adapter.errorData.detailsXml.details.exception.message}}</pre><br/>
 
             </td>
         </tr>
 
         </tbody>
     </table>
 
     <table class="table table-striped">
         <thead>
         <tr>
             <td colspan="2">
                 Mappings File
             </td>
         </tr>
         </thead>
 
         <tbody>
         <tr>
             <td>
                 Filename
             </td>
             <td>
                 {{vm.mappings.mappingsFilename}}
             </td>
         </tr>
+        <tr>
+            <td>
+                Last Modified
+            </td>
+            <td>
+                {{vm.mappings.mappingsDate}}
+            </td>
+        </tr>
         </tbody>
     </table>
 </div>
\ No newline at end of file
diff --git a/apps/dashboard-app/src/main/js/src/app/diagnostic/views/summary.tpl.html b/apps/dashboard-app/src/main/js/src/app/diagnostic/views/summary.tpl.html
index 07c69c2b0..5b3546338 100644
--- a/apps/dashboard-app/src/main/js/src/app/diagnostic/views/summary.tpl.html
+++ b/apps/dashboard-app/src/main/js/src/app/diagnostic/views/summary.tpl.html
@@ -1,111 +1,111 @@
 <div>
     <table class="table table-striped" ng-show="vm.summary">
         <thead>
         <tr>
             <td colspan="2">
                 Version Info
             </td>
         </tr>
         </thead>
 
         <tbody>
         <tr>
             <td colspan="2">
                 This site is running SHRINE <span style="color:green">{{vm.summary.shrineVersion}}</span> built on <label>{{vm.summary.shrineBuildDate}}</label>
 
             </td>
         </tr>
         <tr>
             <td colspan="2">
-               This site is currently using <label>{{vm.ontProject}}</label> ontology version <label>{{vm.summary.ontologyVersion}}</label>
-                <!--(based on concept term <label>{{vm.summary.ontologyTerm}}</label>)-->
+               This site is currently using <label>{{vm.ontProject}}</label> ontology version <label>{{vm.summary.ontologyVersion}}</label><br>
+               Based on concept term: <label>{{vm.summary.ontologyVersionTerm}}</label>
             </td>
         </tr>
         <tr>
             <td colspan="2">
                 This site is currently using <label>{{vm.summary.adapterMappingsFileName}}</label> for mappings, last edited on <label>{{vm.formatDate(vm.summary.adapterMappingsDate)}}</label>
             </td>
         </tr>
         </tbody>
 
     </table>
 
     <table class="table table-striped" ng-show="vm.summary">
         <thead>
         <tr>
             <td colspan="2">
                 <label>System Health</label>
             </td>
         </tr>
         </thead>
         <tbody>
         <tr>
             <td>
                 <label>Keystore:</label>
             </td>
             <td ng-if="vm.summary.keystoreOk !== true" class="error">
                 Error: <a ui-sref="diagnostic.keystore">click
                 here for more details.</a>
             </td>
             <td ng-if="vm.summary.keystoreOk === true" class="ok">
                 OK
             </td>
         </tr>
         <tr>
             <td>
                 <label>QEP:</label>
             </td>
             <td ng-if="vm.summary.qepOk !== true" class="error">
                 Error: <a ui-sref="diagnostic.qep">click
                 here for more details.</a>
             </td>
             <td ng-if="vm.summary.qepOk === true" class="ok">
                 OK
             </td>
         </tr>
         <tr ng-if="vm.summary.isHub">
             <td>
                 <label>Hub:</label>
             </td>
             <td ng-if="vm.summary.hubOk !== true" class="error">
                 Error: <a ui-sref="diagnostic.hub">click
                 here for more details.</a>
             </td>
             <td ng-if="vm.summary.hubOk === true" class="ok">
                 OK
             </td>
         </tr>
         <tr>
             <td>
                 <label>Adapter:</label>
             </td>
             <td ng-if="vm.summary.adapterOk !== true" class="error">
                 Error: <a ui-sref="diagnostic.adapter">click
                 here for more details.</a>
             </td>
             <td ng-if="vm.summary.adapterOk === true" class="ok">
                 OK
             </td>
         </tr>
         </tbody>
     </table>
 
     <table class="table table-striped" ng-show="vm.trustedHtml">
         <thead>
         <tr>
             <td colspan="2" class="error">
                 Fatal SHRINE Error
             </td>
         </tr>
         </thead>
         <tbody>
         <tr>
             <td>
                 <label>Technical Details:</label>
             </td>
             <td ng-bind-html="vm.trustedHtml">
             </td>
         </tr>
         </tbody>
     </table>
 </div>
\ No newline at end of file
diff --git a/apps/dashboard-app/src/main/js/test/admin/status/summary.json b/apps/dashboard-app/src/main/js/test/admin/status/summary.json
index 6d14ec6e6..72cbc6cdb 100644
--- a/apps/dashboard-app/src/main/js/test/admin/status/summary.json
+++ b/apps/dashboard-app/src/main/js/test/admin/status/summary.json
@@ -1,276 +1,277 @@
 {
   "isHub": true,
   "shrineVersion": "1.22.2.0-SNAPSHOT",
-  "shrineBuildDate": "2016-09-27 15:43:25",
-  "ontologyVersion": "UNKNOWN",
+  "shrineBuildDate": "2016-10-13 14:25:07",
+  "ontologyVersion": "Unavailable due to: java.net.SocketTimeoutException: connect timed out",
+  "ontologyVersionTerm": "\\\\SHRINE\\SHRINE\\ONTOLOGYVERSION",
   "ontologyTerm": "\\\\SHRINE\\SHRINE\\Diagnoses\\Mental Illness\\Disorders usually diagnosed in infancy, childhood, or adolescence\\Pervasive developmental disorders\\Infantile autism, current or active state\\",
   "queryResult": {
     "elapsed": {
-      "length": 2162,
+      "length": 2561,
       "unit": {}
     },
     "response": {
       "errorMessage": "An unanticipated problem encountered.",
       "problemDigest": {
         "codec": "net.shrine.problem.ProblemNotYetEncoded",
-        "stampText": "Mon Oct 03 15:51:14 EDT 2016 on TecRef-LT-7832AA Unknown",
+        "stampText": "Thu Oct 13 15:21:48 EDT 2016 on TecRef-LT-7832AA Unknown",
         "summary": "An unanticipated problem encountered.",
         "description": "This problem is not yet classified in Shrine source code. Please report the details to the Shrine dev team.",
         "detailsXml": {
           "details": {
             "exception": {
               "name": "java.lang.IllegalStateException",
               "message": "An unanticipated problem encountered.",
               "stacktrace": {
-                "line": "net.shrine.problem.ProblemNotYetEncoded.<init>(Problem.scala:204)",
-                "line": "net.shrine.problem.ProblemNotYetEncoded$.apply(Problem.scala:222)",
+                "line": "net.shrine.problem.ProblemNotYetEncoded.<init>(Problem.scala:211)",
+                "line": "net.shrine.problem.ProblemNotYetEncoded$.apply(Problem.scala:229)",
                 "line": "net.shrine.adapter.Adapter.perform(Adapter.scala:48)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                 "line": "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:70)",
                 "line": "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:78)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:32)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:31)",
                 "line": "scala.Option.map(Option.scala:146)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                 "line": "scala.Option.orElse(Option.scala:289)",
                 "line": "net.shrine.adapter.service.AdapterService.handleRequest(AdapterService.scala:29)",
-                "line": "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
-                "line": "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
+                "line": "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
+                "line": "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
                 "line": "scala.util.Try$.apply(Try.scala:192)",
-                "line": "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:349)",
-                "line": "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:344)",
+                "line": "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:344)",
+                "line": "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:339)",
                 "line": "scala.Option.map(Option.scala:146)",
-                "line": "net.shrine.status.Summary$.apply(StatusJaxrs.scala:344)",
-                "line": "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:64)",
+                "line": "net.shrine.status.Summary$.apply(StatusJaxrs.scala:339)",
+                "line": "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:66)",
                 "line": "net.shrine.status.StatusJaxrsTest.testSummary(StatusJaxrsTest.scala:50)",
                 "line": "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                 "line": "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                 "line": "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                 "line": "java.lang.reflect.Method.invoke(Method.java:498)",
                 "line": "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)",
                 "line": "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)",
                 "line": "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)",
                 "line": "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)",
                 "line": "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)",
                 "line": "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)",
                 "line": "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)",
                 "line": "org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)",
                 "line": "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)",
                 "line": "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)",
                 "line": "org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)",
                 "line": "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)",
                 "line": "org.junit.runners.ParentRunner.run(ParentRunner.java:363)",
                 "line": "org.junit.runner.JUnitCore.run(JUnitCore.java:137)",
                 "line": "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)",
                 "line": "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)",
                 "line": "com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)",
                 "line": "com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)",
                 "line": "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                 "line": "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                 "line": "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                 "line": "java.lang.reflect.Method.invoke(Method.java:498)",
                 "line": "com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)",
                 "exception": {
                   "name": "org.squeryl.SquerylSQLException",
-                  "message": "Exception while executing statement : Table \"SHRINE_QUERY\" not found; SQL statement:\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?)) [42102-191]\nerrorCode: 42102, sqlState: 42S02\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?))\njdbcParams:[ConstantStatementParam('ConstantTypedExpression:happy),ConstantStatementParam('ConstantTypedExpression:happy),ConstantStatementParam('ConstantTypedExpression:2016-10-03 15:50:14.221)]",
+                  "message": "Exception while executing statement : Table \"SHRINE_QUERY\" not found; SQL statement:\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?)) [42102-191]\nerrorCode: 42102, sqlState: 42S02\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?))\njdbcParams:[ConstantStatementParam('ConstantTypedExpression:happy),ConstantStatementParam('ConstantTypedExpression:happy),ConstantStatementParam('ConstantTypedExpression:2016-10-13 15:20:48.169)]",
                   "stacktrace": {
                     "line": "org.squeryl.SquerylSQLException$.apply(KeyedEntity.scala:118)",
                     "line": "org.squeryl.internals.DatabaseAdapter$class._exec(DatabaseAdapter.scala:361)",
                     "line": "org.squeryl.internals.DatabaseAdapter$class.exec(DatabaseAdapter.scala:412)",
                     "line": "org.squeryl.adapters.MySQLAdapter.exec(MySQLAdapter.scala:25)",
                     "line": "org.squeryl.internals.DatabaseAdapter$class.executeQuery(DatabaseAdapter.scala:421)",
                     "line": "org.squeryl.adapters.MySQLAdapter.executeQuery(MySQLAdapter.scala:25)",
                     "line": "org.squeryl.dsl.AbstractQuery$$anon$1.<init>(AbstractQuery.scala:193)",
                     "line": "org.squeryl.dsl.AbstractQuery.iterator(AbstractQuery.scala:187)",
                     "line": "org.squeryl.Query$class.headOption(Query.scala:69)",
                     "line": "org.squeryl.dsl.AbstractQuery.headOption(AbstractQuery.scala:27)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply$mcV$sp(SquerylAdapterDao.scala:240)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply(SquerylAdapterDao.scala:237)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply(SquerylAdapterDao.scala:237)",
                     "line": "org.squeryl.AbstractSession$class.using(Session.scala:182)",
                     "line": "org.squeryl.Session.using(Session.scala:101)",
                     "line": "org.squeryl.Session.withinTransaction(Session.scala:128)",
                     "line": "org.squeryl.dsl.QueryDsl$class.inTransaction(QueryDsl.scala:126)",
                     "line": "net.shrine.dao.squeryl.SquerylEntryPoint$.inTransaction(SquerylEntryPoint.scala:12)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao.inTransaction(SquerylAdapterDao.scala:32)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1.apply(SquerylAdapterDao.scala:237)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1.apply(SquerylAdapterDao.scala:237)",
                     "line": "scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)",
                     "line": "scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao.checkIfBot(SquerylAdapterDao.scala:237)",
                     "line": "net.shrine.adapter.RunQueryAdapter.processRequest(RunQueryAdapter.scala:67)",
                     "line": "net.shrine.adapter.RunQueryAdapter.processRequest(RunQueryAdapter.scala:32)",
                     "line": "net.shrine.adapter.Adapter.perform(Adapter.scala:33)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                     "line": "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:70)",
                     "line": "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:78)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:32)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:31)",
                     "line": "scala.Option.map(Option.scala:146)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                     "line": "scala.Option.orElse(Option.scala:289)",
                     "line": "net.shrine.adapter.service.AdapterService.handleRequest(AdapterService.scala:29)",
-                    "line": "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
-                    "line": "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
+                    "line": "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
+                    "line": "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
                     "line": "scala.util.Try$.apply(Try.scala:192)",
-                    "line": "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:349)",
-                    "line": "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:344)",
+                    "line": "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:344)",
+                    "line": "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:339)",
                     "line": "scala.Option.map(Option.scala:146)",
-                    "line": "net.shrine.status.Summary$.apply(StatusJaxrs.scala:344)",
-                    "line": "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:64)",
+                    "line": "net.shrine.status.Summary$.apply(StatusJaxrs.scala:339)",
+                    "line": "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:66)",
                     "line": "net.shrine.status.StatusJaxrsTest.testSummary(StatusJaxrsTest.scala:50)",
                     "line": "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                     "line": "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                     "line": "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                     "line": "java.lang.reflect.Method.invoke(Method.java:498)",
                     "line": "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)",
                     "line": "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)",
                     "line": "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)",
                     "line": "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)",
                     "line": "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)",
                     "line": "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)",
                     "line": "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)",
                     "line": "org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)",
                     "line": "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)",
                     "line": "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)",
                     "line": "org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)",
                     "line": "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)",
                     "line": "org.junit.runners.ParentRunner.run(ParentRunner.java:363)",
                     "line": "org.junit.runner.JUnitCore.run(JUnitCore.java:137)",
                     "line": "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)",
                     "line": "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)",
                     "line": "com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)",
                     "line": "com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)",
                     "line": "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                     "line": "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                     "line": "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                     "line": "java.lang.reflect.Method.invoke(Method.java:498)",
                     "line": "com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)",
                     "exception": {
                       "name": "org.h2.jdbc.JdbcSQLException",
                       "message": "Table \"SHRINE_QUERY\" not found; SQL statement:\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?)) [42102-191]",
                       "stacktrace": {
                         "line": [
                           "org.h2.message.DbException.getJdbcSQLException(DbException.java:345)",
                           "org.h2.message.DbException.get(DbException.java:179)",
                           "org.h2.message.DbException.get(DbException.java:155)",
                           "org.h2.command.Parser.readTableOrView(Parser.java:5349)",
                           "org.h2.command.Parser.readTableFilter(Parser.java:1245)",
                           "org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884)",
                           "org.h2.command.Parser.parseSelectSimple(Parser.java:2032)",
                           "org.h2.command.Parser.parseSelectSub(Parser.java:1878)",
                           "org.h2.command.Parser.parseSelectUnion(Parser.java:1699)",
                           "org.h2.command.Parser.parseSelect(Parser.java:1687)",
                           "org.h2.command.Parser.parsePrepared(Parser.java:443)",
                           "org.h2.command.Parser.parse(Parser.java:315)",
                           "org.h2.command.Parser.parse(Parser.java:287)",
                           "org.h2.command.Parser.prepareCommand(Parser.java:252)",
                           "org.h2.engine.Session.prepareLocal(Session.java:560)",
                           "org.h2.engine.Session.prepareCommand(Session.java:501)",
                           "org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188)",
                           "org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73)",
                           "org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:276)",
                           "org.squeryl.internals.DatabaseAdapter$class.prepareStatement(DatabaseAdapter.scala:416)",
                           "org.squeryl.adapters.MySQLAdapter.prepareStatement(MySQLAdapter.scala:25)",
                           "org.squeryl.internals.DatabaseAdapter$$anonfun$executeQuery$1.apply(DatabaseAdapter.scala:422)",
                           "org.squeryl.internals.DatabaseAdapter$$anonfun$executeQuery$1.apply(DatabaseAdapter.scala:421)",
                           "org.squeryl.internals.DatabaseAdapter$class._exec(DatabaseAdapter.scala:357)",
                           "org.squeryl.internals.DatabaseAdapter$class.exec(DatabaseAdapter.scala:412)",
                           "org.squeryl.adapters.MySQLAdapter.exec(MySQLAdapter.scala:25)",
                           "org.squeryl.internals.DatabaseAdapter$class.executeQuery(DatabaseAdapter.scala:421)",
                           "org.squeryl.adapters.MySQLAdapter.executeQuery(MySQLAdapter.scala:25)",
                           "org.squeryl.dsl.AbstractQuery$$anon$1.<init>(AbstractQuery.scala:193)",
                           "org.squeryl.dsl.AbstractQuery.iterator(AbstractQuery.scala:187)",
                           "org.squeryl.Query$class.headOption(Query.scala:69)",
                           "org.squeryl.dsl.AbstractQuery.headOption(AbstractQuery.scala:27)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply$mcV$sp(SquerylAdapterDao.scala:240)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply(SquerylAdapterDao.scala:237)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply(SquerylAdapterDao.scala:237)",
                           "org.squeryl.AbstractSession$class.using(Session.scala:182)",
                           "org.squeryl.Session.using(Session.scala:101)",
                           "org.squeryl.Session.withinTransaction(Session.scala:128)",
                           "org.squeryl.dsl.QueryDsl$class.inTransaction(QueryDsl.scala:126)",
                           "net.shrine.dao.squeryl.SquerylEntryPoint$.inTransaction(SquerylEntryPoint.scala:12)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao.inTransaction(SquerylAdapterDao.scala:32)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1.apply(SquerylAdapterDao.scala:237)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1.apply(SquerylAdapterDao.scala:237)",
                           "scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)",
                           "scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao.checkIfBot(SquerylAdapterDao.scala:237)",
                           "net.shrine.adapter.RunQueryAdapter.processRequest(RunQueryAdapter.scala:67)",
                           "net.shrine.adapter.RunQueryAdapter.processRequest(RunQueryAdapter.scala:32)",
                           "net.shrine.adapter.Adapter.perform(Adapter.scala:33)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                           "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:70)",
                           "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:78)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:32)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:31)",
                           "scala.Option.map(Option.scala:146)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                           "scala.Option.orElse(Option.scala:289)",
                           "net.shrine.adapter.service.AdapterService.handleRequest(AdapterService.scala:29)",
-                          "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
-                          "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
+                          "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
+                          "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
                           "scala.util.Try$.apply(Try.scala:192)",
-                          "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:349)",
-                          "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:344)",
+                          "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:344)",
+                          "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:339)",
                           "scala.Option.map(Option.scala:146)",
-                          "net.shrine.status.Summary$.apply(StatusJaxrs.scala:344)",
-                          "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:64)",
+                          "net.shrine.status.Summary$.apply(StatusJaxrs.scala:339)",
+                          "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:66)",
                           "net.shrine.status.StatusJaxrsTest.testSummary(StatusJaxrsTest.scala:50)",
                           "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                           "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                           "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                           "java.lang.reflect.Method.invoke(Method.java:498)",
                           "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)",
                           "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)",
                           "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)",
                           "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)",
                           "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)",
                           "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)",
                           "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)",
                           "org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)",
                           "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)",
                           "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)",
                           "org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)",
                           "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)",
                           "org.junit.runners.ParentRunner.run(ParentRunner.java:363)",
                           "org.junit.runner.JUnitCore.run(JUnitCore.java:137)",
                           "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)",
                           "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)",
                           "com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)",
                           "com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)",
                           "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                           "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                           "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                           "java.lang.reflect.Method.invoke(Method.java:498)",
                           "com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)"
                         ]
                       }
                     }
                   }
                 }
               }
             }
           }
         },
-        "epoch": 1475524274253
+        "epoch": 1476386508204
       }
     },
     "origin": {
       "name": "SHRINE Cell"
     }
   },
   "adapterMappingsFileName": "AdapterMappings.xml",
-  "adapterMappingsDate": 1469822568000,
+  "adapterMappingsDate": 1476383131000,
   "adapterOk": true,
   "keystoreOk": true,
   "hubOk": false,
   "qepOk": true
-}
\ No newline at end of file
+}
diff --git a/apps/dashboard-app/src/test/resources/teststatus/summary b/apps/dashboard-app/src/test/resources/teststatus/summary
index 6d14ec6e6..72cbc6cdb 100644
--- a/apps/dashboard-app/src/test/resources/teststatus/summary
+++ b/apps/dashboard-app/src/test/resources/teststatus/summary
@@ -1,276 +1,277 @@
 {
   "isHub": true,
   "shrineVersion": "1.22.2.0-SNAPSHOT",
-  "shrineBuildDate": "2016-09-27 15:43:25",
-  "ontologyVersion": "UNKNOWN",
+  "shrineBuildDate": "2016-10-13 14:25:07",
+  "ontologyVersion": "Unavailable due to: java.net.SocketTimeoutException: connect timed out",
+  "ontologyVersionTerm": "\\\\SHRINE\\SHRINE\\ONTOLOGYVERSION",
   "ontologyTerm": "\\\\SHRINE\\SHRINE\\Diagnoses\\Mental Illness\\Disorders usually diagnosed in infancy, childhood, or adolescence\\Pervasive developmental disorders\\Infantile autism, current or active state\\",
   "queryResult": {
     "elapsed": {
-      "length": 2162,
+      "length": 2561,
       "unit": {}
     },
     "response": {
       "errorMessage": "An unanticipated problem encountered.",
       "problemDigest": {
         "codec": "net.shrine.problem.ProblemNotYetEncoded",
-        "stampText": "Mon Oct 03 15:51:14 EDT 2016 on TecRef-LT-7832AA Unknown",
+        "stampText": "Thu Oct 13 15:21:48 EDT 2016 on TecRef-LT-7832AA Unknown",
         "summary": "An unanticipated problem encountered.",
         "description": "This problem is not yet classified in Shrine source code. Please report the details to the Shrine dev team.",
         "detailsXml": {
           "details": {
             "exception": {
               "name": "java.lang.IllegalStateException",
               "message": "An unanticipated problem encountered.",
               "stacktrace": {
-                "line": "net.shrine.problem.ProblemNotYetEncoded.<init>(Problem.scala:204)",
-                "line": "net.shrine.problem.ProblemNotYetEncoded$.apply(Problem.scala:222)",
+                "line": "net.shrine.problem.ProblemNotYetEncoded.<init>(Problem.scala:211)",
+                "line": "net.shrine.problem.ProblemNotYetEncoded$.apply(Problem.scala:229)",
                 "line": "net.shrine.adapter.Adapter.perform(Adapter.scala:48)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                 "line": "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:70)",
                 "line": "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:78)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:32)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:31)",
                 "line": "scala.Option.map(Option.scala:146)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                 "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                 "line": "scala.Option.orElse(Option.scala:289)",
                 "line": "net.shrine.adapter.service.AdapterService.handleRequest(AdapterService.scala:29)",
-                "line": "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
-                "line": "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
+                "line": "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
+                "line": "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
                 "line": "scala.util.Try$.apply(Try.scala:192)",
-                "line": "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:349)",
-                "line": "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:344)",
+                "line": "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:344)",
+                "line": "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:339)",
                 "line": "scala.Option.map(Option.scala:146)",
-                "line": "net.shrine.status.Summary$.apply(StatusJaxrs.scala:344)",
-                "line": "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:64)",
+                "line": "net.shrine.status.Summary$.apply(StatusJaxrs.scala:339)",
+                "line": "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:66)",
                 "line": "net.shrine.status.StatusJaxrsTest.testSummary(StatusJaxrsTest.scala:50)",
                 "line": "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                 "line": "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                 "line": "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                 "line": "java.lang.reflect.Method.invoke(Method.java:498)",
                 "line": "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)",
                 "line": "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)",
                 "line": "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)",
                 "line": "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)",
                 "line": "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)",
                 "line": "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)",
                 "line": "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)",
                 "line": "org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)",
                 "line": "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)",
                 "line": "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)",
                 "line": "org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)",
                 "line": "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)",
                 "line": "org.junit.runners.ParentRunner.run(ParentRunner.java:363)",
                 "line": "org.junit.runner.JUnitCore.run(JUnitCore.java:137)",
                 "line": "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)",
                 "line": "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)",
                 "line": "com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)",
                 "line": "com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)",
                 "line": "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                 "line": "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                 "line": "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                 "line": "java.lang.reflect.Method.invoke(Method.java:498)",
                 "line": "com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)",
                 "exception": {
                   "name": "org.squeryl.SquerylSQLException",
-                  "message": "Exception while executing statement : Table \"SHRINE_QUERY\" not found; SQL statement:\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?)) [42102-191]\nerrorCode: 42102, sqlState: 42S02\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?))\njdbcParams:[ConstantStatementParam('ConstantTypedExpression:happy),ConstantStatementParam('ConstantTypedExpression:happy),ConstantStatementParam('ConstantTypedExpression:2016-10-03 15:50:14.221)]",
+                  "message": "Exception while executing statement : Table \"SHRINE_QUERY\" not found; SQL statement:\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?)) [42102-191]\nerrorCode: 42102, sqlState: 42S02\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?))\njdbcParams:[ConstantStatementParam('ConstantTypedExpression:happy),ConstantStatementParam('ConstantTypedExpression:happy),ConstantStatementParam('ConstantTypedExpression:2016-10-13 15:20:48.169)]",
                   "stacktrace": {
                     "line": "org.squeryl.SquerylSQLException$.apply(KeyedEntity.scala:118)",
                     "line": "org.squeryl.internals.DatabaseAdapter$class._exec(DatabaseAdapter.scala:361)",
                     "line": "org.squeryl.internals.DatabaseAdapter$class.exec(DatabaseAdapter.scala:412)",
                     "line": "org.squeryl.adapters.MySQLAdapter.exec(MySQLAdapter.scala:25)",
                     "line": "org.squeryl.internals.DatabaseAdapter$class.executeQuery(DatabaseAdapter.scala:421)",
                     "line": "org.squeryl.adapters.MySQLAdapter.executeQuery(MySQLAdapter.scala:25)",
                     "line": "org.squeryl.dsl.AbstractQuery$$anon$1.<init>(AbstractQuery.scala:193)",
                     "line": "org.squeryl.dsl.AbstractQuery.iterator(AbstractQuery.scala:187)",
                     "line": "org.squeryl.Query$class.headOption(Query.scala:69)",
                     "line": "org.squeryl.dsl.AbstractQuery.headOption(AbstractQuery.scala:27)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply$mcV$sp(SquerylAdapterDao.scala:240)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply(SquerylAdapterDao.scala:237)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply(SquerylAdapterDao.scala:237)",
                     "line": "org.squeryl.AbstractSession$class.using(Session.scala:182)",
                     "line": "org.squeryl.Session.using(Session.scala:101)",
                     "line": "org.squeryl.Session.withinTransaction(Session.scala:128)",
                     "line": "org.squeryl.dsl.QueryDsl$class.inTransaction(QueryDsl.scala:126)",
                     "line": "net.shrine.dao.squeryl.SquerylEntryPoint$.inTransaction(SquerylEntryPoint.scala:12)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao.inTransaction(SquerylAdapterDao.scala:32)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1.apply(SquerylAdapterDao.scala:237)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1.apply(SquerylAdapterDao.scala:237)",
                     "line": "scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)",
                     "line": "scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)",
                     "line": "net.shrine.adapter.dao.squeryl.SquerylAdapterDao.checkIfBot(SquerylAdapterDao.scala:237)",
                     "line": "net.shrine.adapter.RunQueryAdapter.processRequest(RunQueryAdapter.scala:67)",
                     "line": "net.shrine.adapter.RunQueryAdapter.processRequest(RunQueryAdapter.scala:32)",
                     "line": "net.shrine.adapter.Adapter.perform(Adapter.scala:33)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                     "line": "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:70)",
                     "line": "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:78)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:32)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:31)",
                     "line": "scala.Option.map(Option.scala:146)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                     "line": "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                     "line": "scala.Option.orElse(Option.scala:289)",
                     "line": "net.shrine.adapter.service.AdapterService.handleRequest(AdapterService.scala:29)",
-                    "line": "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
-                    "line": "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
+                    "line": "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
+                    "line": "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
                     "line": "scala.util.Try$.apply(Try.scala:192)",
-                    "line": "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:349)",
-                    "line": "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:344)",
+                    "line": "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:344)",
+                    "line": "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:339)",
                     "line": "scala.Option.map(Option.scala:146)",
-                    "line": "net.shrine.status.Summary$.apply(StatusJaxrs.scala:344)",
-                    "line": "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:64)",
+                    "line": "net.shrine.status.Summary$.apply(StatusJaxrs.scala:339)",
+                    "line": "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:66)",
                     "line": "net.shrine.status.StatusJaxrsTest.testSummary(StatusJaxrsTest.scala:50)",
                     "line": "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                     "line": "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                     "line": "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                     "line": "java.lang.reflect.Method.invoke(Method.java:498)",
                     "line": "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)",
                     "line": "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)",
                     "line": "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)",
                     "line": "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)",
                     "line": "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)",
                     "line": "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)",
                     "line": "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)",
                     "line": "org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)",
                     "line": "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)",
                     "line": "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)",
                     "line": "org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)",
                     "line": "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)",
                     "line": "org.junit.runners.ParentRunner.run(ParentRunner.java:363)",
                     "line": "org.junit.runner.JUnitCore.run(JUnitCore.java:137)",
                     "line": "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)",
                     "line": "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)",
                     "line": "com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)",
                     "line": "com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)",
                     "line": "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                     "line": "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                     "line": "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                     "line": "java.lang.reflect.Method.invoke(Method.java:498)",
                     "line": "com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)",
                     "exception": {
                       "name": "org.h2.jdbc.JdbcSQLException",
                       "message": "Table \"SHRINE_QUERY\" not found; SQL statement:\nSelect\n  count(*) as c0\nFrom\n  SHRINE_QUERY SHRINE_QUERY1\nWhere\n  (((SHRINE_QUERY1.DOMAIN = ?) and (SHRINE_QUERY1.USERNAME = ?)) and (SHRINE_QUERY1.DATE_CREATED >= ?)) [42102-191]",
                       "stacktrace": {
                         "line": [
                           "org.h2.message.DbException.getJdbcSQLException(DbException.java:345)",
                           "org.h2.message.DbException.get(DbException.java:179)",
                           "org.h2.message.DbException.get(DbException.java:155)",
                           "org.h2.command.Parser.readTableOrView(Parser.java:5349)",
                           "org.h2.command.Parser.readTableFilter(Parser.java:1245)",
                           "org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884)",
                           "org.h2.command.Parser.parseSelectSimple(Parser.java:2032)",
                           "org.h2.command.Parser.parseSelectSub(Parser.java:1878)",
                           "org.h2.command.Parser.parseSelectUnion(Parser.java:1699)",
                           "org.h2.command.Parser.parseSelect(Parser.java:1687)",
                           "org.h2.command.Parser.parsePrepared(Parser.java:443)",
                           "org.h2.command.Parser.parse(Parser.java:315)",
                           "org.h2.command.Parser.parse(Parser.java:287)",
                           "org.h2.command.Parser.prepareCommand(Parser.java:252)",
                           "org.h2.engine.Session.prepareLocal(Session.java:560)",
                           "org.h2.engine.Session.prepareCommand(Session.java:501)",
                           "org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188)",
                           "org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73)",
                           "org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:276)",
                           "org.squeryl.internals.DatabaseAdapter$class.prepareStatement(DatabaseAdapter.scala:416)",
                           "org.squeryl.adapters.MySQLAdapter.prepareStatement(MySQLAdapter.scala:25)",
                           "org.squeryl.internals.DatabaseAdapter$$anonfun$executeQuery$1.apply(DatabaseAdapter.scala:422)",
                           "org.squeryl.internals.DatabaseAdapter$$anonfun$executeQuery$1.apply(DatabaseAdapter.scala:421)",
                           "org.squeryl.internals.DatabaseAdapter$class._exec(DatabaseAdapter.scala:357)",
                           "org.squeryl.internals.DatabaseAdapter$class.exec(DatabaseAdapter.scala:412)",
                           "org.squeryl.adapters.MySQLAdapter.exec(MySQLAdapter.scala:25)",
                           "org.squeryl.internals.DatabaseAdapter$class.executeQuery(DatabaseAdapter.scala:421)",
                           "org.squeryl.adapters.MySQLAdapter.executeQuery(MySQLAdapter.scala:25)",
                           "org.squeryl.dsl.AbstractQuery$$anon$1.<init>(AbstractQuery.scala:193)",
                           "org.squeryl.dsl.AbstractQuery.iterator(AbstractQuery.scala:187)",
                           "org.squeryl.Query$class.headOption(Query.scala:69)",
                           "org.squeryl.dsl.AbstractQuery.headOption(AbstractQuery.scala:27)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply$mcV$sp(SquerylAdapterDao.scala:240)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply(SquerylAdapterDao.scala:237)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1$$anonfun$apply$2.apply(SquerylAdapterDao.scala:237)",
                           "org.squeryl.AbstractSession$class.using(Session.scala:182)",
                           "org.squeryl.Session.using(Session.scala:101)",
                           "org.squeryl.Session.withinTransaction(Session.scala:128)",
                           "org.squeryl.dsl.QueryDsl$class.inTransaction(QueryDsl.scala:126)",
                           "net.shrine.dao.squeryl.SquerylEntryPoint$.inTransaction(SquerylEntryPoint.scala:12)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao.inTransaction(SquerylAdapterDao.scala:32)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1.apply(SquerylAdapterDao.scala:237)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao$$anonfun$checkIfBot$1.apply(SquerylAdapterDao.scala:237)",
                           "scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)",
                           "scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)",
                           "net.shrine.adapter.dao.squeryl.SquerylAdapterDao.checkIfBot(SquerylAdapterDao.scala:237)",
                           "net.shrine.adapter.RunQueryAdapter.processRequest(RunQueryAdapter.scala:67)",
                           "net.shrine.adapter.RunQueryAdapter.processRequest(RunQueryAdapter.scala:32)",
                           "net.shrine.adapter.Adapter.perform(Adapter.scala:33)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1$$anonfun$apply$2.apply(AdapterService.scala:33)",
                           "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:70)",
                           "net.shrine.adapter.service.AdapterService$.time(AdapterService.scala:78)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:32)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1$$anonfun$apply$1.apply(AdapterService.scala:31)",
                           "scala.Option.map(Option.scala:146)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                           "net.shrine.adapter.service.AdapterService$$anonfun$handleRequest$1.apply(AdapterService.scala:31)",
                           "scala.Option.orElse(Option.scala:289)",
                           "net.shrine.adapter.service.AdapterService.handleRequest(AdapterService.scala:29)",
-                          "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
-                          "net.shrine.status.Summary$$anonfun$21$$anonfun$22.apply(StatusJaxrs.scala:349)",
+                          "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
+                          "net.shrine.status.Summary$$anonfun$19$$anonfun$20.apply(StatusJaxrs.scala:344)",
                           "scala.util.Try$.apply(Try.scala:192)",
-                          "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:349)",
-                          "net.shrine.status.Summary$$anonfun$21.apply(StatusJaxrs.scala:344)",
+                          "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:344)",
+                          "net.shrine.status.Summary$$anonfun$19.apply(StatusJaxrs.scala:339)",
                           "scala.Option.map(Option.scala:146)",
-                          "net.shrine.status.Summary$.apply(StatusJaxrs.scala:344)",
-                          "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:64)",
+                          "net.shrine.status.Summary$.apply(StatusJaxrs.scala:339)",
+                          "net.shrine.status.StatusJaxrs.summary(StatusJaxrs.scala:66)",
                           "net.shrine.status.StatusJaxrsTest.testSummary(StatusJaxrsTest.scala:50)",
                           "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                           "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                           "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                           "java.lang.reflect.Method.invoke(Method.java:498)",
                           "org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)",
                           "org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)",
                           "org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)",
                           "org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)",
                           "org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)",
                           "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)",
                           "org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)",
                           "org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)",
                           "org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)",
                           "org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)",
                           "org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)",
                           "org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)",
                           "org.junit.runners.ParentRunner.run(ParentRunner.java:363)",
                           "org.junit.runner.JUnitCore.run(JUnitCore.java:137)",
                           "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)",
                           "com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)",
                           "com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)",
                           "com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)",
                           "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                           "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
                           "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
                           "java.lang.reflect.Method.invoke(Method.java:498)",
                           "com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)"
                         ]
                       }
                     }
                   }
                 }
               }
             }
           }
         },
-        "epoch": 1475524274253
+        "epoch": 1476386508204
       }
     },
     "origin": {
       "name": "SHRINE Cell"
     }
   },
   "adapterMappingsFileName": "AdapterMappings.xml",
-  "adapterMappingsDate": 1469822568000,
+  "adapterMappingsDate": 1476383131000,
   "adapterOk": true,
   "keystoreOk": true,
   "hubOk": false,
   "qepOk": true
-}
\ No newline at end of file
+}
diff --git a/apps/shrine-app/src/main/scala/net/shrine/status/StatusJaxrs.scala b/apps/shrine-app/src/main/scala/net/shrine/status/StatusJaxrs.scala
index ca4a1e798..37abfe0ff 100644
--- a/apps/shrine-app/src/main/scala/net/shrine/status/StatusJaxrs.scala
+++ b/apps/shrine-app/src/main/scala/net/shrine/status/StatusJaxrs.scala
@@ -1,445 +1,448 @@
 package net.shrine.status
 
 import java.io.File
 import java.net.URL
 import java.security.MessageDigest
 import java.security.cert.X509Certificate
 import java.util.Date
 import javax.ws.rs.{GET, Path, Produces, WebApplicationException}
 import javax.ws.rs.core.{MediaType, Response}
 
 import com.sun.jersey.spi.container.{ContainerRequest, ContainerRequestFilter}
 import com.typesafe.config.{Config => TsConfig}
 import net.shrine.adapter.AdapterComponents
 import net.shrine.authorization.{QueryAuthorizationService, StewardQueryAuthorizationService}
 import net.shrine.broadcaster._
 import net.shrine.client.PosterOntClient
 import net.shrine.wiring.ShrineOrchestrator
 import org.json4s.{DefaultFormats, Formats}
 import org.json4s.native.Serialization
 import net.shrine.log.{Log, Loggable}
 
 import scala.collection.JavaConverters._
 import scala.collection.immutable.{Map, Seq, Set}
 import net.shrine.config.ConfigExtensions
 import net.shrine.crypto.{KeyStoreCertCollection, KeyStoreDescriptor, SigningCertStrategy}
+import net.shrine.ont.data.OntClientOntologyMetadata
 import net.shrine.protocol.query.{OccuranceLimited, QueryDefinition, Term}
 import net.shrine.protocol._
 import net.shrine.serialization.NodeSeqSerializer
 import net.shrine.util.Versions
 
 import scala.concurrent.Await
 import scala.util.{Success, Try}
 import scala.util.control.NonFatal
 
 /**
   * A subservice that shares internal state of the shrine servlet.
   *
   * @author david 
   * @since 12/2/15
   */
 @Path("/internalstatus")
 @Produces(Array(MediaType.APPLICATION_JSON))
 case class StatusJaxrs(shrineConfig:TsConfig) extends Loggable {
 
   implicit def json4sFormats: Formats = DefaultFormats + new NodeSeqSerializer
 
   @GET
   @Path("version")
   def version: String = {
     val version = Version("changeMe")
     val versionString = Serialization.write(version)
     versionString
   }
 
   @GET
   @Path("config")
   def config: String = {
     //todo probably better to reach out and grab the config from ManuallyWiredShrineJaxrsResources once it is a singleton
     Serialization.write(Json4sConfig(shrineConfig))
   }
 
   @GET
   @Path("summary")
   def summary: String = {
     val summary = Summary()
     Serialization.write(summary)
   }
 
   @GET
   @Path("i2b2")
   def i2b2: String = {
     val i2b2 = I2b2()
     Serialization.write(i2b2)
   }
 
   @GET
   @Path("optionalParts")
   def optionalParts: String = {
     val optionalParts = OptionalParts()
     Serialization.write(optionalParts)
   }
 
   @GET
   @Path("hub")
   def hub: String = {
     val hub = Hub()
     Serialization.write(hub)
   }
 
   @GET
   @Path("adapter")
   def adapter: String = {
     val adapter = Adapter()
     Serialization.write(adapter)
   }
 
   @GET
   @Path("qep")
   def qep: String = {
     val qep = Qep()
     Serialization.write(qep)
   }
 
   @GET
   @Path("keystore")
   def keystore: String = {
     Serialization.write(KeyStoreReport())
   }
 
 
 }
 /* todo fill in later when you take the time to get the right parts in place SHRINE-1529
 case class KeyStoreEntryReport(
                               alias:String,
                               commonName:String,
                               md5Signature:String
                               )
 */
 case class KeyStoreReport(
                         fileName:String,
                         password:String = "REDACTED",
                         privateKeyAlias:Option[String],
                         owner:Option[String],
                         issuer:Option[String],
                         expires:Option[Date],
                         signature:Option[String],
                         caTrustedAlias:Option[String],
                         caTrustedSignature:Option[String]
 //                        keyStoreContents:List[KeyStoreEntryReport] //todo SHRINE-1529
                       )
 
 //todo build new API for the dashboard to use to check signatures
 
 object KeyStoreReport {
   def apply(): KeyStoreReport = {
     val keystoreDescriptor: KeyStoreDescriptor = ShrineOrchestrator.keyStoreDescriptor
     val certCollection: KeyStoreCertCollection = ShrineOrchestrator.certCollection
 
     def toMd5(cert:X509Certificate): String = {
       val md5 = MessageDigest.getInstance("MD5")
       def toHex(buf: Array[Byte]): String = buf.map("%02X".format(_)).mkString(":")
 
       toHex(md5.digest(cert.getEncoded))
     }
 
     new KeyStoreReport(
       fileName = keystoreDescriptor.file,
       privateKeyAlias = keystoreDescriptor.privateKeyAlias,
       owner = certCollection.myCert.map(cert => cert.getSubjectDN.getName),
       issuer = certCollection.myCert.map(cert => cert.getIssuerDN.getName),
       expires = certCollection.myCert.map(cert => cert.getNotAfter),
       signature = certCollection.myCert.map(cert => toMd5(cert)),
       //todo sha1 signature if needed
       caTrustedAlias = certCollection.caCertAliases.headOption,
       caTrustedSignature = certCollection.headOption.map(cert => toMd5(cert))
 //      keyStoreContents = certCollection.caCerts.zipWithIndex.map((cert: ((Principal, X509Certificate), Int)) => KeyStoreEntryReport(keystoreDescriptor.caCertAliases(cert._2),cert._1._1.getName,toMd5(cert._1._2))).to[List]
     )
   }
 }
 
 case class I2b2(pmUrl:String,
                 crcUrl:Option[String],
                 ontUrl:String,
                 i2b2Domain:String,
                 username:String,
                 crcProject:String,
                 ontProject:String)
 
 object I2b2 {
   def apply(): I2b2 = new I2b2(
     pmUrl = ShrineOrchestrator.pmPoster.url,
     crcUrl = ShrineOrchestrator.adapterComponents.map(_.i2b2AdminService.crcUrl),
     ontUrl = "", //todo
     i2b2Domain = ShrineOrchestrator.crcHiveCredentials.domain,
     username = ShrineOrchestrator.crcHiveCredentials.username,
     crcProject = ShrineOrchestrator.crcHiveCredentials.projectId,
     ontProject = ShrineOrchestrator.ontologyMetadata.client match {
       case client: PosterOntClient => client.hiveCredentials.projectId
       case _ => ""
     }
   )
 }
 
 case class DownstreamNode(name:String, url:String)
 
 // Replaces StewardQueryAuthorizationService so that we never transmit a password
 case class Steward(stewardBaseUrl: String, qepUsername: String, password:String = "REDACTED")
 
 case class Qep(
                 maxQueryWaitTimeMillis:Long,
                 create:Boolean,
                 attachSigningCert:Boolean,
                 authorizationType:String,
                 includeAggregateResults:Boolean,
                 authenticationType:String,
                 steward:Option[Steward],
                 broadcasterUrl:Option[String]
               )
 
 object Qep{
   val key = "shrine.queryEntryPoint."
   import ShrineOrchestrator.queryEntryPointComponents
   def apply():Qep = new Qep(
     maxQueryWaitTimeMillis  = queryEntryPointComponents.fold(0L)(_.i2b2Service.queryTimeout.toMicros),
     create                  = queryEntryPointComponents.isDefined,
     attachSigningCert       = queryEntryPointComponents.fold(false)(_.i2b2Service.broadcastAndAggregationService.attachSigningCert),
     authorizationType       = queryEntryPointComponents.fold("")(_.i2b2Service.authorizationService.getClass.getSimpleName),
     includeAggregateResults = queryEntryPointComponents.fold(false)(_.i2b2Service.includeAggregateResult),
     authenticationType      = queryEntryPointComponents.fold("")(_.i2b2Service.authenticator.getClass.getSimpleName),
     steward                 = queryEntryPointComponents.flatMap(qec => checkStewardAuthorization(qec.shrineService.authorizationService)),
     broadcasterUrl          = queryEntryPointComponents.flatMap(qec => checkBroadcasterUrl(qec.i2b2Service.broadcastAndAggregationService)))
 
   def checkStewardAuthorization(auth: QueryAuthorizationService): Option[Steward] = auth match {
     case sa:StewardQueryAuthorizationService => Some(Steward(sa.stewardBaseUrl.toString, sa.qepUserName))
     case _ => None
   }
 
   //TODO: Double check with Dave that this is the right url
   def checkBroadcasterUrl(broadcaster: BroadcastAndAggregationService): Option[String] = broadcaster match {
     case a:HubBroadcastAndAggregationService => a.broadcasterClient match {
       case PosterBroadcasterClient(poster, _) => Some(poster.url)
       case _ => None
     }
     case _ => None
   }
 }
 
 object DownstreamNodes {
   def get():Seq[DownstreamNode] = {
     ShrineOrchestrator.hubComponents.fold(Seq.empty[DownstreamNode])(_.broadcastDestinations.map(DownstreamNode(_)).to[Seq])
   }
 }
 
 object DownstreamNode {
   def apply(nodeHandle: NodeHandle): DownstreamNode = new DownstreamNode(
     nodeHandle.nodeId.name,
     nodeHandle.client.url.map(_.toString).getOrElse("not applicable"))
 }
 
 case class Adapter(crcEndpointUrl:String,
                    setSizeObfuscation:Boolean,
                    adapterLockoutAttemptsThreshold:Int,
                    adapterMappingsFilename:Option[String],
                    adapterMappingsDate:Option[Long]
                   )
 
 object
 Adapter{
   def apply():Adapter = {
     val crcEndpointUrl                  = ShrineOrchestrator.adapterComponents.fold("")(_.i2b2AdminService.crcUrl)
     val setSizeObfuscation              = ShrineOrchestrator.adapterComponents.fold(false)(_.i2b2AdminService.obfuscate)
     val adapterLockoutAttemptsThreshold = ShrineOrchestrator.adapterComponents.fold(0)(_.i2b2AdminService.adapterLockoutAttemptsThreshold)
     val adapterMappingsFileName         = mappingFileInfo.map(_._1)
     val adapterMappingsFileDate         = mappingFileInfo.map(_._2)
 
     Adapter(crcEndpointUrl, setSizeObfuscation, adapterLockoutAttemptsThreshold, adapterMappingsFileName, adapterMappingsFileDate)
   }
 
   def mappingFileInfo: Option[(String, Long, String)] =
     ShrineOrchestrator.adapterComponents.map(ac => (ac.adapterMappings.source, ac.lastModified, ac.adapterMappings.version))
 }
 
 case class Hub(shouldQuerySelf:Boolean, //todo don't use this field any more. Drop it when possible
                create:Boolean,
                downstreamNodes:Seq[DownstreamNode])
 
 object Hub{
   def apply():Hub = {
     val shouldQuerySelf = false
     val create          = ShrineOrchestrator.hubComponents.isDefined
     val downstreamNodes = DownstreamNodes.get()
     Hub(shouldQuerySelf, create, downstreamNodes)
   }
 }
 
 
 case class OptionalParts(isHub:Boolean,
                          stewardEnabled:Boolean,
                          shouldQuerySelf:Boolean, //todo don't use this field any more. Drop it when possible
                          downstreamNodes:Seq[DownstreamNode])
 
 object OptionalParts {
   def apply(): OptionalParts = {
     OptionalParts(
       ShrineOrchestrator.hubComponents.isDefined,
       ShrineOrchestrator.queryEntryPointComponents.fold(false)(_.shrineService.authorizationService.isInstanceOf[StewardQueryAuthorizationService]),
       shouldQuerySelf = false,
       DownstreamNodes.get()
     )
   }
 }
 
 case class Summary(
                     isHub:Boolean,
                     shrineVersion:String,
                     shrineBuildDate:String,
                     ontologyVersion:String,
+                    ontologyVersionTerm:String,
                     ontologyTerm:String,
                     queryResult: Option[SingleNodeResult],
                     adapterMappingsFileName:Option[String],
                     adapterMappingsDate:Option[Long],
                     adapterOk:Boolean,
                     keystoreOk:Boolean,
                     hubOk:Boolean,
                     qepOk:Boolean
                   )
 
 object Summary {
 
   val term = Term(ShrineOrchestrator.shrineConfig.getString("networkStatusQuery"))
 
   def runQueryRequest: BroadcastMessage = {
     val domain = "happy"
     val username = "happy"
 
     val networkAuthn = AuthenticationInfo(domain, username, Credential("", isToken = false))
 
     val queryDefinition = QueryDefinition("TestQuery", OccuranceLimited(1, term))
     import scala.concurrent.duration._
     val req = RunQueryRequest(
       "happyProject",
       3.minutes,
       networkAuthn,
       None,
       None,
       Set(ResultOutputType.PATIENT_COUNT_XML),
       queryDefinition)
 
 
     ShrineOrchestrator.signerVerifier.sign(BroadcastMessage(req.networkQueryId, networkAuthn, req), SigningCertStrategy.Attach)
   }
 
   def apply(): Summary = {
 
     val message = runQueryRequest
 
     val queryResult: Option[SingleNodeResult] = ShrineOrchestrator.adapterService.map{ adapterService =>
 
       import scala.concurrent.duration._
 
       val start = System.currentTimeMillis
       val resultAttempt: Try[Result] = Try(adapterService.handleRequest(message))
       val end = System.currentTimeMillis
       val elapsed = (end - start).milliseconds
 
       resultAttempt match {
         case scala.util.Success(result) => result
         case scala.util.Failure(throwable) => FailureResult(NodeId("Local"), throwable)
       }
     }
 
     val adapterOk = queryResult.fold(true) {
       case r:Result => true
       case f:FailureResult => false
     }
 
     val hubOk = ShrineOrchestrator.hubComponents.fold(true){ hubComponents =>
       val maxQueryWaitTime = hubComponents.broadcasterMultiplexerService.maxQueryWaitTime
       val broadcaster: Broadcaster = hubComponents.broadcasterMultiplexerService.broadcaster
       val message = runQueryRequest
       val triedMultiplexer = Try(broadcaster.broadcast(message))
       //todo just use fold()() in scala 2.12
       triedMultiplexer.toOption.fold(false) { multiplexer =>
         val responses = Await.result(multiplexer.responses, maxQueryWaitTime).toSeq
         val failures = responses.collect { case f: FailureResult => f }
         val timeouts = responses.collect { case t: Timeout => t }
         val validResults = responses.collect { case r: Result => r }
 
         failures.isEmpty && timeouts.isEmpty && (validResults.size == broadcaster.destinations.size)
       }
     }
 
     val adapterMappingInfo = Adapter.mappingFileInfo
 
     val ontologyVersion = try {
       ShrineOrchestrator.ontologyMetadata.ontologyVersion
     }
     catch {
       case NonFatal(x) =>
         Log.info("Problem while getting ontology version",x)
         s"Unavailable due to: ${x.getMessage}"
     }
 
     Summary(
       isHub = ShrineOrchestrator.hubComponents.isDefined,
       shrineVersion = Versions.version,
       shrineBuildDate = Versions.buildDate,
       //todo in scala 2.12, do better
       ontologyVersion = ontologyVersion,
+      ontologyVersionTerm = OntClientOntologyMetadata.versionContainerTerm,
       ontologyTerm = term.value,
       queryResult = queryResult,
       adapterMappingsFileName = adapterMappingInfo.map(_._1),
       adapterMappingsDate = adapterMappingInfo.map(_._2),
       adapterOk = adapterOk,
       keystoreOk = true, //todo something for this
       hubOk = hubOk,
       qepOk = true //todo something for this
     )
   }
 }
 
 case class Version(version:String)
 
 //todo SortedMap when possible
 case class Json4sConfig(keyValues:Map[String,String])
 
 object Json4sConfig{
   def isPassword(key:String):Boolean = {
     if(key.toLowerCase.contains("password")) true
     else false
   }
 
   def apply(config:TsConfig):Json4sConfig = {
     val entries: Set[(String, String)] = config.entrySet.asScala.to[Set].map(x => (x.getKey,x.getValue.render())).filterNot(x => isPassword(x._1))
     val sortedMap: Map[String, String] = entries.toMap
     Json4sConfig(sortedMap)
   }
 }
 
 class PermittedHostOnly extends ContainerRequestFilter {
 
   //todo generalize for happy, too
   //todo for tomcat 8 see https://jersey.java.net/documentation/latest/filters-and-interceptors.html for a cleaner version
   //shell code from http://stackoverflow.com/questions/17143514/how-to-add-custom-response-and-abort-request-in-jersey-1-11-filters
 
   //how to apply in http://stackoverflow.com/questions/4358213/how-does-one-intercept-a-request-during-the-jersey-lifecycle
   override def filter(requestContext: ContainerRequest): ContainerRequest = {
     val hostOfOrigin = requestContext.getBaseUri.getHost
     val shrineConfig:TsConfig = ShrineOrchestrator.config
     val permittedHostOfOrigin:String = shrineConfig.getOption("shrine.status.permittedHostOfOrigin",_.getString).getOrElse("localhost")
 
     val path = requestContext.getPath
 
     //happy and internalstatus API calls must come from the same host as tomcat is running on (hopefully the dashboard servlet).
     // todo access to the happy service permitted for SHRINE 1.21 per SHRINE-1366
     // restrict access to happy service when database work resumes as part of SHRINE-
     //       if ((path.contains("happy") || path.contains("internalstatus")) && (hostOfOrigin != permittedHostOfOrigin)) {
     if (path.contains("internalstatus") && (hostOfOrigin != permittedHostOfOrigin)) {
       val response = Response.status(Response.Status.UNAUTHORIZED).entity(s"Only available from $permittedHostOfOrigin, not $hostOfOrigin, controlled by shrine.status.permittedHostOfOrigin in shrine.conf").build()
       throw new WebApplicationException(response)
     }
     else requestContext
   }
 
 }
\ No newline at end of file
diff --git a/apps/shrine-app/src/test/scala/net/shrine/status/StatusJaxrsTest.scala b/apps/shrine-app/src/test/scala/net/shrine/status/StatusJaxrsTest.scala
index c6faf178b..88c5ae834 100644
--- a/apps/shrine-app/src/test/scala/net/shrine/status/StatusJaxrsTest.scala
+++ b/apps/shrine-app/src/test/scala/net/shrine/status/StatusJaxrsTest.scala
@@ -1,131 +1,132 @@
 package net.shrine.status
 
 import java.io.File
 
 import com.typesafe.config.ConfigFactory
 import net.shrine.util.ShouldMatchersForJUnit
 import org.json4s.{DefaultFormats, Formats}
 import org.junit.Test
 import org.json4s.native.Serialization
 
 import scala.collection.immutable.Map
 
 /**
   * Tests for StatusJaxrs
   *
   * @author david 
   * @since 12/2/15
   */
 class StatusJaxrsTest extends ShouldMatchersForJUnit {
 
   implicit def json4sFormats: Formats = DefaultFormats
   val expectedConfig = ConfigFactory.load("shrine") //new File("/Users/ty/shrine/apps/shrine-app/src/test/resources/shrine.conf"))
   val statusJaxrs = StatusJaxrs(expectedConfig)
 
   @Test
   def testVersion() = {
     val versionString = statusJaxrs.version
     val version = Serialization.read[Version](versionString)
 
     version should equal(Version("changeMe"))
   }
 
   @Test
   def testConfig() = {
     val expectedJson4sConfig = Json4sConfig(expectedConfig)
 
     val configString = statusJaxrs.config
     val config = Serialization.read[Json4sConfig](configString)
 
     config should equal(expectedJson4sConfig)
 
     val passwordKeys = config.keyValues.filter(x => Json4sConfig.isPassword(x._1))
 
     passwordKeys should equal(Map.empty[String,String])
   }
 
   @Test
   def testSummary() = {
 
     val summaryString = statusJaxrs.summary
+    println(summaryString)
     val summary = Serialization.read[Summary](summaryString)
 
     summary.isHub should be (true)
     summary.adapterMappingsFileName.isDefined should be (true)
     summary.adapterMappingsDate.isEmpty should be (false)
     summary.adapterOk should be (true)
     summary.keystoreOk should be (true)
     summary.hubOk should be (false)
     summary.qepOk should be (true)
 
   }
 
   @Test
   def testI2b2() = {
 
     val i2b2String = statusJaxrs.i2b2
 
     val i2b2 = Serialization.read[I2b2](i2b2String)
 
     i2b2.crcUrl.isDefined should be (true)
   }
 
   @Test
   def testOptionalParts() = {
 
     val string = statusJaxrs.optionalParts
 
     val actual = Serialization.read[OptionalParts](string)
 
     actual.isHub should be (true)
     actual.stewardEnabled should be (true)
     actual.shouldQuerySelf should be (false)
     actual.downstreamNodes.size should be (4)
   }
 
   @Test
   def testHub() = {
 
     val string = statusJaxrs.hub
 
     val actual = Serialization.read[Hub](string)
 
     actual.create should be (true)
     actual.shouldQuerySelf should be (false)
     actual.downstreamNodes.size should be (4)
   }
 
   @Test
   def testQep() = {
 
     val string = statusJaxrs.qep
 
     val actual = Serialization.read[Qep](string)
 
     actual.create should be (true)
     actual.attachSigningCert should be (true)
     actual.authenticationType should be ("PmAuthenticator")
     actual.authorizationType should be ("StewardQueryAuthorizationService")
     actual.includeAggregateResults should be (false)
     actual.maxQueryWaitTimeMillis should be (300000000L)
   }
 
   @Test
   def testAdapter() = {
 
     val string = statusJaxrs.adapter
 
     val actual = Serialization.read[Adapter](string)
 
     actual.adapterLockoutAttemptsThreshold should be (10)
   }
 
   @Test
   def testKeyStore() = {
 
     val string = statusJaxrs.keystore
 
     val actual = Serialization.read[KeyStoreReport](string)
   }
 
 }