diff --git a/apps/desktopgui/src/net/i2p/desktopgui/Main.java b/apps/desktopgui/src/net/i2p/desktopgui/Main.java
index 03aa216b6ec2b693c8908b7e7679f9aee7d26747..8cd1ea707d0c980b24d2bc345839ecac2002e92e 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/Main.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/Main.java
@@ -55,19 +55,14 @@ public class Main {
      * Main method launching the application.
      */
     public static void beginStartup(String[] args) {
-        boolean wasHeadless = Boolean.valueOf(System.getProperty("java.awt.headless")).booleanValue();
-        if(wasHeadless) {
-            System.setProperty("java.awt.headless", "false");
-        }
-        boolean headless_check = true;
         try {
-            // X permissions error is a java.lang.InternalError (a Throwable)
-            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
-            headless_check = ge.isHeadlessInstance();
-        } catch (Throwable t) {}
-        if (wasHeadless)
-            System.setProperty("java.awt.headless", "true");
-        if (headless_check) {
+            String headless = RouterManager.getRouterContext().getProperty("router.isHeadless");
+            boolean isHeadless = Boolean.parseBoolean(headless);
+            if(isHeadless) {
+                return;
+            }
+        }
+        catch(Exception e) {
             return;
         }
         try {
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 ada49d0aa737bd4ccbf3a9fd4a4a472d74332ebb..9f280ef2af47371f4fcb3f4b37d2500f2229e1b7 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
@@ -1,6 +1,7 @@
 package net.i2p.router.web;
 
 import java.util.ArrayList;
+import java.awt.GraphicsEnvironment;
 import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
@@ -54,10 +55,51 @@ public class RouterConsoleRunner {
     private static final String DEFAULT_WEBAPPS_DIR = "./webapps/";
     private static final String USAGE = "Bad RouterConsoleRunner arguments, check clientApp.0.args in your clients.config file! " +
                                         "Usage: [[port host[,host]] [-s sslPort [host[,host]]] [webAppsDir]]";
+    private static final String PROP_HEADLESS = "router.isHeadless";
     
     static {
         System.setProperty("org.mortbay.http.Version.paranoid", "true");
-        System.setProperty("java.awt.headless", "true");
+        
+        //Check if we are in a headless environment, set properties accordingly
+        List<RouterContext> contexts = RouterContext.listContexts();
+        if(contexts != null && contexts.size() > 0) {
+        	RouterContext context = contexts.get(0);
+        	String headless = context.getProperty(PROP_HEADLESS);
+        	if(headless == null) {
+        		/*
+        		 * Let's check if we are in a headless environment.
+        		 * We do this by setting headless to false
+        		 * and trying to get the graphics environment.
+        		 * If this fails, we should be headless.
+        		 */
+        		System.setProperty("java.awt.headless", "false");
+        		try {
+	                GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+	                ge.isHeadlessInstance();
+	                context.setProperty(PROP_HEADLESS, "false");
+        		}
+        		catch(InternalError e) {
+        			context.setProperty(PROP_HEADLESS, "true");
+        		}
+        		context.router().setConfigSetting(PROP_HEADLESS, context.getProperty(PROP_HEADLESS));
+                context.router().saveConfig();
+                context.router().shutdown(0);
+        	}
+        	boolean isHeadless = true;
+        	try {
+        		isHeadless = Boolean.parseBoolean(headless);
+        	}
+        	catch(Exception e) {
+        		//Incorrect setting, let's choose headless for safety
+        		isHeadless = true;
+        	}
+        	if(isHeadless) {
+        		System.setProperty("java.awt.headless", "true");
+        	}
+        	else {
+        		System.setProperty("java.awt.headless", "false");
+        	}
+        }
     }
     
     /**
diff --git a/build.xml b/build.xml
index 20616d1c2a00a9d8d8cb2ee1454db1beafa93632..f2413e09015bfff2b88221489a4fd58253ec8e46 100644
--- a/build.xml
+++ b/build.xml
@@ -97,6 +97,7 @@
     </target>
 
     <target name="buildDesktopGui" depends="buildCore, buildrouter" >
+        <ant dir="apps/desktopgui" target="clean" />
         <ant dir="apps/desktopgui" target="jar" />
     </target>
 
diff --git a/history.txt b/history.txt
index ce552f5a937a952d585196502c47984dfab67a98..415d544e8026060f9bcb19bfa1ba8f33010e3d4a 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,7 @@
+2011-02-11 Mathiasdm
+    * routerconsole: fixed graphs using jrobin; and headless issue
+          in general: no more switches between headless and non-headless.
+
 2011-02-11 sponge
     * I2PTunnel: fix NPE in I2PTunnelConnectClient