diff --git a/apps/desktopgui/TODO b/apps/desktopgui/TODO
index 1a62d77222521687a09c5ad984cdae94f2d3a2a7..c05b8dcd8ad210120c449b4ff57489ae3c30b493 100644
--- a/apps/desktopgui/TODO
+++ b/apps/desktopgui/TODO
@@ -15,7 +15,31 @@ HIGH PRIORITY:
   * One possibility:
         Adding some kind of 'ApplicationManager' that allows starting applications.
         Extra remark: ApplicationManager should also allow stopping certain applications from launching.
+        Suggestion:
+            * ApplicationManager reads/writes clients.config
+            * ApplicationManager itself: independent from clients.config?
+            * Upon reboot, ApplicationManager could add a new application to clients.config _if_ the 'application.manager.version' is not there, or is smaller than the current version.
+            * ApplicationManager can be the clients.config backend for routerconsole, so routerconsole is not the dependency.
+            * API:
+                - addConfig(args, name, ...)
+                - removeConfig(int)
+                - removeConfig(ConfigFilter)
+                    ConfigFilter() {
+                        boolean filterArgs(String args);
+                        boolean filterMain(String main);
+                        ...
+                    }
+                - editConfig(args, name, ..., ConfigFilter)
+                - editConfig(args, name, ..., int)
+                - editConfigArgs(args, ConfigFilter)
+                - editConfigArgs(args, int)
+                - ...
+ * For now: added in the routerconsole startup (like the old SysTray. - DONE
+    Possible migration path: startup ApplicationManager in routerconsole the first time.
+- Check bug: restart is happening instead of shutdown!
+- Check build order (for example: first desktopgui, only later routerconsole)
 - Fix tabs versus spaces ;-)
+- Add check for Java version 6 in RouterConsoleRunner!
 UNKNOWN:
 - API to allow applications to add themselves to the menu?
     * registerApplication(); -- should return a positive number on success, -1 on failure
diff --git a/apps/desktopgui/locale/messages_nl.po b/apps/desktopgui/locale/messages_nl.po
index f994059d219277d3fd13858fc2b039ea014d0f87..433eb604b0673c12a73aa5b9d194a7cd87370bfa 100644
--- a/apps/desktopgui/locale/messages_nl.po
+++ b/apps/desktopgui/locale/messages_nl.po
@@ -1,31 +1,29 @@
-#: src/net/i2p/desktopgui/TrayManager.java:73
-msgid "Launch I2P Browser"
-msgstr "Start I2P Browser"
-
-#: src/net/i2p/desktopgui/TrayManager.java:99
-msgid "Browser not found"
-msgstr "Browser niet gevonden"
-
-#: src/net/i2p/desktopgui/TrayManager.java:100
-msgid "The default browser for your system was not found."
-msgstr "De standaard webbrowser voor je systeem werd niet gevonden."
-
-#: src/net/i2p/desktopgui/TrayManager.java:111
+#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
 msgid "Start I2P"
 msgstr "I2P starten"
 
-#: src/net/i2p/desktopgui/TrayManager.java:126
+#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
 msgid "I2P is starting!"
 msgstr "I2P is aan het starten!"
 
-#: src/net/i2p/desktopgui/TrayManager.java:126
+#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
 msgid "Starting"
 msgstr "Bezig met starten"
 
-#: src/net/i2p/desktopgui/TrayManager.java:140
+#: src/net/i2p/desktopgui/InternalTrayManager.java:25
+msgid "Launch I2P Browser"
+msgstr "Start I2P Browser"
+
+#: src/net/i2p/desktopgui/InternalTrayManager.java:49
 msgid "Restart I2P"
 msgstr "I2P herstarten"
 
-#: src/net/i2p/desktopgui/TrayManager.java:161
+#: src/net/i2p/desktopgui/InternalTrayManager.java:67
 msgid "Stop I2P"
 msgstr "I2P stoppen"
+
+#~ msgid "Browser not found"
+#~ msgstr "Browser niet gevonden"
+
+#~ msgid "The default browser for your system was not found."
+#~ msgstr "De standaard webbrowser voor je systeem werd niet gevonden."
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/Main.java b/apps/desktopgui/src/net/i2p/desktopgui/Main.java
index 7bed90e3a65fbfd8dbb058adddc5c69aa79bc3fa..0783936ac25a47b0440f89e113b1617678b94a65 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/Main.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/Main.java
@@ -28,7 +28,7 @@ public class Main {
 	 * Start the tray icon code (loads tray icon in the tray area).
 	 * @throws Exception 
 	 */
-    private void startUp() throws Exception {
+    public void startUp() throws Exception {
         trayManager = TrayManager.getInstance();
         trayManager.startManager();
         
@@ -45,11 +45,15 @@ public class Main {
             });
         }
     }
