diff --git a/scripts/catkin_create_android_library_pkg b/scripts/catkin_create_android_library_project
similarity index 85%
rename from scripts/catkin_create_android_library_pkg
rename to scripts/catkin_create_android_library_project
index 2be396386b0ff16cf04cd001badc652d7bce6ed1..9fa2cb79ffc1abb1750cd2782941014fa4124a11 100755
--- a/scripts/catkin_create_android_library_pkg
+++ b/scripts/catkin_create_android_library_project
@@ -11,7 +11,7 @@ import argparse
 import os
 import sys
 
-from rosjava_build_tools import create_android_package
+from rosjava_build_tools import create_android_project
 import rosjava_build_tools.console as console
 
 ##############################################################################
@@ -20,7 +20,7 @@ import rosjava_build_tools.console as console
 
 if __name__ == "__main__":
     try:
-        sys.exit(create_android_package(is_library=True))
+        sys.exit(create_android_project(is_library=True))
     except Exception as e:
         console.logerror("%s : %s" % (str(e), type(e)))
         sys.exit(1)
diff --git a/scripts/catkin_create_android_pkg b/scripts/catkin_create_android_pkg
index 8abff1309c6c54b6ed695d9da41a58cf4e980fdd..5356e282627640a4763a28a5ddb7d0550b763de7 100755
--- a/scripts/catkin_create_android_pkg
+++ b/scripts/catkin_create_android_pkg
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-"""This script creates the skeleton of an android library package"""
+"""This script creates the skeleton of an android repo"""
 
 ##############################################################################
 # Imports
@@ -11,7 +11,7 @@ import argparse
 import os
 import sys
 
-from rosjava_build_tools import create_android_package
+from rosjava_build_tools import init_android_repo
 import rosjava_build_tools.console as console
 
 ##############################################################################
@@ -20,7 +20,7 @@ import rosjava_build_tools.console as console
 
 if __name__ == "__main__":
     try:
-        sys.exit(create_android_package(is_library=False))
+        sys.exit(init_android_repo())
     except Exception as e:
         console.logerror("%s : %s" % (str(e), type(e)))
         sys.exit(1)
diff --git a/scripts/catkin_create_android_repo b/scripts/catkin_create_android_project
similarity index 77%
rename from scripts/catkin_create_android_repo
rename to scripts/catkin_create_android_project
index 5356e282627640a4763a28a5ddb7d0550b763de7..81e527473a4ce4413312fd872427980ec5010938 100755
--- a/scripts/catkin_create_android_repo
+++ b/scripts/catkin_create_android_project
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-"""This script creates the skeleton of an android repo"""
+"""This script creates the skeleton of an android library package"""
 
 ##############################################################################
 # Imports
@@ -11,7 +11,7 @@ import argparse
 import os
 import sys
 
-from rosjava_build_tools import init_android_repo
+from rosjava_build_tools import create_android_project
 import rosjava_build_tools.console as console
 
 ##############################################################################
@@ -20,7 +20,7 @@ import rosjava_build_tools.console as console
 
 if __name__ == "__main__":
     try:
-        sys.exit(init_android_repo())
+        sys.exit(create_android_project(is_library=False))
     except Exception as e:
         console.logerror("%s : %s" % (str(e), type(e)))
         sys.exit(1)
