diff --git a/buck-tools/BUCK b/buck-tools/BUCK
index 96c787a..1b8e549 100644
--- a/buck-tools/BUCK
+++ b/buck-tools/BUCK
@@ -6,6 +6,21 @@
 )
 
 python_binary(
+  name = 'onos-app-writer',
+  main = 'onos_app.py',
+  deps = [],
+  visibility = ['PUBLIC'],
+)
+
+python_binary(
+  name = 'onos-app-oar',
+  main = 'onos_oar.py',
+  deps = [],
+  visibility = ['PUBLIC'],
+)
+
+
+python_binary(
   name = 'pack_war',
   main = 'pack_war.py',
   deps = [':util'],
diff --git a/buck-tools/default.defs b/buck-tools/default.defs
index 5ed0fea..24caa38 100644
--- a/buck-tools/default.defs
+++ b/buck-tools/default.defs
@@ -1,9 +1,10 @@
 include_defs('//bucklets/maven_jar.bucklet')
 include_defs('//bucklets/onos.bucklet')
+include_defs('//bucklets/onos_app.bucklet')
 
 BASE_DEPS = [
     '//lib:junit',
     '//lib:hamcrest-all',
     '//lib:slf4j-api',
     '//lib:guava-testlib',
-]
+]
\ No newline at end of file
diff --git a/buck-tools/onos_app.py b/buck-tools/onos_app.py
new file mode 100755
index 0000000..ab2dfc6
--- /dev/null
+++ b/buck-tools/onos_app.py
@@ -0,0 +1,161 @@
+#!/usr/bin/env python
+#FIXME Add license
+
+##### Templates for features.xml
+FEATURES_HEADER = '''\
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
+          name="%(feature_repo_name)s">
+'''
+FEATURE_HEADER= '''\
+    <feature name="%(feature_name)s" version="%(version)s"
+             description="%(title)s">
+'''
+EXISTING_FEATURE = '        <feature>%s</feature>\n'
+BUNDLE = '        <bundle>%s</bundle>\n'
+FEATURE_FOOTER = '    </feature>\n'
+FEATURES_FOOTER = '</features>'
+
+##### Templates for app.xml
+APP_HEADER = '''\
+<?xml version="1.0" encoding="UTF-8"?>
+<app name="%(app_name)s" origin="%(origin)s" version="%(version)s"
+        title="%(title)s" category="%(category)s" url="%(url)s"
+        featuresRepo="%(feature_repo_name)s"
+        features="%(feature_name)s" apps="%(apps)s">
+    <description>%(description)s</description>
+'''
+ARTIFACT = '    <artifact>%s</artifact>\n'
+APP_FOOTER = '</app>'
+
+
+def mvnUrl(bundle):
+    return 'mvn:' + bundle.replace(':', '/')
+
+def generateFeatureFile(feature_name,
+                        version,
+                        title,
+                        feature_repo_name,
+                        features = [],
+                        bundles = [],
+                        **kwargs):
+    values = {
+        'feature_name' : feature_name,
+        'version' : version,
+        'title' : title,
+        'feature_repo_name' : '-'.join(feature_repo_name.split(':')[1:3]),
+    }
+
+    output = FEATURES_HEADER % values + FEATURE_HEADER % values
+
+    for feature in features:
+        output += EXISTING_FEATURE % feature
+
+    for bundle in bundles:
+        output += BUNDLE % mvnUrl(bundle)
+
+    output += FEATURE_FOOTER + FEATURES_FOOTER
+    return output
+
+def generateAppFile(app_name,
+                    origin,
+                    version,
+                    title,
+                    category,
+                    url,
+                    feature_repo_name,
+                    feature_name,
+                    description = None,
+                    apps = [],
+                    artifacts = [],
+                    **kwargs):
+    values = {
+        'app_name' : app_name,
+        'origin' : origin,
+        'version' : version,
+        'title' : title,
+        'category' : category,
+        'url' : url,
+        'feature_repo_name' : mvnUrl(feature_repo_name) + '/xml/features',
+        'feature_name' : feature_name,
+    }
+
+    values['description'] = description if description else title
+    values['apps'] = ','.join(apps) if apps else ''
+
+    output = APP_HEADER % values
+
+    for artifact in artifacts:
+        output += ARTIFACT % mvnUrl(artifact)
+
+    output += APP_FOOTER
+    return output
+
+
+if __name__ == '__main__':
+    import sys, optparse
+
+    parser = optparse.OptionParser()
+    parser.add_option("-n", "--name",     dest="feature_name", help="Feature Name")
+    parser.add_option("-a", "--app",      dest="app_name",     help="App Name")
+    parser.add_option("-o", "--origin",   dest="origin",       help="Origin")
+    parser.add_option("-c", "--category", dest="category",     help="Category")
+    parser.add_option("-u", "--url",      dest="url",          help="URL")
+    parser.add_option("-v", "--version",  dest="version",      help="Version")
+    parser.add_option("-t", "--title",    dest="title",        help="Title")
+    parser.add_option("-r", "--repo",     dest="repo_name",    help="Repo Name")
+
+    parser.add_option('-b', '--bundle',
+                      action="append", dest='included_bundles',
+                      metavar="BUNDLE", help='Included Bundle (multiple allowed)')
+    parser.add_option('-e', '--excluded-bundle',
+                      action="append", dest='excluded_bundles',
+                      metavar="BUNDLE", help='Excluded Bundle (multiple allowed)')
+    parser.add_option('-f', '--feature',
+                      action="append", dest='features',
+                      metavar="FEATURE", help='Existing Feature (multiple allowed)')
+    parser.add_option('-d', '--apps',
+                      action="append", dest='apps',
+                      metavar="FEATURE", help='Required App (multiple allowed)')
+
+    parser.add_option("-A", "--write-app", dest="write_app", action="store_true")
+    parser.add_option("-F", "--write-features", dest="write_features", action="store_true")
+
+    (options, args) = parser.parse_args()
+
+    values = {}
+    if options.feature_name and options.version and options.title:
+        values['feature_name'] = options.feature_name.split(':')[1]
+        values['version'] = options.version
+        values['title'] = options.title
+    else:
+        sys.stderr.write('ERROR: Feature Name, Version, and Title are required\n')
+        sys.stderr.flush()
+        sys.exit(1)
+
+    if options.app_name and options.origin and options.category and options.url:
+        values['app_name'] = options.app_name
+        values['origin'] = options.origin
+        values['category'] = options.category
+        values['url'] = options.url
+    elif options.write_app:
+        sys.stderr.write('ERROR: Feature Name, Version, and Title are required\n')
+        sys.stderr.flush()
+        sys.exit(1)
+
+    values['feature_repo_name'] = options.repo_name if options.repo_name \
+                                    else options.feature_name
+
+    if options.write_features:
+        bundles = []
+        if options.included_bundles:
+            bundles += options.included_bundles
+        if options.excluded_bundles:
+            bundles += options.excluded_bundles
+        print generateFeatureFile(bundles=bundles,
+                                  features=options.features,
+                                  **values)
+    if options.write_app:
+        print generateAppFile(artifacts=options.included_bundles,
+                              apps=options.apps,
+                              **values)
\ No newline at end of file
diff --git a/buck-tools/onos_oar.py b/buck-tools/onos_oar.py
new file mode 100755
index 0000000..99fd498
--- /dev/null
+++ b/buck-tools/onos_oar.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+#FIXME Add license
+
+from zipfile import ZipFile
+
+def generateOar(output, files=[]):
+    # Note this is not a compressed zip
+    with ZipFile(output, 'w') as zip:
+        for file, mvnCoords in files:
+            filename = file.split('/')[-1]
+            if mvnCoords == 'NONE':
+                dest = filename
+            else:
+                groupId, artifactId, version = mvnCoords.split(':')
+                groupId = groupId.replace('.', '/')
+                extension = filename.split('.')[-1]
+                if extension == 'jar':
+                    filename = '%s-%s.jar' % ( artifactId, version )
+                dest = 'm2/%s/%s/%s/%s' % ( groupId, artifactId, version, filename )
+            print file, '->', dest
+            zip.write(file, dest)
+
+if __name__ == '__main__':
+    import sys
+
+    if len(sys.argv) < 2:
+        print 'USAGE'
+        sys.exit(1)
+
+    output = sys.argv[1]
+    args = sys.argv[2:]
+
+    if len(args) % 2 != 0:
+        print 'There must be an even number of args: file mvn_coords'
+        sys.exit(2)
+
+    files = zip(*[iter(args)]*2)
+    generateOar(output, files)