+    
+    public static void main(String[] args) {
+    	beginStartup(args);
+    }
 
     /**
      * Main method launching the application.
      */
-    public static void main(String[] args) {
+    public static void beginStartup(String[] args) {
     	System.setProperty("java.awt.headless", "false");
         try {
             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml
index d544e59aca580f961ad5bbf2d8d24d570bba654b..e1904d3fb1e6d9cfa2d39fa30608e16367be7e9e 100644
--- a/apps/routerconsole/java/build.xml
+++ b/apps/routerconsole/java/build.xml
@@ -24,6 +24,7 @@
                 <pathelement location="../../jetty/jettylib/javax.servlet.jar" />
                 <pathelement location="../../systray/java/build/obj" />
                 <pathelement location="../../systray/java/lib/systray4j.jar" />
+                <pathelement location="../../desktopgui/build" />
                 <pathelement location="../../../installer/lib/wrapper/win32/wrapper.jar" /> <!-- we dont care if we're not on win32 -->
                 <pathelement location="../../jrobin/jrobin-1.4.0.jar" />
             </classpath>
@@ -54,6 +55,7 @@
                 <pathelement location="../../jetty/jettylib/javax.servlet.jar" />
                 <pathelement location="../../systray/java/build/systray.jar" />
                 <pathelement location="../../systray/java/lib/systray4j.jar" />
+                <pathelement location="../../desktopgui/dist/desktopgui.jar" />
                 <pathelement location="../../../installer/lib/wrapper/win32/wrapper.jar" /> <!-- we dont care if we're not on win32 -->
                 <pathelement location="../../jrobin/jrobin-1.4.0.jar" />
             </classpath>
@@ -161,6 +163,7 @@
                 <pathelement location="../../jetty/jettylib/ant.jar" />
                 <pathelement location="../../systray/java/build/obj" />
                 <pathelement location="../../systray/java/lib/systray4j.jar" />
+                <pathelement location="../../desktopgui/dist/desktopgui.jar" />
                 <pathelement location="../../../installer/lib/wrapper/win32/wrapper.jar" />
                 <pathelement location="build/routerconsole.jar" />
                 <pathelement location="build/" />
@@ -191,6 +194,7 @@
                 <pathelement location="../../jetty/jettylib/org.mortbay.jetty.jar" />
                 <pathelement location="../../systray/java/build/obj" />
                 <pathelement location="../../systray/java/lib/systray4j.jar" />
+                <pathelement location="../../desktopgui/dist/desktopgui.jar" />
                 <pathelement location="../../../installer/lib/wrapper/win32/wrapper.jar" />
                 <pathelement location="build/routerconsole.jar" />
                 <pathelement location="build" />
@@ -220,7 +224,7 @@
         <mkdir dir="./build" />
         <mkdir dir="./build/javadoc" />
         <javadoc 
-            sourcepath="./src:../../../core/java/src:../../../router/java/src:../../systray/java/src" destdir="./build/javadoc" 
+            sourcepath="./src:../../../core/java/src:../../../router/java/src:../../systray/java/src:../../desktopgui/src" destdir="./build/javadoc" 
             packagenames="*" 
             use="true" 
             splitindex="true" 
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 ce4dc8863d6e3f80526488bc3aa2b55b7a45e591..7b1d7bc629be1ed2a2405bfedacb94010b44285a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
@@ -88,30 +88,6 @@ public class ConfigServiceHandler extends FormHandler {
                 addFormError("Warning: unable to contact the service manager - " + t.getMessage());
             }
             addFormNotice("Threads dumped to wrapper.log");
-        } else if (_("Show systray icon").equals(_action)) {
-            try {
-                SysTray tray = SysTray.getInstance();
-                if (tray != null) {
-                    tray.show();
-                    addFormNotice(_("System tray icon enabled."));
-                } else {
-                    addFormNotice(_("System tray icon feature not supported on this platform. Sorry!"));
-                }
-            } catch (Throwable t) {
-                addFormError(_("Warning: unable to contact the systray manager") + " - " + t.getMessage());
-            }
-        } else if (_("Hide systray icon").equals(_action)) {
-            try {
-                SysTray tray = SysTray.getInstance();
-                if (tray != null) {
-                    tray.hide();
-                    addFormNotice(_("System tray icon disabled."));
-                } else {
-                    addFormNotice(_("System tray icon feature not supported on this platform. Sorry!"));
-                }
-            } catch (Throwable t) {
-                addFormError(_("Warning: unable to contact the systray manager") + " - " + t.getMessage());
-            }
         } else if (_("View console on startup").equals(_action)) {
             browseOnStartup(true);
             addFormNotice(_("Console is to be shown on startup"));
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 d3b6ecc29fde763994072b39c2bf0358fe2eaf89..8adf1da5c6c70ade75e148790eab1166a610dc35 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
@@ -10,7 +10,7 @@ import java.util.Properties;
 import java.util.StringTokenizer;
 
 import net.i2p.I2PAppContext;
-import net.i2p.apps.systray.SysTray;
+import net.i2p.desktopgui.Main;
 import net.i2p.data.Base32;
 import net.i2p.data.DataHelper;
 import net.i2p.router.RouterContext;
@@ -301,7 +301,10 @@ public class RouterConsoleRunner {
         }
 
         try {
-            SysTray tray = SysTray.getInstance();
+        	//TODO: move away from routerconsole into a separate application.
+        	//ApplicationManager?
+            String[] args = new String[0];
+            net.i2p.desktopgui.Main.beginStartup(args);
         } catch (Throwable t) {
             t.printStackTrace();
         }
diff --git a/apps/routerconsole/jsp/configservice.jsp b/apps/routerconsole/jsp/configservice.jsp
index f87479a92feca0339b59a678b3c5d8f18f178ab4..cfbd4ece12739e01ef075c48777a1f7970257457 100644
--- a/apps/routerconsole/jsp/configservice.jsp
+++ b/apps/routerconsole/jsp/configservice.jsp
@@ -42,14 +42,7 @@
  <% } %></div>
 
  <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
- <h3><%=intl._("Systray integration")%></h3>
- <p><%=intl._("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%> 
-    <%=intl._("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%> 
-    <%=intl._("If you are on windows, you can either enable or disable that icon here.")%></p>
- <hr><div class="formaction">
- <input type="submit" name="action" value="<%=intl._("Show systray icon")%>" >
- <input type="submit" name="action" value="<%=intl._("Hide systray icon")%>" >
-</div><h3><%=intl._("Run on startup")%></h3>
+ <h3><%=intl._("Run on startup")%></h3>
  <p><%=intl._("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._("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._("or")%>
  <code>uninstall_i2p_service_winnt.bat</code>).</p>
diff --git a/build.xml b/build.xml
index 98fec26e7b6bee22a72e0d8b690086bb455ab7b5..8f42915773d05eaa51a9f115d7b84774893a9758 100644
--- a/build.xml
+++ b/build.xml
@@ -61,7 +61,7 @@
 
     <target name="builddep" depends="builddepSmall, buildBOB, buildSAM, buildSusiMail, buildSusiDNS, buildI2PSnark" />
 
-    <target name="builddepSmall" depends="buildrouter, buildSystray, buildRouterConsole, buildStreaming, buildI2PTunnel, buildAddressbook" />
+    <target name="builddepSmall" depends="buildrouter, buildSystray, buildDesktopGui, buildRouterConsole, buildStreaming, buildI2PTunnel, buildAddressbook" />
 
     <!-- start of buildX, one for each sub-build.xml.
          Do not put ant tasks in the sub-build.xmls anymore,
@@ -97,7 +97,11 @@
         <ant dir="apps/i2ptunnel/java/" target="build" />
     </target>
 
-    <target name="buildRouterConsole" depends="buildrouter, buildSystray, buildJetty" >
+    <target name="buildDesktopGui" depends="buildCore, buildrouter" >
+        <ant dir="apps/desktopgui" target="jar" />
+    </target>
+
+    <target name="buildRouterConsole" depends="buildrouter, buildSystray, buildDesktopGui, buildJetty" >
         <ant dir="apps/routerconsole/java/" target="jar" />
     </target>
 
@@ -165,7 +169,7 @@
         <jar destfile="./build/launchi2p.jar">
             <manifest>
 	     <attribute name="Main-Class" value="net.i2p.router.RouterLaunch" />
-	     <attribute name="Class-Path" value="lib/i2p.jar lib/router.jar lib/jbigi.jar lib/BOB.jar lib/sam.jar lib/mstreaming.jar lib/streaming.jar lib/routerconsole.jar lib/i2ptunnel.jar lib/org.mortbay.jetty.jar lib/javax.servlet.jar lib/jasper-compiler.jar lib/jasper-runtime.jar lib/commons-logging.jar lib/commons-el.jar lib/wrapper.jar lib/systray.jar lib/systray4j.jar" />
+	     <attribute name="Class-Path" value="lib/i2p.jar lib/router.jar lib/jbigi.jar lib/BOB.jar lib/sam.jar lib/mstreaming.jar lib/streaming.jar lib/routerconsole.jar lib/i2ptunnel.jar lib/org.mortbay.jetty.jar lib/javax.servlet.jar lib/jasper-compiler.jar lib/jasper-runtime.jar lib/commons-logging.jar lib/commons-el.jar lib/wrapper.jar lib/systray.jar lib/systray4j.jar lib/desktopgui.jar" />
 	    </manifest>
         </jar>
 	<!-- now the standalone launcher exe -->
@@ -192,6 +196,7 @@
         <copy file="apps/i2ptunnel/java/build/i2ptunnel.jar" todir="build/" />
         <copy file="apps/i2ptunnel/java/build/i2ptunnel.war" todir="build/" />
         <copy file="apps/systray/java/build/systray.jar" todir="build/" />
+        <copy file="apps/desktopgui/dist/desktopgui.jar" todir="build/" />
         <copy file="installer/lib/jbigi/jbigi.jar" todir="build" />
         <copy file="apps/addressbook/dist/addressbook.war" todir="build/" />
     </target>
@@ -201,6 +206,7 @@
         <ant dir="apps/i2psnark/java/" target="poupdate" />
         <ant dir="apps/i2ptunnel/java/" target="poupdate" />
         <ant dir="apps/susidns/src/" target="poupdate" />
+        <ant dir="apps/desktopgui" target="poupdate" />
     </target>
     <target name="javadoc">
         <ant dir="apps/jetty" target="ensureJettylib" />
@@ -246,6 +252,7 @@
             <group title="SusiDNS Application" packages="i2p.susi.dns" />
             <group title="SusiMail Application" packages="i2p.susi.webmail:i2p.susi.webmail.*:i2p.susi.debug:i2p.susi.util" />
             <group title="Systray Application" packages="net.i2p.apps.systray" />
+            <group title="Desktopgui Application" packages="net.i2p.desktopgui.*" />
             <sourcepath>
                 <pathelement location="core/java/src" />
                 <!--<pathelement location="core/java/test" />-->
@@ -255,6 +262,7 @@
                 <pathelement location="apps/streaming/java/src" />
                 <pathelement location="apps/i2ptunnel/java/src" />
                 <pathelement location="apps/systray/java/src" />
+                <pathelement location="apps/desktopgui/src" />
                 <pathelement location="apps/routerconsole/java/src" />
                 <pathelement location="apps/addressbook/java/src" />
                 <pathelement location="apps/i2psnark/java/src" />
@@ -301,6 +309,7 @@
         <ant dir="apps/i2ptunnel/java/" target="distclean" />
         <ant dir="apps/sam/java/" target="distclean" />
         <ant dir="apps/BOB" target="clean" />
+        <ant dir="apps/desktopgui" target="clean" />
         <ant dir="apps/routerconsole/java/" target="distclean" />
         <ant dir="apps/addressbook/" target="distclean" />
         <ant dir="apps/susimail/" target="distclean" />
@@ -432,6 +441,7 @@
         <copy file="build/streaming.jar" todir="pkg-temp/lib/" />
         <copy file="build/org.mortbay.jetty.jar" todir="pkg-temp/lib/" />
         <copy file="build/router.jar" todir="pkg-temp/lib/" />
+        <copy file="build/desktopgui.jar" todir="pkg-temp/lib/" />
         <copy file="build/routerconsole.jar" todir="pkg-temp/lib/" />
         <!-- pulled out of routerconsole.jar in 0.7.12; name without version so we can overwrite if we upgrade  -->
         <copy file="apps/jrobin/jrobin-1.4.0.jar" tofile="pkg-temp/lib/jrobin.jar" />
@@ -602,6 +612,7 @@
         <copy file="build/i2psnark.jar" todir="pkg-temp/lib" />
         <!-- include systray changes in 0.7.5 -->
         <copy file="build/systray.jar" todir="pkg-temp/lib/" />
+        <copy file="build/desktopgui.jar" todir="pkg-temp/lib/" />
         <copy file="build/susimail.war" todir="pkg-temp/webapps/" />
         <copy file="build/susidns.war" todir="pkg-temp/webapps/" />
         <!-- as of 0.7.12; someday, we can remove these from the updater -->
@@ -733,10 +744,6 @@
 		<ant dir="core/java/" target="fullclovertest" />
 		<ant dir="router/java/" target="fullclovertest" />
     </target>
-    <target name="desktopgui" depends="builddepSmall">
-        <ant dir="apps/desktopgui" target="jar" />
-        <copy file="apps/desktopgui/dist/desktopgui.jar" todir="." />
-    </target>
     <target name="syndie" >
         <ant dir="apps/syndie/java/" target="standalone" />
         <copy file="apps/syndie/java/syndie-standalone.zip" todir="." />
@@ -780,6 +787,7 @@
             <arg value="build/jbigi.jar"/>
             <arg value="build/mstreaming.jar"/>
             <arg value="build/router.jar/"/>
+            <arg value="build/desktopgui.jar"/>
             <arg value="build/routerconsole.jar"/>
             <arg value="build/routerconsole.war"/>
             <arg value="build/sam.jar"/>