diff --git a/setup.py b/setup.py
index a6581cea28f5e94c0cf4e1851b2dd333b88b155e..f7c844c4ed43b0006c1c76ab5791bc450b619640 100644
--- a/setup.py
+++ b/setup.py
@@ -6,9 +6,9 @@ from catkin_pkg.python_setup import generate_distutils_setup
 d = generate_distutils_setup(
     packages=['rosjava_build_tools'],
     package_dir={'': 'src'},
-    scripts=['scripts/catkin_create_android_repo',
-             'scripts/catkin_create_android_pkg',
-             'scripts/catkin_create_android_library_pkg',
+    scripts=['scripts/catkin_create_android_pkg',
+             'scripts/catkin_create_android_project',
+             'scripts/catkin_create_android_library_project',
             ],
     package_data = {'rosjava_build_tools': [
            'templates/android_package/*',
diff --git a/src/rosjava_build_tools/__init__.py b/src/rosjava_build_tools/__init__.py
index 5fc16624919897542c9a97dc0824e282b297608f..f13fffbad5a9dfa6ae5cdcdbf51afd4261544486 100644
--- a/src/rosjava_build_tools/__init__.py
+++ b/src/rosjava_build_tools/__init__.py
@@ -9,7 +9,7 @@
 ##############################################################################
 
 import console
-from init_repo import init_android_repo
-from create_package import create_android_package
+from create_package import init_android_repo
+from create_project import create_android_project
 from utils import which
 from release import scrape_for_release_message_packages
diff --git a/src/rosjava_build_tools/create_package.py b/src/rosjava_build_tools/create_package.py
index 1b14a4a82ee28a7c86da247d4e4c85c1b9b21f6d..1db93152da048b8ced737d52fc0bfec8f4cfde74 100644
--- a/src/rosjava_build_tools/create_package.py
+++ b/src/rosjava_build_tools/create_package.py
@@ -8,13 +8,12 @@
 # Imports
 ##############################################################################
 
-from __future__ import print_function
-
 import os
 import sys
 import argparse
 import subprocess
-import shutil
+import catkin_pkg
+from catkin_pkg.package_templates import create_package_xml, PackageTemplate
 
 # local imports
 import utils
@@ -28,152 +27,140 @@ import console
 def parse_arguments():
     argv = sys.argv[1:]
     parser = argparse.ArgumentParser(
-        description='Creates a new android package based on catkin and gradle. \n')
-    parser.add_argument('name',
-                        nargs=1,
-                        help='The name for the package')
-    parser.add_argument('-s', '--sdk-version',
-                        action='store',
-                        default='17',
-                        help='Android sdk version [17]')
-    parser.add_argument('-p', '--android-package-name',
-                        action='store',
-                        default='com.github.rosjava.android.pkg_name',
-                        help='Android package name (e.g. com.github.rosjava.android.pkg_name)')
+        description='Creates a new android repository based on catkin and gradle. \n\nNote that the path you provide will become the maven group for your repo.\n')
+    parser.add_argument('path', nargs='?', default=os.getcwd(), help='path to the repository you wish to create (must not exist beforehand).')
+    parser.add_argument('dependencies',
+                        nargs='*',
+                        help='Dependency list')
+    parser.add_argument('-l', '--license',
+                        action='append',
+                        default=["Apache 2.0"],
+                        help='Name for License, (e.g. BSD, MIT, GPLv3...)[BSD]')
     parser.add_argument('-a', '--author',
-                        action='store',
-                        default=utils.author_name(),
+                        action='append',
                         help='A single author, may be used multiple times')
+    parser.add_argument('-m', '--maintainer',
+                        action='append',
+                        help='A single maintainer, may be used multiple times')
+    parser.add_argument('-V', '--pkg_version',
+                        action='store',
+                        default="0.1.0",
+                        help='Initial Package version [0.1.0]')
+    parser.add_argument('-D', '--description',
+                        action='store',
+                        help='Description')
     args = parser.parse_args(argv)
-    if args.android_package_name == "com.github.rosjava.android.pkg_name":
-        args.android_package_name = "com.github.rosjava.android.%s" % args.name[0].lower()
+#    if not args.author:
+#        args.author = []
+#        args.author.append(utils.author_name)
+#    if not args.maintainer:
+#        args.maintainer = []
+#        args.maintainer.append(catkin_pkg.package.Person(utils.author_name))
+#    else:
+#        args.maintainer = []
+#        args.maintainer.append(catkin_pkg.package.Person(utils.author_name))
     return args
 
 
-def create_android_project(package_name, sdk_version, java_package_name, is_library):
-    path = os.path.join(os.getcwd(), package_name.lower())
-    console.pretty_println("\nCreating android project ", console.bold)
-    console.pretty_print("  Name      : ", console.cyan)
-    console.pretty_println("%s" % package_name, console.yellow)
-    console.pretty_print("  Sdk Ver   : ", console.cyan)
-    console.pretty_println("%s" % sdk_version, console.yellow)
-    console.pretty_print("  Java Name : ", console.cyan)
-    console.pretty_println("%s" % java_package_name, console.yellow)
-    if is_library:
-        console.pretty_print("  Library   : ", console.cyan)
-        console.pretty_println("yes\n", console.yellow)
-        cmd = ['android', 'create', 'lib-project', '-n', package_name, '-p', path, '-k', java_package_name, '-t', 'android-' + sdk_version, ]
-    else:
-        activity_name = utils.camel_case(package_name)
-        console.pretty_print("  Activity  : ", console.cyan)
-        console.pretty_println("%s\n" % activity_name, console.yellow)
-        cmd = ['android', 'create', 'project', '-n', package_name, '-p', path, '-k', java_package_name, '-t', 'android-' + sdk_version, '-a', activity_name]
+# Finds and reads one of the templates.
+def read_template(tmplf):
+    f = open(tmplf, 'r')
     try:
-        subprocess.check_call(cmd)
-    except subprocess.CalledProcessError:
-        raise subprocess.CalledProcessError("failed to create android project.")
-    # This is in the old form, let's shovel the shit around to the new form
-    utils.mkdir_p(os.path.join(path, 'src', 'main', 'java'))
-    os.remove(os.path.join(path, 'local.properties'))
-    os.remove(os.path.join(path, 'project.properties'))
-    os.remove(os.path.join(path, 'ant.properties'))
-    os.remove(os.path.join(path, 'proguard-project.txt'))
-    os.remove(os.path.join(path, 'build.xml'))
-    os.rmdir(os.path.join(path, 'bin'))
-    os.rmdir(os.path.join(path, 'libs'))
-    shutil.move(os.path.join(path, 'AndroidManifest.xml'), os.path.join(path, 'src', 'main'))
-    shutil.move(os.path.join(path, 'res'), os.path.join(path, 'src', 'main'))
-    if not is_library:
-        shutil.move(os.path.join(path, 'src', java_package_name.split('.')[0]), os.path.join(path, 'src', 'main', 'java'))
-
-##############################################################################
-# Methods acting on classes
-##############################################################################
+        t = f.read()
+    finally:
+        f.close()
+    return t
 
 
 # This inserts the labelled variables into the template wherever the corresponding
 # %package, %brief, %description and %depends is found.
-def instantiate_template(template, package_name, author, plugin_name, sdk_version):
+def instantiate_template(template, repo_name, author):
     return template % locals()
 
 
-def create_gradle_package_files(args, author, is_library, sdk_version):
+def get_templates():
+    template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'init_repo')
+    templates = {}
+    templates['CMakeLists.txt'] = read_template(os.path.join(template_dir, 'CMakeLists.txt.in'))
+    templates['build.gradle'] = read_template(os.path.join(template_dir, 'build.gradle.in'))
+    templates['settings.gradle'] = read_template(os.path.join(template_dir, 'settings.gradle'))
+    return templates
+
+
+def populate_repo(repo_path):
+    author = utils.author_name()
+    repo_name = os.path.basename(repo_path)
+    templates = get_templates()
+    for filename, template in templates.iteritems():
+        contents = instantiate_template(template, repo_name, author)
+        try:
+            p = os.path.abspath(os.path.join(repo_path, filename))
+            f = open(p, 'w')
+            f.write(contents)
+            console.pretty_print("Created repo file: ", console.cyan)
+            console.pretty_println("%s" % p, console.yellow)
+        finally:
+            f.close()
+
+
+def create_gradle_wrapper(repo_path):
+    gradle_binary = os.path.join(os.path.dirname(__file__), 'gradle', 'gradlew')
+    cmd = [gradle_binary, '-p', repo_path, 'wrapper']
+    console.pretty_print("Creating gradle wrapper: ", console.cyan)
+    console.pretty_println("%s" % ' '.join(cmd), console.yellow)
+    try:
+        subprocess.check_call(cmd)
+    except subprocess.CalledProcessError:
+        raise subprocess.CalledProcessError("failed to create the gradle wrapper.")
+
+
+def create_catkin_package_files(package_name, package_path, args):
     '''
       This is almost a direct copy from catkin_create_pkg.
     '''
-    plugin_name = "android-library" if is_library else "android"
     try:
-        package_name = args.name[0].lower()
-        package_path = os.path.abspath(os.path.join(os.getcwd(), package_name))
-        console.pretty_println("\nCreating gradle files", console.bold)
-        for template_name in ['build.gradle']:  # 'CMakeLists.txt']:
-            filename = os.path.join(package_path, template_name)
-            template = read_template_file(template_name)
-            contents = instantiate_template(template, package_name, author, plugin_name, sdk_version)
-            if is_library:
-                contents += extra_gradle_library_text()
-            try:
-                f = open(filename, 'w')
-                f.write(contents)
-                console.pretty_print('  File: ', console.cyan)
-                console.pretty_println(template_name, console.yellow)
-            finally:
-                f.close()
+        build_depends = []
+        if 'rosjava_build_tools' not in args.dependencies:
+            build_depends.append(catkin_pkg.package.Dependency('rosjava_build_tools'))
+        for depend_name in args.dependencies:
+            build_depends.append(catkin_pkg.package.Dependency(depend_name))
+        package_template = PackageTemplate._create_package_template(
+            package_name=package_name,
+            description=args.description,
+            licenses=args.license or [],
+            maintainer_names=args.maintainer,
+            author_names=args.author,
+            version=args.pkg_version,
+            catkin_deps=[],
+            system_deps=[],
+            boost_comps=None)
+        package_template.exports = []
+        package_template.build_depends = build_depends
+        distro_version = utils.distro_version()
+        package_xml = create_package_xml(package_template=package_template, rosdistro=distro_version)
+        try:
+            filename = os.path.join(package_path, 'package.xml')
+            f = open(filename, 'w')
+            f.write(package_xml)
+            console.pretty_print('Created repo file: ', console.cyan)
+            console.pretty_println('%s' % filename, console.yellow)
+        finally:
+            f.close()
     except Exception:
         raise
 
-
-def add_to_root_gradle_settings(name):
-    '''
-      Adds project name to the root level settings.gradle file.
-    '''
-    for rel_path in ['.', '..']:
-        settings_gradle_path = os.path.join(os.getcwd(), rel_path, 'settings.gradle')
-        if os.path.isfile(settings_gradle_path):
-            break
-        else:
-            settings_gradle_path = None
-    if settings_gradle_path is None:
-        console.pretty_println("\nCouldn't find the root level settings.gradle file - not adding to the superproject.")
-        return
-    with open(settings_gradle_path, 'a') as settings_gradle:
-        console.pretty_println("\nIncluding '%s' in the root gradle project configuration (settings.gradle).\n" % name, console.bold)
-        settings_gradle.write("include '%s'\n" % name)
-
-
-def extra_gradle_library_text():
-    text = "\n"
-    text += "/* http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds */\n"
-    text += "android.libraryVariants\n"
-    text += "publishing {\n"
-    text += "    publications {\n"
-    text += "        maven(MavenPublication) {\n"
-    text += "            /* artifact bundleDebug */\n"
-    text += "            artifact bundleRelease\n"
-    text += "        }\n"
-    text += "    }\n"
-    text += "}\n"
-    return text
-
-
-def create_android_package(is_library=False):
-    args = parse_arguments()
-    create_android_project(args.name[0], args.sdk_version, args.android_package_name, is_library)
-    create_gradle_package_files(args, args.author, is_library, args.sdk_version)
-    add_to_root_gradle_settings(args.name[0])
-
 ##############################################################################
-# Borrowed from catkin_pkg.package_templates
+# Methods acting on classes
 ##############################################################################
 
 
-def read_template_file(filename):
-    template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'android_package')
-    template = os.path.join(template_dir, '%s.in' % filename)
-    if not os.path.isfile(template):
-        raise IOError(
-            "Could not read template [%s]" % template
-        )
-    with open(template, 'r') as fhand:
-        template_contents = fhand.read()
-    return template_contents
+def init_android_repo():
+    args = parse_arguments()
+    try:
+        repo_path = utils.validate_path(args.path)
+        repo_name = os.path.basename(os.path.normpath(repo_path)).lower()
+        populate_repo(repo_path)
+        create_catkin_package_files(repo_name, repo_path, args)
+        create_gradle_wrapper(repo_path)
+    except Exception:
+        raise
diff --git a/src/rosjava_build_tools/create_project.py b/src/rosjava_build_tools/create_project.py
new file mode 100644
index 0000000000000000000000000000000000000000..216b4ee880b99eadf4a13aa73d4391e1200ace9d
--- /dev/null
+++ b/src/rosjava_build_tools/create_project.py
@@ -0,0 +1,179 @@
+#!/usr/bin/env python
+#
+# License: Apache 2.0
+#   https://raw.github.com/rosjava/rosjava_build_tools/license/LICENSE
+#
+
+##############################################################################
+# Imports
+##############################################################################
+
+from __future__ import print_function
+
+import os
+import sys
+import argparse
+import subprocess
+import shutil
+
+# local imports
+import utils
+import console
+
+##############################################################################
+# Methods
+##############################################################################
+
+
+def parse_arguments():
+    argv = sys.argv[1:]
+    parser = argparse.ArgumentParser(
+        description='Creates a new android package based on catkin and gradle. \n')
+    parser.add_argument('name',
+                        nargs=1,
+                        help='The name for the package')
+    parser.add_argument('-s', '--sdk-version',
+                        action='store',
+                        default='17',
+                        help='Android sdk version [17]')
+    parser.add_argument('-p', '--android-package-name',
+                        action='store',
+                        default='com.github.rosjava.android.pkg_name',
+                        help='Android package name (e.g. com.github.rosjava.android.pkg_name)')
+    parser.add_argument('-a', '--author',
+                        action='store',
+                        default=utils.author_name(),
+                        help='A single author, may be used multiple times')
+    args = parser.parse_args(argv)
+    if args.android_package_name == "com.github.rosjava.android.pkg_name":
+        args.android_package_name = "com.github.rosjava.android.%s" % args.name[0].lower()
+    return args
+
+
+def create_android_project(package_name, sdk_version, java_package_name, is_library):
+    path = os.path.join(os.getcwd(), package_name.lower())
+    console.pretty_println("\nCreating android project ", console.bold)
+    console.pretty_print("  Name      : ", console.cyan)
+    console.pretty_println("%s" % package_name, console.yellow)
+    console.pretty_print("  Sdk Ver   : ", console.cyan)
+    console.pretty_println("%s" % sdk_version, console.yellow)
+    console.pretty_print("  Java Name : ", console.cyan)
+    console.pretty_println("%s" % java_package_name, console.yellow)
+    if is_library:
+        console.pretty_print("  Library   : ", console.cyan)
+        console.pretty_println("yes\n", console.yellow)
+        cmd = ['android', 'create', 'lib-project', '-n', package_name, '-p', path, '-k', java_package_name, '-t', 'android-' + sdk_version, ]
+    else:
+        activity_name = utils.camel_case(package_name)
+        console.pretty_print("  Activity  : ", console.cyan)
+        console.pretty_println("%s\n" % activity_name, console.yellow)
+        cmd = ['android', 'create', 'project', '-n', package_name, '-p', path, '-k', java_package_name, '-t', 'android-' + sdk_version, '-a', activity_name]
+    try:
+        subprocess.check_call(cmd)
+    except subprocess.CalledProcessError:
+        raise subprocess.CalledProcessError("failed to create android project.")
+    # This is in the old form, let's shovel the shit around to the new form
+    utils.mkdir_p(os.path.join(path, 'src', 'main', 'java'))
+    os.remove(os.path.join(path, 'local.properties'))
+    os.remove(os.path.join(path, 'project.properties'))
+    os.remove(os.path.join(path, 'ant.properties'))
+    os.remove(os.path.join(path, 'proguard-project.txt'))
+    os.remove(os.path.join(path, 'build.xml'))
+    os.rmdir(os.path.join(path, 'bin'))
+    os.rmdir(os.path.join(path, 'libs'))
+    shutil.move(os.path.join(path, 'AndroidManifest.xml'), os.path.join(path, 'src', 'main'))
+    shutil.move(os.path.join(path, 'res'), os.path.join(path, 'src', 'main'))
+    if not is_library:
+        shutil.move(os.path.join(path, 'src', java_package_name.split('.')[0]), os.path.join(path, 'src', 'main', 'java'))
+
+##############################################################################
+# Methods acting on classes
+##############################################################################
+
+
+# This inserts the labelled variables into the template wherever the corresponding
+# %package, %brief, %description and %depends is found.
+def instantiate_template(template, package_name, author, plugin_name, sdk_version):
+    return template % locals()
+
+
+def create_gradle_package_files(args, author, is_library, sdk_version):
+    '''
+      This is almost a direct copy from catkin_create_pkg.
+    '''
+    plugin_name = "android-library" if is_library else "android"
+    try:
+        package_name = args.name[0].lower()
+        package_path = os.path.abspath(os.path.join(os.getcwd(), package_name))
+        console.pretty_println("\nCreating gradle files", console.bold)
+        for template_name in ['build.gradle']:  # 'CMakeLists.txt']:
+            filename = os.path.join(package_path, template_name)
+            template = read_template_file(template_name)
+            contents = instantiate_template(template, package_name, author, plugin_name, sdk_version)
+            if is_library:
+                contents += extra_gradle_library_text()
+            try:
+                f = open(filename, 'w')
+                f.write(contents)
+                console.pretty_print('  File: ', console.cyan)
+                console.pretty_println(template_name, console.yellow)
+            finally:
+                f.close()
+    except Exception:
+        raise
+
+
+def add_to_root_gradle_settings(name):
+    '''
+      Adds project name to the root level settings.gradle file.
+    '''
+    for rel_path in ['.', '..']:
+        settings_gradle_path = os.path.join(os.getcwd(), rel_path, 'settings.gradle')
+        if os.path.isfile(settings_gradle_path):
+            break
+        else:
+            settings_gradle_path = None
+    if settings_gradle_path is None:
+        console.pretty_println("\nCouldn't find the root level settings.gradle file - not adding to the superproject.")
+        return
+    with open(settings_gradle_path, 'a') as settings_gradle:
+        console.pretty_println("\nIncluding '%s' in the root gradle project configuration (settings.gradle).\n" % name, console.bold)
+        settings_gradle.write("include '%s'\n" % name)
+
+
+def extra_gradle_library_text():
+    text = "\n"
+    text += "/* http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds */\n"
+    text += "android.libraryVariants\n"
+    text += "publishing {\n"
+    text += "    publications {\n"
+    text += "        maven(MavenPublication) {\n"
+    text += "            /* artifact bundleDebug */\n"
+    text += "            artifact bundleRelease\n"
+    text += "        }\n"
+    text += "    }\n"
+    text += "}\n"
+    return text
+
+
+def create_android_project(is_library=False):
+    args = parse_arguments()
+    create_android_project(args.name[0], args.sdk_version, args.android_package_name, is_library)
+    create_gradle_package_files(args, args.author, is_library, args.sdk_version)
+    add_to_root_gradle_settings(args.name[0])
+
+##############################################################################
+# Borrowed from catkin_pkg.package_templates
+##############################################################################
+
+
+def read_template_file(filename):
+    template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'android_project')
+    template = os.path.join(template_dir, '%s.in' % filename)
+    if not os.path.isfile(template):
+        raise IOError(
+            "Could not read template [%s]" % template
+        )
+    with open(template, 'r') as fhand:
+        template_contents = fhand.read()
+    return template_contents
diff --git a/src/rosjava_build_tools/init_repo.py b/src/rosjava_build_tools/init_repo.py
deleted file mode 100644
index 1db93152da048b8ced737d52fc0bfec8f4cfde74..0000000000000000000000000000000000000000
--- a/src/rosjava_build_tools/init_repo.py
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/usr/bin/env python
-#
-# License: Apache 2.0
-#   https://raw.github.com/rosjava/rosjava_build_tools/license/LICENSE
-#
-
-##############################################################################
-# Imports
-##############################################################################
-
-import os
-import sys
-import argparse
-import subprocess
-import catkin_pkg
-from catkin_pkg.package_templates import create_package_xml, PackageTemplate
-
-# local imports
-import utils
-import console
-
-##############################################################################
-# Methods
-##############################################################################
-
-
-def parse_arguments():
-    argv = sys.argv[1:]
-    parser = argparse.ArgumentParser(
-        description='Creates a new android repository based on catkin and gradle. \n\nNote that the path you provide will become the maven group for your repo.\n')
-    parser.add_argument('path', nargs='?', default=os.getcwd(), help='path to the repository you wish to create (must not exist beforehand).')
-    parser.add_argument('dependencies',
-                        nargs='*',
-                        help='Dependency list')
-    parser.add_argument('-l', '--license',
-                        action='append',
-                        default=["Apache 2.0"],
-                        help='Name for License, (e.g. BSD, MIT, GPLv3...)[BSD]')
-    parser.add_argument('-a', '--author',
-                        action='append',
-                        help='A single author, may be used multiple times')
-    parser.add_argument('-m', '--maintainer',
-                        action='append',
-                        help='A single maintainer, may be used multiple times')
-    parser.add_argument('-V', '--pkg_version',
-                        action='store',
-                        default="0.1.0",
-                        help='Initial Package version [0.1.0]')
-    parser.add_argument('-D', '--description',
-                        action='store',
-                        help='Description')
-    args = parser.parse_args(argv)
-#    if not args.author:
-#        args.author = []
-#        args.author.append(utils.author_name)
-#    if not args.maintainer:
-#        args.maintainer = []
-#        args.maintainer.append(catkin_pkg.package.Person(utils.author_name))
-#    else:
-#        args.maintainer = []
-#        args.maintainer.append(catkin_pkg.package.Person(utils.author_name))
-    return args
-
-
-# Finds and reads one of the templates.
-def read_template(tmplf):
-    f = open(tmplf, 'r')
-    try:
-        t = f.read()
-    finally:
-        f.close()
-    return t
-
-
-# This inserts the labelled variables into the template wherever the corresponding
-# %package, %brief, %description and %depends is found.
-def instantiate_template(template, repo_name, author):
-    return template % locals()
-
-
-def get_templates():
-    template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'init_repo')
-    templates = {}
-    templates['CMakeLists.txt'] = read_template(os.path.join(template_dir, 'CMakeLists.txt.in'))
-    templates['build.gradle'] = read_template(os.path.join(template_dir, 'build.gradle.in'))
-    templates['settings.gradle'] = read_template(os.path.join(template_dir, 'settings.gradle'))
-    return templates
-
-
-def populate_repo(repo_path):
-    author = utils.author_name()
-    repo_name = os.path.basename(repo_path)
-    templates = get_templates()
-    for filename, template in templates.iteritems():
-        contents = instantiate_template(template, repo_name, author)
-        try:
-            p = os.path.abspath(os.path.join(repo_path, filename))
-            f = open(p, 'w')
-            f.write(contents)
-            console.pretty_print("Created repo file: ", console.cyan)
-            console.pretty_println("%s" % p, console.yellow)
-        finally:
-            f.close()
-
-
-def create_gradle_wrapper(repo_path):
-    gradle_binary = os.path.join(os.path.dirname(__file__), 'gradle', 'gradlew')
-    cmd = [gradle_binary, '-p', repo_path, 'wrapper']
-    console.pretty_print("Creating gradle wrapper: ", console.cyan)
-    console.pretty_println("%s" % ' '.join(cmd), console.yellow)
-    try:
-        subprocess.check_call(cmd)
-    except subprocess.CalledProcessError:
-        raise subprocess.CalledProcessError("failed to create the gradle wrapper.")
-
-
-def create_catkin_package_files(package_name, package_path, args):
-    '''
-      This is almost a direct copy from catkin_create_pkg.
-    '''
-    try:
-        build_depends = []
-        if 'rosjava_build_tools' not in args.dependencies:
-            build_depends.append(catkin_pkg.package.Dependency('rosjava_build_tools'))
-        for depend_name in args.dependencies:
-            build_depends.append(catkin_pkg.package.Dependency(depend_name))
-        package_template = PackageTemplate._create_package_template(
-            package_name=package_name,
-            description=args.description,
-            licenses=args.license or [],
-            maintainer_names=args.maintainer,
-            author_names=args.author,
-            version=args.pkg_version,
-            catkin_deps=[],
-            system_deps=[],
-            boost_comps=None)
-        package_template.exports = []
-        package_template.build_depends = build_depends
-        distro_version = utils.distro_version()
-        package_xml = create_package_xml(package_template=package_template, rosdistro=distro_version)
-        try:
-            filename = os.path.join(package_path, 'package.xml')
-            f = open(filename, 'w')
-            f.write(package_xml)
-            console.pretty_print('Created repo file: ', console.cyan)
-            console.pretty_println('%s' % filename, console.yellow)
-        finally:
-            f.close()
-    except Exception:
-        raise
-
-##############################################################################
-# Methods acting on classes
-##############################################################################
-
-
-def init_android_repo():
-    args = parse_arguments()
-    try:
-        repo_path = utils.validate_path(args.path)
-        repo_name = os.path.basename(os.path.normpath(repo_path)).lower()
-        populate_repo(repo_path)
-        create_catkin_package_files(repo_name, repo_path, args)
-        create_gradle_wrapper(repo_path)
-    except Exception:
-        raise
diff --git a/src/rosjava_build_tools/templates/android_package/build.gradle.in b/src/rosjava_build_tools/templates/android_project/build.gradle.in
similarity index 72%
rename from src/rosjava_build_tools/templates/android_package/build.gradle.in
rename to src/rosjava_build_tools/templates/android_project/build.gradle.in
index 307847c427a0fcb23e2b116eade6a86e46f44bd1..fa93846e67dec4f907ee355d9e603492be85bb5a 100644
--- a/src/rosjava_build_tools/templates/android_package/build.gradle.in
+++ b/src/rosjava_build_tools/templates/android_project/build.gradle.in
@@ -18,12 +18,16 @@
  Examples of 
    1) dependencies from another project in this gradle stack.
    2,3) dependency from a maven repository.
