diff --git a/build.gradle b/build.gradle
index a27b68b..4639a8a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -21,8 +21,8 @@
 
 description = 'Apache S4'
 defaultTasks 'assemble'
-archivesBaseName = 's4'
-distRootFolder = "$archivesBaseName-${-> version}"
+project.ext["archivesBaseName"] = 's4'
+project.ext["distRootFolder"] = "$archivesBaseName-${-> version}"
 
 allprojects {
 
@@ -34,7 +34,7 @@
     repositories {
         mavenLocal()
         mavenCentral()
-        mavenRepo name: "gson", urls: "http://google-gson.googlecode.com/svn/mavenrepo"
+        mavenRepo name: "gson", url: "http://google-gson.googlecode.com/svn/mavenrepo"
 
         /* Add lib dir as a repo. Some jar files that are not available
          in a public repo are distributed in the lib dir. */
@@ -43,7 +43,7 @@
 }
 
 /* All project libraries must be defined here. */
-libraries = [
+project.ext["libraries"] = [
     json:               'org.json:json:20090211',
     guava:              'com.google.guava:guava:10.0.1',
     gson:               'com.google.code.gson:gson:1.6',
@@ -84,13 +84,13 @@
     apply plugin: 'java'
     apply plugin: 'eclipse'
     apply plugin: 'maven'
-    apply plugin: 'code-quality'
+//    apply plugin: 'checkstyle'
 
     /* Set Java version. */
     sourceCompatibility = 1.6
     targetCompatibility = 1.6
 
-    checkstyleConfigFileName = "$rootDir/config/checkstyle/s4-checkstyle.xml"
+    project.ext["checkstyleConfigFileName"] = "$rootDir/config/checkstyle/s4-checkstyle.xml"
 
     configurations.all {
         exclude group: 'com.sun.jdmk', module: 'jmxtools'
@@ -142,9 +142,9 @@
     )
 }
 
-dependsOnChildren()
+evaluationDependsOnChildren()
 
-platformProjects = [project(':s4-base'), project(':s4-core'), project(':s4-comm'), project(':s4-tools')]
+project.ext["platformProjects"] = [project(':s4-base'), project(':s4-core'), project(':s4-comm'), project(':s4-tools')]
 
 configurations {
     platformLibs
@@ -168,7 +168,7 @@
 //    }
 //}
 
-binDistImage = copySpec {
+project.ext["binDistImage"] = copySpec {
     platformProjects.collect {proj ->
         into ("platform/lib") {
             from proj.sourceSets.main.resources
diff --git a/s4 b/s4
index 61517a1..3d3e0b4 100755
--- a/s4
+++ b/s4
@@ -2,11 +2,12 @@
 
 # NOTE: "./gradlew s4-tools:installApp" will prepare/update the tools subproject and related startup scripts
 
-GRADLE=`pwd`/gradlew
-
 S4_DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 S4_SCRIPT_PATH="$S4_DIR/s4"
 
+# JVM options for starting nodes and for other s4 tools can be configured here
+# export JAVA_OPTS=-Xmx1G
+
 subprojects/s4-tools/build/install/s4-tools/bin/s4-tools -s4ScriptPath=$S4_SCRIPT_PATH $@
 
 # EXAMPLES
diff --git a/subprojects/s4-core/src/main/java/org/apache/s4/core/Main.java b/subprojects/s4-core/src/main/java/org/apache/s4/core/Main.java
index 663caed..139ad35 100644
--- a/subprojects/s4-core/src/main/java/org/apache/s4/core/Main.java
+++ b/subprojects/s4-core/src/main/java/org/apache/s4/core/Main.java
@@ -100,7 +100,8 @@
                         Arrays.toString(mainArgs.extraNamedParameters.toArray(new String[] {})));
                 Map<String, String> namedParameters = new HashMap<String, String>();
                 for (String namedParam : mainArgs.extraNamedParameters) {
-                    namedParameters.put(namedParam.split("[:]")[0].trim(), namedParam.split("[:]")[1].trim());
+                    namedParameters.put(namedParam.split("[:]")[0].trim(),
+                            namedParam.substring(namedParam.indexOf(':') + 1).trim());
                 }
                 modules.add(new ParametersInjectionModule(namedParameters));
             }
diff --git a/subprojects/s4-core/src/main/java/org/apache/s4/core/RemoteStream.java b/subprojects/s4-core/src/main/java/org/apache/s4/core/RemoteStream.java
index 0833a07..330fd83 100644
--- a/subprojects/s4-core/src/main/java/org/apache/s4/core/RemoteStream.java
+++ b/subprojects/s4-core/src/main/java/org/apache/s4/core/RemoteStream.java
@@ -10,7 +10,7 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Stream that dispatches events to a remote cluster
+ * Stream that dispatches events to interested apps in remote clusters
  * 
  */
 public class RemoteStream implements Streamable<Event> {
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/CreateApp.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/CreateApp.java
index 8f870be..beaee41 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/CreateApp.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/CreateApp.java
@@ -44,9 +44,16 @@
             Files.copy(gradlewTempFile, new File(appArgs.getAppDir() + "/gradlew"));
             new File(appArgs.getAppDir() + "/gradlew").setExecutable(true);
 
-            // copy build file
+            // copy build file contents
             Files.copy(Resources.newInputStreamSupplier(Resources.getResource("templates/build.gradle")), new File(
                     appArgs.getAppDir() + "/build.gradle"));
+
+            // update app settings
+            String settingsFileContents = Resources.toString(Resources.getResource("templates/settings.gradle"),
+                    Charsets.UTF_8);
+            settingsFileContents = settingsFileContents.replaceFirst("rootProject.name=<project-name>",
+                    "rootProject.name=\"" + appArgs.appName.get(0) + "\"");
+            Files.write(settingsFileContents, new File(appArgs.getAppDir() + "/settings.gradle"), Charsets.UTF_8);
             // copy hello app files
             Files.copy(Resources.newInputStreamSupplier(Resources.getResource("templates/HelloPE.java.txt")), new File(
                     appArgs.getAppDir() + "/src/main/java/hello/HelloPE.java"));
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java
index f4b269b..646ae92 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java
@@ -1,7 +1,5 @@
 package org.apache.s4.tools;
 
-import org.apache.log4j.BasicConfigurator;
-import org.apache.log4j.Level;
 import org.apache.s4.comm.tools.TaskSetup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -14,10 +12,6 @@
     static Logger logger = LoggerFactory.getLogger(DefineCluster.class);
 
     public static void main(String[] args) {
-        // configure log4j for Zookeeper
-        BasicConfigurator.configure();
-        org.apache.log4j.Logger.getLogger("org.apache.zookeeper").setLevel(Level.ERROR);
-        org.apache.log4j.Logger.getLogger("org.I0Itec").setLevel(Level.ERROR);
 
         ZKServerArgs clusterArgs = new ZKServerArgs();
         Tools.parseArgs(clusterArgs, args);
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
index de8843a..9471910 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
@@ -8,22 +8,19 @@
 import junit.framework.Assert;
 
 import org.I0Itec.zkclient.ZkClient;
-import org.apache.log4j.BasicConfigurator;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
 import org.apache.s4.comm.topology.ZNRecord;
 import org.apache.s4.comm.topology.ZNRecordSerializer;
 import org.apache.s4.deploy.DistributedDeploymentManager;
 import org.apache.zookeeper.CreateMode;
 import org.gradle.tooling.BuildLauncher;
 import org.gradle.tooling.GradleConnector;
+import org.gradle.tooling.ProgressListener;
 import org.gradle.tooling.ProjectConnection;
 import org.slf4j.LoggerFactory;
 
-import sun.net.ProgressListener;
-
 import com.beust.jcommander.Parameter;
 import com.beust.jcommander.Parameters;
+import com.beust.jcommander.converters.FileConverter;
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Files;
 
@@ -40,10 +37,6 @@
         DeployAppArgs deployArgs = new DeployAppArgs();
 
         Tools.parseArgs(deployArgs, args);
-        // configure log4j for Zookeeper
-        BasicConfigurator.configure();
-        Logger.getLogger("org.apache.zookeeper").setLevel(Level.ERROR);
-        Logger.getLogger("org.I0Itec").setLevel(Level.ERROR);
 
         try {
             ZkClient zkClient = new ZkClient(deployArgs.zkConnectionString, deployArgs.timeout);
@@ -61,8 +54,13 @@
                         "Using specified S4R [{}], the S4R archive will not be built from source (and corresponding parameters are ignored)",
                         s4rPath);
             } else {
-                ExecGradle.exec(deployArgs.gradleBuildFilePath, "installS4R",
-                        new String[] { "appsDir=" + tmpAppsDir.getAbsolutePath(), "appName=" + deployArgs.appName });
+                List<String> params = new ArrayList<String>();
+                // prepare gradle -P parameters, including passed gradle opts
+                params.addAll(deployArgs.gradleOpts);
+                params.add("appClass=" + deployArgs.appClass);
+                params.add("appsDir=" + tmpAppsDir.getAbsolutePath());
+                params.add("appName=" + deployArgs.appName);
+                ExecGradle.exec(deployArgs.gradleBuildFile, "installS4R", params.toArray(new String[] {}));
                 s4rPath = tmpAppsDir.getAbsolutePath() + "/" + deployArgs.appName + ".s4r";
             }
             Assert.assertTrue(ByteStreams.copy(Files.newInputStreamSupplier(new File(s4rPath)),
@@ -86,32 +84,35 @@
     @Parameters(commandNames = "s4 deploy", commandDescription = "Package and deploy application to S4 cluster", separators = "=")
     static class DeployAppArgs extends S4ArgsBase {
 
-        @Parameter(names = { "-b", "-buildFile" }, description = "path to gradle build file for the S4 application", required = false)
-        String gradleBuildFilePath;
+        @Parameter(names = { "-b", "-buildFile" }, description = "Full path to gradle build file for the S4 application", required = false, converter = FileConverter.class, validateWith = FileExistsValidator.class)
+        File gradleBuildFile;
 
-        @Parameter(names = "-s4r", description = "path to s4r file", required = false)
+        @Parameter(names = "-s4r", description = "Path to s4r file", required = false)
         String s4rPath;
 
-        @Parameter(names = "-appName", description = "name of S4 application", required = true)
+        @Parameter(names = { "-a", "-appClass" }, description = "Full class name of the application class (extending App or AdapterApp)", required = false)
+        String appClass = "";
+
+        @Parameter(names = "-appName", description = "Name of S4 application. This will be the name of the s4r file as well", required = true)
         String appName;
 
-        @Parameter(names = { "-c", "-cluster" }, description = "logical name of the S4 cluster", required = true)
+        @Parameter(names = { "-c", "-cluster" }, description = "Logical name of the S4 cluster", required = true)
         String clusterName;
 
-        @Parameter(names = "-zk", description = "zookeeper connection string")
+        @Parameter(names = "-zk", description = "ZooKeeper connection string")
         String zkConnectionString = "localhost:2181";
 
-        @Parameter(names = "-timeout", description = "connection timeout to Zookeeper, in ms")
+        @Parameter(names = "-timeout", description = "Connection timeout to Zookeeper, in ms")
         int timeout = 10000;
 
     }
 
     static class ExecGradle {
 
-        public static void exec(String buildFilePath, String taskName, String[] params) throws Exception {
+        public static void exec(File buildFile, String taskName, String[] params) throws Exception {
 
             ProjectConnection connection = GradleConnector.newConnector()
-                    .forProjectDirectory(new File(buildFilePath).getParentFile()).connect();
+                    .forProjectDirectory(buildFile.getParentFile()).connect();
 
             try {
                 BuildLauncher build = connection.newBuild();
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/FileExistsValidator.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/FileExistsValidator.java
new file mode 100644
index 0000000..9e21600
--- /dev/null
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/FileExistsValidator.java
@@ -0,0 +1,18 @@
+package org.apache.s4.tools;
+
+import java.io.File;
+
+import com.beust.jcommander.IParameterValidator;
+import com.beust.jcommander.ParameterException;
+
+public class FileExistsValidator implements IParameterValidator {
+
+    @Override
+    public void validate(String name, String value) throws ParameterException {
+        if (!new File(value).exists()) {
+            throw new ParameterException("File with path [" + value + "] specified in [" + name + "] does not exist");
+        }
+
+    }
+
+}
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
new file mode 100644
index 0000000..d737d40
--- /dev/null
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
@@ -0,0 +1,44 @@
+package org.apache.s4.tools;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.s4.tools.Deploy.ExecGradle;
+import org.slf4j.LoggerFactory;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+import com.beust.jcommander.converters.FileConverter;
+
+public class Package extends S4ArgsBase {
+
+    public static void main(String[] args) {
+        try {
+            final PackageArgs packageArgs = new PackageArgs();
+            Tools.parseArgs(packageArgs, args);
+
+            List<String> params = new ArrayList<String>();
+            // prepare gradle -P parameters, including passed gradle opts
+            params.add("appClass=" + packageArgs.appClass);
+            params.add("appName=" + packageArgs.appName.get(0));
+            ExecGradle.exec(packageArgs.gradleBuildFile, "installS4R", params.toArray(new String[] {}));
+        } catch (Exception e) {
+            LoggerFactory.getLogger(Package.class).error("Cannot deploy app", e);
+        }
+    }
+
+    @Parameters(commandNames = "package", separators = "=", commandDescription = "Create s4r")
+    static class PackageArgs extends S4ArgsBase {
+
+        @Parameter(description = "name of the application", required = true, arity = 1)
+        List<String> appName;
+
+        @Parameter(names = { "-b", "-buildFile" }, description = "Path to gradle build file for the S4 application", required = true, converter = FileConverter.class, validateWith = FileExistsValidator.class)
+        File gradleBuildFile;
+
+        @Parameter(names = { "-a", "-appClass" }, description = "Full class name of the application class (extending App or AdapterApp)", required = false)
+        String appClass = "";
+
+    }
+}
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/S4ArgsBase.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/S4ArgsBase.java
index 477fdaa..213001d 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/S4ArgsBase.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/S4ArgsBase.java
@@ -1,5 +1,9 @@
 package org.apache.s4.tools;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import com.beust.jcommander.IStringConverter;
 import com.beust.jcommander.Parameter;
 
 public abstract class S4ArgsBase {
@@ -10,4 +14,20 @@
     @Parameter(names = "-s4ScriptPath", description = "path of the S4 script", hidden = true, required = true)
     String s4ScriptPath;
 
+    @Parameter(names = "-gradleOpts", variableArity = true, description = "gradle system properties (as in GRADLE_OPTS environment properties) passed to gradle scripts", required = false, converter = GradleOptsConverter.class)
+    List<String> gradleOpts = new ArrayList<String>();
+
+    // This removes automatically the -D of each gradle opt jvm parameter, if present
+    public class GradleOptsConverter implements IStringConverter<String> {
+
+        @Override
+        public String convert(String value) {
+            if (value.startsWith("-D")) {
+                return value.substring("-D".length());
+            } else {
+                return value;
+            }
+        }
+
+    }
 }
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
index 7f2a844..733c7ad 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
@@ -5,6 +5,8 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Level;
 import org.apache.s4.core.Main;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -20,7 +22,7 @@
 
     enum Task {
         deploy(Deploy.class), node(Main.class), zkServer(ZKServer.class), newCluster(DefineCluster.class), adapter(null), newApp(
-                CreateApp.class);
+                CreateApp.class), s4r(Package.class);
 
         Class<?> target;
 
@@ -42,6 +44,11 @@
 
     public static void main(String[] args) {
 
+        // configure log4j for Zookeeper
+        BasicConfigurator.configure();
+        org.apache.log4j.Logger.getLogger("org.apache.zookeeper").setLevel(Level.ERROR);
+        org.apache.log4j.Logger.getLogger("org.I0Itec").setLevel(Level.ERROR);
+
         if (!(args.length > 1)) {
             List<String> taskNames = getTaskNames();
             System.err.println("please specify a task name and proper arguments. Available tasks are: "
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
index ae0b011..0842f07 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
@@ -17,6 +17,7 @@
     static Logger logger = LoggerFactory.getLogger(ZKServer.class);
 
     public static void main(String[] args) {
+
         ZKServerArgs zkArgs = new ZKServerArgs();
         Tools.parseArgs(zkArgs, args);
         try {
diff --git a/subprojects/s4-tools/src/main/resources/templates/build.gradle b/subprojects/s4-tools/src/main/resources/templates/build.gradle
index f60c3f3..a1e50e3 100644
--- a/subprojects/s4-tools/src/main/resources/templates/build.gradle
+++ b/subprojects/s4-tools/src/main/resources/templates/build.gradle
@@ -15,15 +15,13 @@
 *
 */
 
-/* Set the destination where we want to install the apps. */
+project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
 
-s4AppInstallDir = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
-
-s4Version = '0.5.0-SNAPSHOT'
+project.ext["s4Version"] = '0.5.0-SNAPSHOT'
 description = 'Apache S4 App'
 //defaultTasks 'installS4R'
-archivesBaseName = "$project.name"
-distRootFolder = "$archivesBaseName-${-> version}"
+project.ext["archivesBaseName"] = "$project.name"
+project.ext["distRootFolder"] = "$archivesBaseName-${-> version}"
 
 
 // Append the suffix 'SNAPSHOT' when the build is not for release.
@@ -44,7 +42,7 @@
 repositories {
     mavenLocal()
     mavenCentral()
-    mavenRepo name: "gson", urls: "http://google-gson.googlecode.com/svn/mavenrepo"
+    mavenRepo name: "gson", url: "http://google-gson.googlecode.com/svn/mavenrepo"
 
     /* Add lib dir as a repo. Some jar files that are not available
      in a public repo are distributed in the lib dir. */
@@ -52,7 +50,7 @@
 }
 
 /* All project libraries must be defined here. */
-libraries = [
+project.ext["libraries"] = [
             // for instance, adding twitter4j 2.2.5 will be:
             //twitter4j_core:     'org.twitter4j:twitter4j-core:2.2.5'
             // http://mvnrepository.com/ is a good source
@@ -92,34 +90,42 @@
        'S4-Version': s4Version
        )
 
-appDependencies = ( configurations.compile )
+project.ext["appDependencies"] = ( configurations.compile )
 
 /* This task will extract all the class files and create a fat jar. We set the manifest and the extension to make it an S4 archive file. */
 // TODO: exclude schenma files as needed (not critical) see: http://forums.gradle.org/gradle/topics/using_gradle_to_fat_jar_a_spring_project
 task s4r(type: Jar) {
+
+   if (rootProject.hasProperty("appName")) {
+       archiveName= "$appName"+".s4r"
+   }
    dependsOn jar
    from { appDependencies.collect { it.isDirectory() ? it : zipTree(it) } }
    from { configurations.archives.allArtifacts.files.collect { zipTree(it) } }
    manifest = project.manifest
-   extension = 's4r'
 
-   /* Set class name in manifest. Parse source files until we find a class that extends App.
-    * Get fully qualified Java class name and set attribute in Manifest.
-    */
-   sourceSets.main.allSource.files.each {  File file ->
-       if (appClassname =="" || appClassname == "UNKNOWN") {
-           // only execute the closure for this file if we haven't already found the app class name
-           appClassname = getAppClassname(file)
-           if(appClassname != "") {
-               manifest.mainAttributes('S4-App-Class': appClassname)
-           }
-       }
-   }
+   // check -PappClassName, need to refer to rootProject to check property, see http://issues.gradle.org/browse/GRADLE-1826
+    if (!rootProject.hasProperty('appClass') || !"$appClass") {
+        /* Set class name in manifest. Parse source files until we find a class that extends App.
+         * Get fully qualified Java class name and set attribute in Manifest.
+         */
+        sourceSets.main.allSource.files.each {  File file ->
+            if (appClassname =="" || appClassname == "UNKNOWN") {
+                // only execute the closure for this file if we haven't already found the app class name
+                appClassname = getAppClassname(file)
+                if(appClassname != "") {
+                    manifest.mainAttributes('S4-App-Class': appClassname)
+                }
+            }
+        }
+    } else {
+        manifest.mainAttributes('S4-App-Class': "$appClass")
+    }
 
    if (appClassname == "UNKNOWN") {
 
        println "Couldn't find App class in source files...aborting."
-       exit(1)
+       System.exit(1)
    }
 }
 
@@ -132,7 +138,7 @@
 }
 
 task cp << {
-    description='dumps the classpath for running a class from this project, into a \'classpath.txt\' file in the current directory'
+    description='Dumps the classpath for running a class from this project, into a \'classpath.txt\' file in the current directory'
     new File("classpath.txt").write(sourceSets.main.runtimeClasspath.asPath)
 }
 
@@ -148,15 +154,16 @@
 */
 def getAppClassname(file) {
    def classname = "UNKNOWN"
-   lines= file.readLines()
+   def lines= file.readLines()
+   def packageName = ""
    for(line in lines) {
 
        def pn = line =~ /.*package\s+([\w\.]+)\s*;.*/
        if(pn) {
            packageName = pn[0][1] + "."
        }
-
        def an = line =~ /.*public\s+class\s+(\w+)\s+extends.+App.*\{/
+
        if (an) {
            classname = packageName + an[0][1]
            println "Found app class name: " + classname
diff --git a/subprojects/s4-tools/src/main/resources/templates/settings.gradle b/subprojects/s4-tools/src/main/resources/templates/settings.gradle
new file mode 100644
index 0000000..e0a06c9
--- /dev/null
+++ b/subprojects/s4-tools/src/main/resources/templates/settings.gradle
@@ -0,0 +1 @@
+rootProject.name=<project-name>
\ No newline at end of file
diff --git a/test-apps/s4-counter/build.gradle b/test-apps/s4-counter/build.gradle
index 87512df..d71f75f 100644
--- a/test-apps/s4-counter/build.gradle
+++ b/test-apps/s4-counter/build.gradle
@@ -34,9 +34,9 @@
 /* Set the destination where we want to install the apps. */
 //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
 
-s4AppInstallDir = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
 
-s4Version = '0.5.0-SNAPSHOT'
+project.ext["s4Version"] = '0.5.0-SNAPSHOT'
 description = 'Apache S4 App'
 //defaultTasks 'installS4R'
 archivesBaseName = "$project.name"
@@ -60,7 +60,7 @@
 
 
 /* All project libraries must be defined here. */
-libraries = [
+project.ext["libraries"] = [
            json:               'org.json:json:20090211',
            guava:              'com.google.guava:guava:10.0.1',
            gson:               'com.google.code.gson:gson:1.6',
@@ -131,7 +131,7 @@
        'S4-Version': s4Version
        )
 
-appDependencies = ( configurations.compile )
+project.ext["appDependencies"] = ( configurations.compile )
 
 /* This task will extract all the class files and create a fat jar. We set the manifest and the extension to make it an S4 archive file. */
 // TODO: exclude schenma files as needed (not critical) see: http://forums.gradle.org/gradle/topics/using_gradle_to_fat_jar_a_spring_project
@@ -193,7 +193,8 @@
 */
 def getAppClassname(file) {
    def classname = "UNKNOWN"
-   lines= file.readLines()
+   def lines= file.readLines()
+   def packageName=""
    for(line in lines) {
 
        def pn = line =~ /.*package\s+([\w\.]+)\s*;.*/
diff --git a/test-apps/s4-showtime/build.gradle b/test-apps/s4-showtime/build.gradle
index 72ff887..3bfe72f 100644
--- a/test-apps/s4-showtime/build.gradle
+++ b/test-apps/s4-showtime/build.gradle
@@ -34,9 +34,9 @@
 /* Set the destination where we want to install the apps. */
 //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
 
-s4AppInstallDir = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
 
-s4Version = '0.5.0-SNAPSHOT'
+project.ext["s4Version"] = '0.5.0-SNAPSHOT'
 description = 'Apache S4 App'
 //defaultTasks 'installS4R'
 archivesBaseName = "$project.name"
@@ -60,7 +60,7 @@
 
 
 /* All project libraries must be defined here. */
-libraries = [
+project.ext["libraries"] = [
            json:               'org.json:json:20090211',
            guava:              'com.google.guava:guava:10.0.1',
            gson:               'com.google.code.gson:gson:1.6',
@@ -131,7 +131,7 @@
        'S4-Version': s4Version
        )
 
-appDependencies = ( configurations.compile )
+project.ext["appDependencies"] = ( configurations.compile )
 
 /* This task will extract all the class files and create a fat jar. We set the manifest and the extension to make it an S4 archive file. */
 // TODO: exclude schenma files as needed (not critical) see: http://forums.gradle.org/gradle/topics/using_gradle_to_fat_jar_a_spring_project
@@ -191,7 +191,8 @@
 */
 def getAppClassname(file) {
    def classname = "UNKNOWN"
-   lines= file.readLines()
+   def lines= file.readLines()
+   def packageName=""
    for(line in lines) {
 
        def pn = line =~ /.*package\s+([\w\.]+)\s*;.*/
diff --git a/test-apps/simple-deployable-app-1/build.gradle b/test-apps/simple-deployable-app-1/build.gradle
index 87512df..ad4dca5 100644
--- a/test-apps/simple-deployable-app-1/build.gradle
+++ b/test-apps/simple-deployable-app-1/build.gradle
@@ -34,9 +34,9 @@
 /* Set the destination where we want to install the apps. */
 //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
 
-s4AppInstallDir = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
 
-s4Version = '0.5.0-SNAPSHOT'
+project.ext["s4Version"] = '0.5.0-SNAPSHOT'
 description = 'Apache S4 App'
 //defaultTasks 'installS4R'
 archivesBaseName = "$project.name"
@@ -60,7 +60,7 @@
 
 
 /* All project libraries must be defined here. */
-libraries = [
+project.ext["libraries"] = [
            json:               'org.json:json:20090211',
            guava:              'com.google.guava:guava:10.0.1',
            gson:               'com.google.code.gson:gson:1.6',
@@ -131,7 +131,7 @@
        'S4-Version': s4Version
        )
 
-appDependencies = ( configurations.compile )
+project.ext["appDependencies"] = ( configurations.compile )
 
 /* This task will extract all the class files and create a fat jar. We set the manifest and the extension to make it an S4 archive file. */
 // TODO: exclude schenma files as needed (not critical) see: http://forums.gradle.org/gradle/topics/using_gradle_to_fat_jar_a_spring_project
@@ -193,7 +193,8 @@
 */
 def getAppClassname(file) {
    def classname = "UNKNOWN"
-   lines= file.readLines()
+   def lines= file.readLines()
+   def packageName = ""
    for(line in lines) {
 
        def pn = line =~ /.*package\s+([\w\.]+)\s*;.*/
diff --git a/test-apps/simple-deployable-app-2/build.gradle b/test-apps/simple-deployable-app-2/build.gradle
index 87512df..ad4dca5 100644
--- a/test-apps/simple-deployable-app-2/build.gradle
+++ b/test-apps/simple-deployable-app-2/build.gradle
@@ -34,9 +34,9 @@
 /* Set the destination where we want to install the apps. */
 //s4AppInstallDir = "/tmp/s4Apps" // TODO: decide how to standarize dirs, use env var?
 
-s4AppInstallDir = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
+project.ext["s4AppInstallDir"] = hasProperty('appsDir') ? "$appsDir" : "/tmp/appsDir"
 
-s4Version = '0.5.0-SNAPSHOT'
+project.ext["s4Version"] = '0.5.0-SNAPSHOT'
 description = 'Apache S4 App'
 //defaultTasks 'installS4R'
 archivesBaseName = "$project.name"
@@ -60,7 +60,7 @@
 
 
 /* All project libraries must be defined here. */
-libraries = [
+project.ext["libraries"] = [
            json:               'org.json:json:20090211',
            guava:              'com.google.guava:guava:10.0.1',
            gson:               'com.google.code.gson:gson:1.6',
@@ -131,7 +131,7 @@
        'S4-Version': s4Version
        )
 
-appDependencies = ( configurations.compile )
+project.ext["appDependencies"] = ( configurations.compile )
 
 /* This task will extract all the class files and create a fat jar. We set the manifest and the extension to make it an S4 archive file. */
 // TODO: exclude schenma files as needed (not critical) see: http://forums.gradle.org/gradle/topics/using_gradle_to_fat_jar_a_spring_project
@@ -193,7 +193,8 @@
 */
 def getAppClassname(file) {
    def classname = "UNKNOWN"
-   lines= file.readLines()
+   def lines= file.readLines()
+   def packageName = ""
    for(line in lines) {
 
        def pn = line =~ /.*package\s+([\w\.]+)\s*;.*/
