diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
index d1431361f7b5afdd70a97e427027532271121389..8bd19b1fe48a8c79ff96d37c22c545b0b650cc76 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
@@ -5,6 +5,9 @@ import java.io.IOException;
 import java.util.List;
 import java.util.Properties;
 
+import net.i2p.app.ClientApp;
+import net.i2p.app.ClientAppManager;
+import net.i2p.app.ClientAppState;
 import net.i2p.apps.systray.UrlLauncher;
 import net.i2p.router.Router;
 import net.i2p.router.RouterContext;
@@ -191,6 +194,26 @@ public class ConfigServiceHandler extends FormHandler {
         return _context.router().gracefulShutdownInProgress();
     }
 
+    /**
+     *  Should we show the systray controls?
+     *
+     *  @since 0.9.26
+     */
+    public boolean shouldShowSystray() {
+        return !
+            (RouterConsoleRunner.DAEMON_USER.equals(System.getProperty("user.name")) ||
+             (SystemVersion.isWindows() && _context.hasWrapper() && WrapperManager.isLaunchedAsService()));
+    }
+
+    /**
+     *  Is the systray enabled?
+     *
+     *  @since 0.9.26
+     */
+    public boolean isSystrayEnabled() {
+        return _context.getBooleanProperty(RouterConsoleRunner.PROP_DTG_ENABLED);
+    }
+
     @Override
     protected void processForm() {
         if (_action == null) return;
@@ -249,6 +272,10 @@ public class ConfigServiceHandler extends FormHandler {
         } else if (_t("Force GC").equals(_action)) {
             Runtime.getRuntime().gc();
             addFormNotice(_t("Full garbage collection requested"));
+        } else if (_t("Show systray icon").equals(_action)) {
+            changeSystray(true);
+        } else if (_t("Hide systray icon").equals(_action)) {
+            changeSystray(false);
         } else {
             //addFormNotice("Blah blah blah.  whatever.  I'm not going to " + _action);
         }
@@ -292,4 +319,41 @@ public class ConfigServiceHandler extends FormHandler {
         }
         ClientAppConfig.writeClientAppConfig(_context, clients);
     }
+
+    /**
+     *  Enable/disable and start/stop systray
+     *
+     *  @since 0.9.26
+     */
+    private void changeSystray(boolean enable) {
+        ClientAppManager mgr = _context.clientAppManager();
+        if (mgr != null) {
+            try {
+                ClientApp dtg = mgr.getRegisteredApp("desktopgui");
+                if (dtg != null) {
+                    if (enable) {
+                        if (dtg.getState() == ClientAppState.STOPPED)
+                            dtg.startup();
+                    } else {
+                        if (dtg.getState() == ClientAppState.RUNNING)
+                            dtg.shutdown(null);
+                    }
+                } else if (enable) {
+                        dtg = new net.i2p.desktopgui.Main(_context, mgr, null);    
+                        dtg.startup();
+                }
+            } catch (Throwable t) {
+                if (enable)
+                    addFormError(_t("Failed to start systray") + ": " + t);
+                else
+                    addFormError(_t("Failed to stop systray") + ": " + t);
+            }
+        }
+
+        boolean saved = _context.router().saveConfig(RouterConsoleRunner.PROP_DTG_ENABLED, Boolean.toString(enable));
+        if (saved) 
+            addFormNotice(_t("Configuration saved successfully"));
+        else
+            addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs"));
+    }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
index ac97a2652a9edf2b3d716bf0924ec375937961d2..a88bbb86ab7ad7b9d809c267cd1c04fe30318644 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
@@ -131,7 +131,8 @@ public class RouterConsoleRunner implements RouterApp {
     private static final int MAX_THREADS = 24;
     private static final int MAX_IDLE_TIME = 90*1000;
     private static final String THREAD_NAME = "RouterConsole Jetty";
-    private final static String DAEMON_USER = "i2psvc";
+    public static final String DAEMON_USER = "i2psvc";
+    public static final String PROP_DTG_ENABLED = "desktopgui.enabled";
     
     /**
      *  <pre>
@@ -280,7 +281,7 @@ public class RouterConsoleRunner implements RouterApp {
         }
         try {
             // default false for now
-            boolean desktopguiEnabled = _context.getBooleanProperty("desktopgui.enabled");
+            boolean desktopguiEnabled = _context.getBooleanProperty(PROP_DTG_ENABLED);
             if (desktopguiEnabled) {
                 //Check if we are in a headless environment, set properties accordingly
           	System.setProperty("java.awt.headless", Boolean.toString(GraphicsEnvironment.isHeadless()));
diff --git a/apps/routerconsole/jsp/configservice.jsp b/apps/routerconsole/jsp/configservice.jsp
index 987aefdeba952b19f004ac2ff21a4db3a7d3bcee..b3a21a7d7da7c4be6496baf3258a8ade08ba6be7 100644
--- a/apps/routerconsole/jsp/configservice.jsp
+++ b/apps/routerconsole/jsp/configservice.jsp
@@ -39,25 +39,30 @@
  <input type="submit" class="reload" name="action" value="<%=intl._t("Hard restart")%>" >
  <% } %></div>
 
- <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
+<% if (formhandler.shouldShowSystray()) { %>
  <h3><%=intl._t("Systray integration")%></h3>
- <p><%=intl._t("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%> 
-    <%=intl._t("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%> 
-    <%=intl._t("If you are on windows, you can either enable or disable that icon here.")%></p>
+ <p><%=intl._t("Control the system tray icon")%> 
  <hr><div class="formaction">
- <input type="submit" name="action" value="<%=intl._t("Show systray icon")%>" >
- <input type="submit" name="action" value="<%=intl._t("Hide systray icon")%>" >
+<% if (!formhandler.isSystrayEnabled()) { %>
+ <input type="submit" name="action" class="accept" value="<%=intl._t("Show systray icon")%>" >
+<% } else {%>
+ <input type="submit" name="action" class="cancel" value="<%=intl._t("Hide systray icon")%>" >
+<% } %>
  </div>
+<%
+   }  
+   if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
+%>
  <h3><%=intl._t("Run on startup")%></h3>
  <p><%=intl._t("You can control whether I2P is run on startup or not by selecting one of the following options - I2P will install (or remove) a service accordingly.")%> 
     <%=intl._t("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._t("or")%>
  <code>uninstall_i2p_service_winnt.bat</code>).</p>
  <hr><div class="formaction">
- <input type="submit" name="action" value="<%=intl._t("Run I2P on startup")%>" >
-<input type="submit" name="action" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
+ <input type="submit" name="action" class="accept" value="<%=intl._t("Run I2P on startup")%>" >
+<input type="submit" name="action" class="cancel" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
  <p><b><%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%> 
     <%=intl._t("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p>
- <% } %>
+<% } %>
 
  <h3><%=intl._t("Debugging")%></h3>
  <p><a href="/jobs"><%=intl._t("View the job queue")%></a>