+   
+   It's a good idea to use + on the patch version dependency to
+   save continually updating these references, but avoid applying
+   the same principle to api breaking minor changes in the version.
 */
 /* 
 dependencies {
   compile project(':local_android_library_dependency')
-  compile 'ros.android_core:android_gingerbread_mr1:0.0.0-SNAPSHOT'
-  compile 'com.github.ros_java.android_extras:gingerbread:0.1.0'
+  compile 'org.ros.android_core:android_gingerbread_mr1:0.1.+'
+  compile 'com.github.ros_java.android_extras:gingerbread:0.1.+'
 }
 */
 
@@ -31,6 +35,5 @@ apply plugin: '%(plugin_name)s'
 
 android {
     compileSdkVersion %(sdk_version)s
-    buildToolsVersion androidBuildToolsVersion
 }
  
diff --git a/src/rosjava_build_tools/templates/init_repo/CMakeLists.txt.in b/src/rosjava_build_tools/templates/init_repo/CMakeLists.txt.in
index 0b6c4e8b8de5cc267b6b4c3110f1442ee5c66f50..b71f2fbe1f88ec7ec70cf788268373c027d8893c 100644
--- a/src/rosjava_build_tools/templates/init_repo/CMakeLists.txt.in
+++ b/src/rosjava_build_tools/templates/init_repo/CMakeLists.txt.in
@@ -10,5 +10,6 @@ project(%(repo_name)s)
 ##############################################################################
 
 find_package(catkin REQUIRED rosjava_build_tools)
