diff --git a/apps/addressbook/build.gradle b/apps/addressbook/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..72c4e6f483cf1b57372d288d33041e309d8f72f0
--- /dev/null
+++ b/apps/addressbook/build.gradle
@@ -0,0 +1,18 @@
+apply plugin: 'war'
+
+sourceSets {
+    main {
+        java {
+            srcDir 'java/src'
+        }
+    }
+}
+
+dependencies {
+    compile project(':core')
+    providedCompile project(':apps:jetty')
+}
+
+war {
+    webXml = file('web.xml')
+}
diff --git a/apps/i2psnark/build.gradle b/apps/i2psnark/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..15c3fbec8b11f11f64112e8c06746251b7b81a84
--- /dev/null
+++ b/apps/i2psnark/build.gradle
@@ -0,0 +1,26 @@
+apply plugin: 'war'
+
+sourceSets {
+    main {
+        java {
+            srcDir 'java/src'
+        }
+    }
+}
+
+dependencies {
+    compile project(':core')
+    providedCompile project(':apps:ministreaming')
+    providedCompile project(':apps:jetty')
+}
+
+war {
+    into '.icons', {
+        from 'icons'
+    }
+    webInf {
+        into 'classes/org/klomp/snark/web'
+        from 'mime.properties'
+    }
+    webXml = file('web.xml')
+}
diff --git a/apps/i2ptunnel/build.gradle b/apps/i2ptunnel/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..1b5dde3ba83ca1809d7be29b2a8badad809c64f1
--- /dev/null
+++ b/apps/i2ptunnel/build.gradle
@@ -0,0 +1,27 @@
+apply plugin: 'war'
+
+sourceSets {
+    main {
+        java {
+            srcDir 'java/src'
+        }
+    }
+    test {
+        java {
+            srcDir 'java/test/junit'
+        }
+    }
+}
+
+dependencies {
+    compile project(':core')
+    providedCompile project(':apps:ministreaming')
+    providedCompile project(':apps:jetty')
+    testCompile 'junit:junit:4.+'
+}
+
+war {
+    from 'jsp'
+    exclude 'jsp/web.xml'
+    webXml = file('jsp/web.xml')
+}
diff --git a/apps/susidns/build.gradle b/apps/susidns/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..103163af72cbb4aa53bff3adc47f07aac63f439f
--- /dev/null
+++ b/apps/susidns/build.gradle
@@ -0,0 +1,20 @@
+apply plugin: 'war'
+
+sourceSets {
+    main {
+        java {
+            srcDir 'src/java/src'
+        }
+    }
+}
+
+dependencies {
+    compile project(':core')
+    providedCompile project(':apps:jetty')
+}
+
+war {
+    from 'src/jsp'
+    from 'src/index.html'
+    webXml = file('src/WEB-INF/web-template.xml')
+}
diff --git a/apps/susimail/build.gradle b/apps/susimail/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..7cb5787fc5b23e01bfc5feb9a3f069d9d64c63e9
--- /dev/null
+++ b/apps/susimail/build.gradle
@@ -0,0 +1,27 @@
+apply plugin: 'war'
+
+sourceSets {
+    main {
+        java {
+            srcDir 'src/src'
+        }
+    }
+}
+
+dependencies {
+    compile project(':core')
+    providedCompile project(':apps:jetty')
+}
+
+war {
+    from 'src'
+    exclude 'WEB-INF/web.xml'
+    exclude 'LICENSE'
+    exclude 'src'
+    exclude 'susimail.properties'
+    webInf {
+        into 'classes'
+        from 'src/susimail.properties'
+    }
+    webXml = file('src/WEB-INF/web.xml')
+}
diff --git a/settings.gradle b/settings.gradle
index f581786b2282d0c3706c91162c33d574882bec20..9138c7c50282528992e5b09b70c02cc238d20be6 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include 'core', 'router', 'installer', 'apps:ministreaming', 'apps:streaming', 'apps:desktopgui', 'apps:systray', 'apps:jetty', 'apps:routerconsole', 'apps:BOB', 'apps:sam'
+include 'core', 'router', 'installer', 'apps:ministreaming', 'apps:streaming', 'apps:desktopgui', 'apps:systray', 'apps:jetty', 'apps:routerconsole', 'apps:addressbook', 'apps:susidns', 'apps:susimail', 'apps:i2psnark', 'apps:i2ptunnel', 'apps:BOB', 'apps:sam'