diff --git a/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java b/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
index 93729cad105bba0ee8d9b32b580ba199a6a35978..883184ee116c0ad48e443aacc205769fe3f8fe02 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
@@ -40,11 +40,10 @@ import net.i2p.data.DataHelper;
 import net.i2p.data.Destination;
 import net.i2p.util.SecureFileOutputStream;
 
-public class AddressbookBean
+public class AddressbookBean extends BaseBean
 {
 	protected String book, action, serial, lastSerial, filter, search, hostname, destination;
 	protected int beginIndex, endIndex;
-	protected final Properties properties;
 	private Properties addressbook;
 	private int trClass;
 	protected final LinkedList<String> deletionMarks;
@@ -82,41 +81,12 @@ public class AddressbookBean
 
 	public AddressbookBean()
 	{
-		properties = new Properties();
+		super();
 		deletionMarks = new LinkedList();
 		beginIndex = 0;
 		endIndex = DISPLAY_SIZE - 1;
 	}
 
-	private long configLastLoaded = 0;
-	private static final String PRIVATE_BOOK = "private_addressbook";
-	private static final String DEFAULT_PRIVATE_BOOK = "../privatehosts.txt";
-
-	protected void loadConfig()
-	{
-		long currentTime = System.currentTimeMillis();
-		
-		if( !properties.isEmpty() &&  currentTime - configLastLoaded < 10000 )
-			return;
-		
-		FileInputStream fis = null;
-		try {
-			properties.clear();
-			fis = new FileInputStream( ConfigBean.configFileName );
-			properties.load( fis );
-			// added in 0.5, for compatibility with 0.4 config.txt
-			if( properties.getProperty(PRIVATE_BOOK) == null)
-				properties.setProperty(PRIVATE_BOOK, DEFAULT_PRIVATE_BOOK);
-			configLastLoaded = currentTime;
-		}
-		catch (Exception e) {
-			Debug.debug( e.getClass().getName() + ": " + e.getMessage() );
-		} finally {
-			if (fis != null)
-				try { fis.close(); } catch (IOException ioe) {}
-		}	
-	}
-
 	public String getFileName()
 	{
 		loadConfig();
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java b/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5cc49e2da2bccdd0990ed2972689f8f0be1d6eb
--- /dev/null
+++ b/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java
@@ -0,0 +1,64 @@
+package i2p.susi.dns;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * Holds methods common to several Beans.
+ * @since 0.9.1
+ */
+public class BaseBean
+{
+    protected final Properties properties;
+
+    private long configLastLoaded = 0;
+    private static final String PRIVATE_BOOK = "private_addressbook";
+    private static final String DEFAULT_PRIVATE_BOOK = "../privatehosts.txt";
+
+    public static final String PROP_THEME_NAME = "theme";
+    public static final String DEFAULT_THEME = "light";
+    public static final String BASE_THEME_PATH = "/themes/susidns/";
+
+    public BaseBean()
+    {
+        properties = new Properties();
+    }
+
+    protected void loadConfig()
+    {
+        long currentTime = System.currentTimeMillis();
+
+        if( !properties.isEmpty() &&  currentTime - configLastLoaded < 10000 )
+            return;
+
+        FileInputStream fis = null;
+        try {
+            properties.clear();
+            fis = new FileInputStream( ConfigBean.configFileName );
+            properties.load( fis );
+            // added in 0.5, for compatibility with 0.4 config.txt
+            if( properties.getProperty(PRIVATE_BOOK) == null)
+                properties.setProperty(PRIVATE_BOOK, DEFAULT_PRIVATE_BOOK);
+            configLastLoaded = currentTime;
+        }
+        catch (Exception e) {
+            Debug.debug( e.getClass().getName() + ": " + e.getMessage() );
+        } finally {
+            if (fis != null)
+                try { fis.close(); } catch (IOException ioe) {}
+        }
+    }
+
+    /**
+     * Returns the theme path
+     * @since 0.9.1
+     */
+    public String getTheme() {
+        loadConfig();
+        String url = BASE_THEME_PATH;
+        String theme = properties.getProperty(PROP_THEME_NAME, DEFAULT_THEME);
+        url += theme + "/";
+        return url;
+    }
+}
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java b/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
index 69597f270b7b58bea5391238382d0d8fecf7fb37..8675613c5c2a62df586a6efc04baf49f2ddab45f 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
@@ -36,38 +36,10 @@ import java.util.Properties;
 import net.i2p.I2PAppContext;
 import net.i2p.util.SecureFileOutputStream;
 
-public class SubscriptionsBean
+public class SubscriptionsBean extends BaseBean
 {
 	private String action, fileName, content, serial, lastSerial;
 	
-	Properties properties;
-	
-	public SubscriptionsBean()
-	{
-		properties = new Properties();
-	}
-	private long configLastLoaded = 0;
-	private void loadConfig()
-	{
-		long currentTime = System.currentTimeMillis();
-		
-		if( !properties.isEmpty() &&  currentTime - configLastLoaded < 10000 )
-			return;
-		
-		FileInputStream fis = null;
-		try {
-			properties.clear();
-			fis = new FileInputStream( ConfigBean.configFileName );
-			properties.load( fis );
-			configLastLoaded = currentTime;
-		}
-		catch (Exception e) {
-			Debug.debug( e.getClass().getName() + ": " + e.getMessage() );
-		} finally {
-			if (fis != null)
-				try { fis.close(); } catch (IOException ioe) {}
-		}	
-	}
 	public String getAction() {
 		return action;
 	}
diff --git a/apps/susidns/src/jsp/addressbook.jsp b/apps/susidns/src/jsp/addressbook.jsp
index fe9666473bb4ec2022c5b8dcb18044f9382e4a5d..61487f8116e4af65f5e08ff6e72f28ef82f881ed 100644
--- a/apps/susidns/src/jsp/addressbook.jsp
+++ b/apps/susidns/src/jsp/addressbook.jsp
@@ -47,12 +47,12 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>${book.book} <%=intl._("address book")%> - susidns</title>
-<link rel="stylesheet" type="text/css" href="css.css">
+<link rel="stylesheet" type="text/css" href="<%=book.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<a href="index"><img src="images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
+<a href="index"><img src="<%=book.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
 </div>
 <hr>
 <div id="navi">
diff --git a/apps/susidns/src/jsp/config.jsp b/apps/susidns/src/jsp/config.jsp
index a39b52602b8396102c7e38f6d28a37baaee9a88a..10cc5958086f18ec309b9be9aa86a4e6b0235131 100644
--- a/apps/susidns/src/jsp/config.jsp
+++ b/apps/susidns/src/jsp/config.jsp
@@ -36,6 +36,7 @@
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <jsp:useBean id="version" class="i2p.susi.dns.VersionBean" scope="application"/>
 <jsp:useBean id="cfg" class="i2p.susi.dns.ConfigBean" scope="session"/>
+<jsp:useBean id="base" class="i2p.susi.dns.BaseBean" scope="session" />
 <jsp:useBean id="intl" class="i2p.susi.dns.Messages" scope="application" />
 <jsp:setProperty name="cfg" property="*" />
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
@@ -43,12 +44,12 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title><%=intl._("configuration")%> - susidns</title>
-<link rel="stylesheet" type="text/css" href="css.css">
+<link rel="stylesheet" type="text/css" href="<%=base.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<a href="index"><img src="images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
+<a href="index"><img src="<%=base.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
 </div><hr>
 <div id="navi">
 <p>
diff --git a/apps/susidns/src/jsp/details.jsp b/apps/susidns/src/jsp/details.jsp
index 3c67305e1d573316bd3ee074ee8061cd4478ef47..42aa32f86baf056b3367779ea11b75fc0b43a803 100644
--- a/apps/susidns/src/jsp/details.jsp
+++ b/apps/susidns/src/jsp/details.jsp
@@ -41,12 +41,12 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>${book.book} <%=intl._("addressbook")%> - susidns</title>
-<link rel="stylesheet" type="text/css" href="css.css">
+<link rel="stylesheet" type="text/css" href="<%=book.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<a href="index"><img src="images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
+<a href="index"><img src="<%=book.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
 </div>
 <hr>
 <div id="navi">
diff --git a/apps/susidns/src/jsp/index.jsp b/apps/susidns/src/jsp/index.jsp
index 97b3c920b8795c03c569f9200ff96656e7675032..10cb8be679d48b5e2f53acfa840fde33792c0bbf 100644
--- a/apps/susidns/src/jsp/index.jsp
+++ b/apps/susidns/src/jsp/index.jsp
@@ -35,18 +35,19 @@
 <%@ page contentType="text/html"%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <jsp:useBean id="version" class="i2p.susi.dns.VersionBean" scope="application" />
+<jsp:useBean id="base" class="i2p.susi.dns.BaseBean" scope="session" />
 <jsp:useBean id="intl" class="i2p.susi.dns.Messages" scope="application" />
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title><%=intl._("Introduction")%> - SusiDNS</title>
-<link rel="stylesheet" type="text/css" href="css.css">
+<link rel="stylesheet" type="text/css" href="<%=base.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<img src="images/logo.png" alt="susidns logo" border="0">
+<img src="<%=base.getTheme()%>images/logo.png" alt="susidns logo" border="0">
 </div>
 <hr>
 <div id="navi">
@@ -85,7 +86,7 @@
 <%=intl._("Hosts in the private address book can be accessed by you but their addresses are never distributed to others.")%>
 <%=intl._("The private address book can also be used for aliases of hosts in your other address books.")%>
 </p>
-<center><img src="images/how.png" border="0" alt="address book working scheme" title="How the address book works" class="illustrate" /></center>
+<center><img src="<%=base.getTheme()%>images/how.png" border="0" alt="address book working scheme" title="How the address book works" class="illustrate" /></center>
 </div>
 <hr>
 <div id="footer">
diff --git a/apps/susidns/src/jsp/subscriptions.jsp b/apps/susidns/src/jsp/subscriptions.jsp
index f7b6fa03545bded668fe5d470efa00adf54ec970..e16a6747361ab3567db2478c5b135499493900a0 100644
--- a/apps/susidns/src/jsp/subscriptions.jsp
+++ b/apps/susidns/src/jsp/subscriptions.jsp
@@ -43,12 +43,12 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title><%=intl._("subscriptions")%> - susidns</title>
-<link rel="stylesheet" type="text/css" href="css.css">
+<link rel="stylesheet" type="text/css" href="<%=subs.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<a href="index"><img src="images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
+<a href="index"><img src="<%=subs.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
 </div><hr>
 <div id="navi">
 <p>
diff --git a/apps/susidns/src/images/how.png b/installer/resources/themes/susidns/light/images/how.png
similarity index 100%
rename from apps/susidns/src/images/how.png
rename to installer/resources/themes/susidns/light/images/how.png
diff --git a/apps/susidns/src/images/how_fr.png b/installer/resources/themes/susidns/light/images/how_fr.png
similarity index 100%
rename from apps/susidns/src/images/how_fr.png
rename to installer/resources/themes/susidns/light/images/how_fr.png
diff --git a/apps/susidns/src/images/logo.png b/installer/resources/themes/susidns/light/images/logo.png
similarity index 100%
rename from apps/susidns/src/images/logo.png
rename to installer/resources/themes/susidns/light/images/logo.png
diff --git a/apps/susidns/src/css.css b/installer/resources/themes/susidns/light/susidns.css
similarity index 100%
rename from apps/susidns/src/css.css
rename to installer/resources/themes/susidns/light/susidns.css