diff --git a/daemon/HTTPServer.cpp b/daemon/HTTPServer.cpp
index 4bfb2763..5601930f 100644
--- a/daemon/HTTPServer.cpp
+++ b/daemon/HTTPServer.cpp
@@ -374,7 +374,8 @@ namespace http {
 		time_t t = divTime.quot;
 		struct tm *tm = localtime(&t);
 		char date[128];
-		snprintf(date, sizeof(date), "%02d/%02d/%d %02d:%02d:%02d.%03lld", tm->tm_mday, tm->tm_mon + 1, tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec, divTime.rem);
+		snprintf(date, sizeof(date), "%02d/%02d/%d %02d:%02d:%02d.%03lld",
+			tm->tm_mday, tm->tm_mon + 1, tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec, divTime.rem);
 		return date;
 	}
 
@@ -580,7 +581,6 @@ namespace http {
 
 	void ShowStatus (std::stringstream& s, bool includeHiddenContent, i2p::http::OutputFormatEnum outputFormat)
 	{
-		s << "<tr id=\"version\"><td>" << tr("Version") << "</td><td>" VERSION "</td></tr>\r\n";
 		s << "<tr><td>" << tr("Uptime") << "</td><td>";
 		ShowUptime(s, i2p::context.GetUptime ());
 		s << "</td></tr>\r\n";
@@ -664,50 +664,6 @@ namespace http {
 		}
 		s << "<tr><td>" << tr("Build Success") << "</td><td>";
 		s << i2p::tunnel::tunnels.GetTunnelCreationSuccessRate () << "%</td></tr>\r\n";
-// TODO: Move to separate routerinfo page
-/*
-		s << "<tr><td>" << tr("Router Caps") << "</td><td>" << i2p::context.GetRouterInfo().GetProperty("caps") << "</td></tr>\r\n";
-		s << "<tr><td>" << tr("Data path") << "</td><td><span class=\"sensitive\">" << i2p::fs::GetUTF8DataDir() << "</span></td></tr>\r\n";
-		s << "<tr><td>" << tr("Router Ident") << "</td><td><span class=\"sensitive\" hidden>" << i2p::context.GetRouterInfo().GetIdentHashBase64() << "</span></td></tr>\r\n";
-		auto family = i2p::context.GetFamily ();
-		if (family.length () > 0)
-			s << "<tr><td>"<< tr("Family") << "</td><td>" << family << "<br>\r\n";
-		if (!i2p::context.GetRouterInfo().GetProperty("family").empty())
-			s << "<tr><td>" << tr("Router Family") << "</td><td><span class=\"sensitive\" hidden>" << i2p::context.GetRouterInfo().GetProperty("family") << "</span></td></tr>\r\n";
-		for (const auto& address : i2p::context.GetRouterInfo().GetAddresses())
-		{
-			s << "<tr>\r\n";
-			if (address->IsNTCP2 () && !address->IsPublishedNTCP2 ())
-			{
-				s << "<td>NTCP2";
-				if (address->host.is_v6 ()) s << "v6";
-				s << "</td><td><span class=\"enabled\">" << tr("supported") << "</span></td>\r\n</tr>\r\n";
-				continue;
-			}
-			switch (address->transportStyle)
-			{
-				case i2p::data::RouterInfo::eTransportNTCP:
-				{
-					s << "<td>NTCP";
-					if (address->IsPublishedNTCP2 ()) s << "2";
-					if (address->host.is_v6 ()) s << "v6";
-					s << "</td>\r\n";
-					break;
-				}
-				case i2p::data::RouterInfo::eTransportSSU:
-				{
-					s << "<td>SSU";
-					if (address->host.is_v6 ())
-						s << "v6";
-					s << "</td>\r\n";
-					break;
-				}
-				default:
-					s << "<td>" << tr("Unknown") << "</td>\r\n";
-			}
-			s << "<td><span class=\"sensitive\" hidden>" << address->host.to_string() << ":" << address->port << "</span></td>\r\n</tr>\r\n";
-		}
-*/
 		s << "<tr><td>" << tr("Routers") << "</td><td>" << i2p::data::netdb.GetNumRouters () << "</td></tr>\r\n";
 		s << "<tr><td>" << tr("Floodfills") << "</td><td>" << i2p::data::netdb.GetNumFloodfills () << "</td></tr>\r\n";
 		s << "<tr><td>" << tr("LeaseSets") << "</td><td>" << i2p::data::netdb.GetNumLeaseSets () << "</td></tr>\r\n";
@@ -731,7 +687,7 @@ namespace http {
 			bool i2cp       = i2p::client::context.GetI2CPServer ()        ? true : false;
 			bool i2pcontrol;  i2p::config::GetOption("i2pcontrol.enabled", i2pcontrol);
 			if (httpproxy || socksproxy || bob || sam || i2cp || i2pcontrol) {
-				s << "<tr><th colspan=\"2\">" << tr("Active Router Services") << "</th></tr>\r\n";
+				s << "<tr><th class=\"sectiontitle configuration\" colspan=\"2\"><span>" << tr("Router Services") << "</span></th></tr>";
 				s << "<tr><td id=\"routerservices\" class=\"center\" colspan=\"2\">";
 				if (httpproxy)
 					s << " <span class=\"routerservice\">HTTP " << tr("Proxy") << "</span> ";
@@ -1141,8 +1097,54 @@ namespace http {
 
 	static void ShowCommands (std::stringstream& s, uint32_t token)
 	{
-		std::string webroot; i2p::config::GetOption("http.webroot", webroot);
+		s << "<tr><th class=\"sectiontitle configuration\" colspan=\"2\"><span>" << tr("Router Configuration") << "</span></th></tr>";
+		s << "<tr id=\"version\"><td>" << tr("Version") << "</td><td>" VERSION "</td></tr>\r\n";
+		s << "<tr><td>" << tr("Router Ident") << "</td><td><span class=\"sensitive\" hidden>"
+		  << i2p::context.GetRouterInfo().GetIdentHashBase64() << "</span></td></tr>\r\n";
+		s << "<tr><td>" << tr("Router Caps") << "</td><td>" << i2p::context.GetRouterInfo().GetProperty("caps") << "</td></tr>\r\n";
+		if (!i2p::context.GetRouterInfo().GetProperty("family").empty())
+			s << "<tr><td>" << tr("Router Family") << "</td><td><span class=\"sensitive\" hidden>"
+			  << i2p::context.GetRouterInfo().GetProperty("family") << "</span></td></tr>\r\n";
+		auto family = i2p::context.GetFamily ();
+		if (family.length () > 0)
+			s << "<tr><td>"<< tr("Family") << "</td><td>" << family << "<br>\r\n";
+		for (const auto& address : i2p::context.GetRouterInfo().GetAddresses())
+		{
+			s << "<tr>\r\n";
+			if (address->IsNTCP2 () && !address->IsPublishedNTCP2 ())
+			{
+				s << "<td>NTCP2";
+				if (address->host.is_v6 ()) s << "v6";
+				s << "</td><td><span class=\"enabled\">" << tr("supported") << "</span></td>\r\n</tr>\r\n";
+				continue;
+			}
+			switch (address->transportStyle)
+			{
+				case i2p::data::RouterInfo::eTransportNTCP:
+				{
+					s << "<td>NTCP";
+					if (address->IsPublishedNTCP2 ()) s << "2";
+					if (address->host.is_v6 ()) s << "v6";
+					s << "</td>\r\n";
+					break;
+				}
+				case i2p::data::RouterInfo::eTransportSSU:
+				{
+					s << "<td>SSU";
+					if (address->host.is_v6 ())
+						s << "v6";
+					s << "</td>\r\n";
+					break;
+				}
+				default:
+					s << "<td>" << tr("Unknown") << "</td>\r\n";
+			}
+			s << "<td><span class=\"sensitive\" hidden>" << address->host.to_string() << ":" << address->port << "</span></td>\r\n</tr>\r\n";
+		}
+		s << "<tr><td>" << tr("Data path") << "</td><td><span class=\"sensitive\">" << i2p::fs::GetUTF8DataDir() << "</span></td></tr>\r\n";
 
+
+		std::string webroot; i2p::config::GetOption("http.webroot", webroot);
 		s << "<tr><th class=\"sectiontitle\" colspan=\"2\"><span>" << tr("Router Commands") << "</span></th></tr>"
 		  << "<tr class=\"chrome\"><td class=\"center\" colspan=\"2\">\r\n";
 		s << "  <a id=\"homelink\" href=\"" << webroot << "?cmd="
@@ -1183,14 +1185,16 @@ namespace http {
 			s << "  <a href=\"" << webroot << "?cmd="
 			  << HTTP_COMMAND_SHUTDOWN_NOW << "&token=" << token << "\">"
 			  << tr("Force shutdown") << "</a></td></tr>\r\n";
-			}
-/* only one option? displayed in the header
+/* TODO graceful shutdown button in header with .notify dialog if transit tunnels
+   active to offer option to shutdown immediately
+   only one option? displayed in the header
+*/
 		} else {
 			s << "  <a href=\"" << webroot << "?cmd="
 			  << HTTP_COMMAND_SHUTDOWN_NOW << "&token="
 			  << token << "\">" << tr("Shutdown") << "</a></td></tr>\r\n";
 		}
-*/
+
 		std::string styleFile = i2p::fs::DataDirPath ("webconsole/style.css");
 		if (i2p::fs::Exists(styleFile)) {
 		s << "<tr class=\"chrome\"><td class=\"center\" colspan=\"2\"><a href=\"" << webroot << "?cmd="
diff --git a/webconsole/style.css b/webconsole/style.css
index e17dcd26..79dc255b 100644
--- a/webconsole/style.css
+++ b/webconsole/style.css
@@ -126,6 +126,7 @@ a, label, button, #navlinks, .sectiontitle span, .chrome  {
 	font-size: 0;
 	background: var(--shutdown) no-repeat center center / 24px;
 	mix-blend-mode: luminosity;
+	display: none; /* while inactive */
 }
 
 #enabletransit, #disabletransit {
@@ -413,11 +414,11 @@ tr {
 	border-bottom: 1px solid var(--border);
 }
 
-tr#version, tr#version ~ tr:nth-child(odd), tr.chrome, .listitem:nth-child(odd) {
+tr#version, tr#version ~ tr:nth-child(odd), tr.chrome, .listitem:nth-child(odd), tr:not(.chrome):nth-child(odd) {
 	background: linear-gradient(to bottom, rgba(16,0,16,.5), rgba(8,0,8,.5));
 }
 
-tr#version ~ tr:nth-child(even), .listitem:nth-child(even) {
+tr#version ~ tr:nth-child(even), .listitem:nth-child(even), tr:not(.chrome):nth-child(even) {
 	background: linear-gradient(to bottom, rgba(32,0,32,.5), rgba(24,0,24,.5));
 }
 
@@ -425,6 +426,10 @@ tr tr, /*tr#version, tr#version ~ tr:nth-child(odd),*/ .tableitem tr:nth-child(o
 	background: var(--tr-inner) !important;
 }
 
+tr.chrome {
+	background: linear-gradient(to bottom, rgba(16,0,16,.5), rgba(8,0,8,.5)) !important;
+}
+
 .tableitem tr:nth-child(even) {
 	background: var(--tr) !important;
 }
@@ -567,6 +572,10 @@ td:last-child {
 	white-space: nowrap;
 }
 
+.sectiontitle.configuration ~ tr td.thin {
+	width: 13% !important;
+}
+
 #navlinks {
 	padding: 10px 2px !important;
 	font-size: 100%;
@@ -599,7 +608,14 @@ td:last-child {
 	background: var(--no) no-repeat left 12px center / 10px;
 }
 
-.sensitive {
+#main .enabled.fixedsize {
+	margin-top: -5px;
+	width: 14px;
+	height: 14px;
+	background: var(--yes) no-repeat center center / 14px;
+}
+
+/*.sensitive {
 	filter: blur(8px);
 	display: inline-block !important;
 	max-width: 120px;
@@ -615,6 +631,10 @@ td:last-child {
 	white-space: pre-wrap;
 	word-break: break-all;
 	filter: blur(0);
+}*/
+
+.sensitive {
+	display: inline-block;
 }
 
 .arrowright, .arrowleft, .arrowleftright, .arrowup, .arrowdown {