-catkin_android_setup()
+# Set the gradle targets you want catkin's make to run by default
+catkin_android_setup(assembleRelease uploadArchives)
 catkin_package()
diff --git a/src/rosjava_build_tools/templates/init_repo/build.gradle.in b/src/rosjava_build_tools/templates/init_repo/build.gradle.in
index 7e724223762efb871eb5c599741d3a7c4512e4b5..b111f43d64316482691b261d20cfc6b6bf31b2e4 100644
--- a/src/rosjava_build_tools/templates/init_repo/build.gradle.in
+++ b/src/rosjava_build_tools/templates/init_repo/build.gradle.in
@@ -15,52 +15,38 @@
  */
 
 task wrapper(type: Wrapper) {
-  gradleVersion = '1.6'
+    gradleVersion = '1.7'
 }
 
-allprojects {
-  group 'ros.%(repo_name)s'
-  version = '0.1.0'
-}
-
-ext.androidBuildToolsVersion = "17"
-
-subprojects {
-    buildscript {
-        repositories {
-            mavenCentral()
-        }
-        dependencies {
-            classpath 'com.android.tools.build:gradle:0.5.0'
-        }
-    }
-    
-    apply plugin: 'maven'
-
+buildscript {
+    def rosMavenPath = "$System.env.ROS_MAVEN_PATH".split(':').collect { 'file://' + it }
     repositories {
+        rosMavenPath.each { p ->
+            maven {
+                url p
+            }
+        }
         mavenLocal()
         maven {
             url 'https://github.com/rosjava/rosjava_mvn_repo/raw/master'
         }
     }
-    configurations.add('compile') {
-        exclude group: 'junit'
-        exclude group: 'xml-apis'
+    dependencies {
+        classpath group: 'org.ros.rosjava_bootstrap', name: 'gradle_plugins', version: '0.1.+'
     }
+}
 
-    uploadArchives {
-        repositories {
-            mavenDeployer {
-                repository url: 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
-            }
-        }
-    }
-    task publishToMavenLocal() << {
-        description = 'installs .aar files to the local maven repository.'
-    }
-    afterEvaluate { Project project ->
-        if (plugins.findPlugin('android-library')) {
-            publishToMavenLocal.dependsOn('uploadArchives')
-        }
-    }
+apply plugin: 'catkin'
+
+
+allprojects {
+    /* A github url provides a good standard unique name for your project */
+    group 'com.github.rosjava.%(repo_name)s'
+    version = project.catkin.pkg.version
+}
+
+subprojects {
+    /* See https://github.com/rosjava/rosjava_bootstrap (look for gradle_plugins)
+       to see what is going on under the hood. */
+    apply plugin: 'ros-android'
 }