diff --git a/apps/dashboard-app/src/main/js/src/app/diagnostic/diagnostic.model.js b/apps/dashboard-app/src/main/js/src/app/diagnostic/diagnostic.model.js
index 5a8923c54..e8b6232b9 100644
--- a/apps/dashboard-app/src/main/js/src/app/diagnostic/diagnostic.model.js
+++ b/apps/dashboard-app/src/main/js/src/app/diagnostic/diagnostic.model.js
@@ -1,254 +1,250 @@
 (function (){
     'use strict';
 
 
     // -- angular module -- //
     angular.module('shrine-tools')
         .factory('DiagnosticModel', DiagnosticModel)
 
 
-    DiagnosticModel.$inject = ['$http', '$q', 'UrlGetter', 'XMLService'];
-    function DiagnosticModel (h, q, urlGetter, xmlService) {
+    DiagnosticModel.$inject = ['$http', '$q', 'UrlGetter', 'XMLService', '$log'];
+    function DiagnosticModel (h, q, urlGetter, xmlService, $log) {
 
 
         var cache = {};
 
         // -- private const -- //
         var Config = {
             OptionsEndpoint:  'admin/status/options',
             ConfigEndpoint:   'admin/status/config',
             SummaryEndpoint:  'admin/status/summary',
             ProblemEndpoint:  'admin/status/problems',
             HappyAllEndpoint: 'admin/happy/all'
         };
 
 
         // -- public -- //
         return {
             getOptions:  getOptions,
             getConfig:   getConfig,
             getSummary:  getSummary,
             getProblems: getProblemsMaker(),
             getHappyAll: getHappyAll,
             cache:       cache
         };
 
         /**
          * Method for Handling a failed rest call.
          * @param failedResult
          * @returns {*}
          */
         function onFail(failedResult) {
             return failedResult;
         }
 
 
         /***
          * Method for handling a successful rest call.
          * @param result
          * @returns {*}
          */
         function parseJsonResult(result) {
             return result.data;
         }
 
 
         /**
          *
          * @param result
          * @returns {*}
          */
         function parseHappyAllResult(result) {
 
             var happyObj = {};
             if(isQEPError(result.data)) {
                 return $q.reject(result.data);
             }
 
             // -- append all -- //
             happyObj.all = xmlService.xmlStringToJson(result.data).all;
 
             // -- parse and append summary  -- //
             happyObj.summary = parseSummaryFromAll(happyObj.all);
 
             return happyObj;
         }
 
 
         /**
          *
          * @param all
          * @returns {{}}
          */
         function parseSummaryFromAll (all) {
 
             //
             var summary             = {};
 
             summary.isHub           = !Boolean("" == all.notAHub);
             summary.shrineVersion   = all.versionInfo.shrineVersion;
             summary.shrineBuildDate = all.versionInfo.buildDate;
             summary.ontologyVersion = all.versionInfo.ontologyVersion;
             summary.ontologyTerm    = ""; //to be implemented in config.
             summary.adapterOk       = all.adapter.result.response.errorResponse === undefined;
             summary.keystoreOk      = true;
             summary.qepOk           = true;
 
             // -- verify hub is operating, if necessary -- //
             if(!summary.isHub) {
                 summary.hubOk = true;
             }
             else if(all.net !== undefined) {
                 var hasFailures         = Number(all.net.failureCount) > 0;
                 var hasInvalidResults   = Number(all.net.validResultCount) !=
                     Number(all.net.expectedResultCount);
 
                 var hasTimeouts         = Number(all.net.timeoutCount) > 0;
                 summary.hubOk           = !hasFailures && !hasInvalidResults && !hasTimeouts;
             }
 
             return summary;
         }
 
         /**
          * Parses the json config map and turns it into a nested json object
          * @param json the flat config map
          */
         function parseConfig (json) {
             var configMap = json.data.configMap;
-            return preProcessJson(configMap);
-
+            var processed = preProcessJson(configMap);
+            $log.warn('processed: ' + processed);
+            return processed;
         }
 
         // IE11 doesn't support string includes
         function stringIncludes(haystack, needle) {
             var arr = haystack.split("");
             for (var i = 0; i < arr.length; i++) {
                 if (arr[i] == needle) {
                     return true;
                 }
             }
             return false;
         }
 
         // "explodes" the flag config map.
         // e.g., {"key.foo": 10, "key.baz": 5} -> {"key": {"foo": 10, "baz": 5}}
         function preProcessJson (object) {
             var result = {};
             for (var key in object) {
                 if (object.hasOwnProperty(key)) {
                     if (!stringIncludes(key, ".")) {
                         result[key] = object[key]
                     } else {
                         var split = key.split(".");
                         var prev = result;
                         for (var i = 0; i < split.length; i++) {
                             var cur = split[i];
                             if (!(cur in prev)) {
                                 prev[cur] = {}
                             }
                             if (i == split.length - 1) {
                                 prev[cur] = object[key];
                             } else {
                                 prev = prev[cur]
                             }
                         }
                     }
                 }
             }
             return result;
         }
 
 
 
         /**
          * Get View Options, initial call from diagnostic.
          * @param verb
          * @returns {*}
          */
         function getOptions() {
             var url = urlGetter(Config.OptionsEndpoint);
             return h.get(url)
                 .then(parseJsonResult, onFail);
         }
 
 
         /**
          * Returns the Shrine Configuration object.
          * @returns {*}
          */
         function getConfig () {
             var url = urlGetter(Config.ConfigEndpoint);
             return h.get(url)
                 .then(parseConfig, onFail);
         }
 
 
         /**
          *
          * @returns {*}
          */
         function getSummary () {
             var url = urlGetter(Config.SummaryEndpoint);
             return h.get(url)
                 .then(parseConfig, onFail);
         }
 
 
         function getProblemsMaker() {
 
             var prevOffset = 0;
             var prevN = 20;
             var prevEpoch;
 
             /**
              * ProblemEndpoint:  'admin/status/problems',
              * @returns {*}
              */
             return function(offset, n, epoch) {
                 if (offset != null) {
                     prevOffset = offset;
                 } else {
                     offset = prevOffset;
                 }
                 if (n != null) {
                     prevN = n;
                 } else {
                     n = prevN;
                 }
-                if (epoch != null) {
-                    prevEpoch = epoch;
-                } else {
-                    epoch = prevEpoch;
-                }
 
                 var epochString = epoch && isFinite(epoch) ? '&epoch=' + epoch : '';
                 var url = urlGetter(
                     Config.ProblemEndpoint + '?offset=' + offset + '&n=' + n + epochString);
                 return h.get(url)
                     .then(parseJsonResult, onFail);
             }
         }
 
 
         /**
          *
          * @returns {*}
          */
         function getHappyAll() {
             var url = urlGetter(Config.HappyAllEndpoint, '.xml');
             return h.get(url)
                 .then(parseHappyAllResult, onFail);
         }
 
         /**
          *
          * @param resultXML
          * @returns {boolean}
          */
         function isQEPError(resultXML) {
             var result = resultXML.indexOf('<all>') + resultXML.indexOf('</all>');
             return result == -2
         }
     }
 })();
diff --git a/apps/dashboard-app/src/main/js/src/app/diagnostic/views/summary.controller.js b/apps/dashboard-app/src/main/js/src/app/diagnostic/views/summary.controller.js
index fd8e64c65..0d0ca8b11 100644
--- a/apps/dashboard-app/src/main/js/src/app/diagnostic/views/summary.controller.js
+++ b/apps/dashboard-app/src/main/js/src/app/diagnostic/views/summary.controller.js
@@ -1,90 +1,90 @@
 (function () {
     'use strict';
 
     // -- register controller with shrine-tools module
     angular.module('shrine-tools')
         .controller('SummaryController', SummaryController);
 
 
     /**
      * Summary Controller.
      *
      */
     SummaryController.$inject = ['$app', '$sce', '$log']
     function SummaryController ($app, $sce, $log) {
         var vm          = this;
 
         init();
 
         
         /**
          *
          */
         function init() {
             $app.model.getSummary()
                 .then(setSummary, onHappyFail);
 
             $app.model.getConfig()
                 .then(setConfig, onConfigFail);
         }
 
 
         /**
          *
          * @param summary
          */
         function setSummary(happyAll) {
             //TODO FINISH
             // -- cache summary and all -- //
             $app.model.cache['all']     = happyAll.all;
             $app.model.cache['summary'] = happyAll;
 
             // -- set viewmodel  -- //
             vm.summary              = happyAll;
-            $log.warn(JSON.stringify(vm.summary));
+            $log.warn('summary: '+JSON.stringify(vm.summary));
             return this;
         }
 
 
         /**
          *
          * @returns {*}
          */
         function getConfig() {
              return $app.model.getConfig();
         }
 
 
         /**
          *
          * @param config
          */
         function setConfig(config) {
 
             // -- cache the config --
             $app.model.cache['config'] =  config;
             vm.config                   = config;
             return this;
         }
 
 
 
 
         /**
          *
          * @param data
          */
         function onHappyFail(data) {
             vm.trustedHtml  = $sce.trustAsHtml(data);
         }
 
 
         /**
          *
          * @param data
          */
         function onConfigFail (data) {
             vm.trustedHtml  = $sce.trustAsHtml(data);
         }
     }
 })();