regen JS
diff --git a/ui/js/warble.v1.js b/ui/js/warble.v1.js
index 8b5d0bd..6835c8c 100644
--- a/ui/js/warble.v1.js
+++ b/ui/js/warble.v1.js
@@ -1,5 +1,5 @@
 // Generated by CoffeeScript 1.9.3
-var API, APIVERSION, Chart, HTML, Row, WarbleLogin, WarbleLoginCallback, Widget, aSourceTypes, addSourceType, addSources, addorguser, addsources, affiliate, affiliation, affiliationWizard, altemail, app, badModal, bio, chartOnclick, chartToSvg, chartWrapperButtons, charts_donutchart, charts_gaugechart, charts_linechart, charts_linechart_stacked, charts_linked, charts_radarchart, ciexplorer, clientTypes, clientlist, cog, comShow, comstat, copyCSS, currentSources, dataTable, datepicker, datepickers, defaultOrgChanged, deleteNode, deletesource, doResetPass, donut, downloadBlob, explorer, fScreen, factors, fetch, fetchPhonebook, filterPerson, filterView, findWidget, forumexplorer, gauge, genColors, get, getResetToken, getSourceType, globArgs, hsl2rgb, imexplorer, inviteMember, isArray, isHash, issueexplorer, jsondump, keyValueForm, linechart, loadPageWidgets, logexplorer, login, mailexplorer, make5, makeClientType, makeOrg, manageviews, memberInvited, membershipList, messages, mk, modifyNode, multiviewexplorer, mvp, newview, nodeVal, orgCreated, orgadmin, orglist, pageID, paragraph, patch, phonebook_cached, post, postPublishLink, preferences, pubWidget, publishWidget, publisher, publisherPublic, publisherWidget, put, pwReset, quickColors, radar, radarIndicators, rcollate, redirs, relationship, remail, remorguser, removeMember, renderAccountInfo, renderPhonebook, report, resetpw, rmview, rotateTable, rowZ, saveNodeValue, savedNodeValue, saveprefs, saveview, sendEmail, set, setDefaultOrg, setupPage, setupPhonebook, showClientType, showMore, showType, signout, signup, snap, sourceAdded, sourceTypes, sourceadd, sourceexplorer, sourcelist, sourceret, st, stackChart, subFilter, subFilterGlob, swi, switchChartType, tagList, theme, toFullscreen, toNormal, top5, treemap, trend, trendBox, txt, updateTimeseriesWidgets, updateWidgets, userAccount, validateLogin, validateSignup, viewJS, viewexplorer, widgetCache, widgetexplorer, worldmap, xdelete, xxCharts,
+var API, APIVERSION, Chart, HTML, Row, WarbleLogin, WarbleLoginCallback, Widget, aSourceTypes, addSourceType, addSources, addorguser, addsources, affiliate, affiliation, affiliationWizard, altemail, app, badModal, bio, chartOnclick, chartToSvg, chartWrapperButtons, charts_donutchart, charts_gaugechart, charts_linechart, charts_linechart_stacked, charts_linked, charts_radarchart, ciexplorer, clientTypes, clientlist, cog, comShow, comstat, copyCSS, currentSources, dataTable, datepicker, datepickers, defaultOrgChanged, deleteNode, deletesource, doResetPass, donut, downloadBlob, explorer, fScreen, factors, fetch, fetchPhonebook, filterPerson, filterView, findWidget, forumexplorer, gauge, genColors, get, getResetToken, getSourceType, globArgs, hsl2rgb, imexplorer, inviteMember, isArray, isHash, issueexplorer, jsondump, keyValueForm, linechart, loadPageWidgets, logexplorer, login, mailexplorer, make5, makeClientType, makeOrg, manageviews, memberInvited, membershipList, messages, mk, modifyNode, multiviewexplorer, mvp, newview, nodeStatusSort, nodeVal, orgCreated, orgadmin, orglist, pageID, paragraph, patch, phonebook_cached, post, postPublishLink, preferences, pubWidget, publishWidget, publisher, publisherPublic, publisherWidget, put, pwReset, quickColors, radar, radarIndicators, rcollate, redirs, relationship, remail, remorguser, removeMember, renderAccountInfo, renderPhonebook, report, resetpw, rmview, rotateTable, rowZ, saveNodeValue, savedNodeValue, saveprefs, saveview, sendEmail, set, setDefaultOrg, setupPage, setupPhonebook, showClientType, showMore, showType, signout, signup, snap, sourceAdded, sourceTypes, sourceadd, sourceexplorer, sourcelist, sourceret, st, stackChart, subFilter, subFilterGlob, swi, switchChartType, tagList, theme, toFullscreen, toNormal, top5, treemap, trend, trendBox, txt, updateTimeseriesWidgets, updateWidgets, userAccount, validateLogin, validateSignup, viewJS, viewexplorer, widgetCache, widgetexplorer, worldmap, xdelete, xxCharts,
   indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
 
 signup = function(form) {
@@ -4695,6 +4695,24 @@
   return app(obj, txt(state[state.type]));
 };
 
+nodeStatusSort = (function(_this) {
+  return function(a, b) {
+    if (a.enabled && !b.enabled) {
+      return -1;
+    }
+    if (b.enabled && !a.enabled) {
+      return 1;
+    }
+    if (a.verified && !b.verified) {
+      return -1;
+    }
+    if (b.verified && !a.verified) {
+      return 1;
+    }
+    return a.hostname.localeCompare(b.hostname);
+  };
+})(this);
+
 clientlist = function(json, state) {
   var banner, btn, card, d, hn, len, line, lline, lp, q, retval, rline, slist, source, sources, vlist, vrf;
   slist = mk('div');
@@ -4702,11 +4720,7 @@
   if (json.nodes) {
     sources = json.nodes;
     sources = sources.sort ? sources : [];
-    sources.sort((function(_this) {
-      return function(a, b) {
-        return a.id - b.id;
-      };
-    })(this));
+    sources.sort(nodeStatusSort);
     for (q = 0, len = sources.length; q < len; q++) {
       source = sources[q];
       card = new HTML('div', {