diff --git a/tools/build/onos-release b/tools/build/onos-release
index 4cb931f..1546fb2 100755
--- a/tools/build/onos-release
+++ b/tools/build/onos-release
@@ -18,6 +18,7 @@
 
 # Change the version
 onos-change-version $NEW_VERSION
+export ONOS_VERSION=$NEW_VERSION
 
 # Build ONOS & deploy to staging repo using the release profile.
 onos-build && onos-package && mvn -Prelease clean deploy -DskipTests
diff --git a/tools/build/onos-upload-bits b/tools/build/onos-upload-bits
index 3ac6bd6..ae5b9c2 100755
--- a/tools/build/onos-upload-bits
+++ b/tools/build/onos-upload-bits
@@ -2,9 +2,11 @@
 # -----------------------------------------------------------------------------
 # Uploads ONOS distributable bits.
 # -----------------------------------------------------------------------------
-
 [ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
 . $ONOS_ROOT/tools/build/envDefaults
 
-# TODO: upload to EC2
+#FIXME need to export s3Creds
+#FIXME verify that ONOS_VERSION is set
 
+# upload to EC2
+upload-to-s3 -d release/ /tmp/onos-$ONOS_VERSION.*
diff --git a/tools/build/upload-to-s3 b/tools/build/upload-to-s3
new file mode 100755
index 0000000..8b02d3b
--- /dev/null
+++ b/tools/build/upload-to-s3
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+
+"""
+Upload a file to S3
+"""
+
+from sys import argv, stdout
+from time import time
+from os.path import basename
+from optparse import OptionParser
+
+from boto.s3.key import Key
+from boto.s3.connection import S3Connection
+
+
+def uploadFile( bucket, filename, dest=None ):
+    "Upload a file to a bucket"
+    if not bucket:
+        bucket = 'onos'
+    if not dest: 
+        key = basename( filename )
+    else:
+        key = dest + basename( filename ) #FIXME add the /
+    print '* Uploading', filename, 'to bucket', bucket, 'as', key
+    stdout.flush()
+    start = time()
+    def callback( transmitted, size ):
+        "Progress callback for set_contents_from_filename"
+        elapsed = time() - start
+        percent = 100.0 * transmitted / size
+        kbps = .001 * transmitted / elapsed
+        print ( '\r%d bytes transmitted of %d (%.2f%%),'
+                ' %.2f KB/sec ' %
+                ( transmitted, size, percent, kbps ) ),
+        stdout.flush()
+    conn = S3Connection()
+    bucket = conn.get_bucket( bucket )
+    k = Key( bucket )
+    k.key = key
+    k.set_contents_from_filename( filename, cb=callback, num_cb=100 )
+    print
+    elapsed = time() - start
+    print "* elapsed time: %.2f seconds" % elapsed
+
+if __name__ == '__main__':
+    usage = "Usage: %prog [options] <file to upload>"
+    parser = OptionParser(usage=usage)
+    parser.add_option("-b", "--bucket", dest="bucket",
+                      help="Bucket on S3")
+    parser.add_option("-d", "--dest", dest="dest",
+                      help="Destination path in bucket")
+    parser.add_option("-k", "--key", dest="awsKey",
+                      help="Bucket on S3")
+    parser.add_option("-s", "--secret", dest="awsSecret",
+                      help="Bucket on S3")
+    (options, args) = parser.parse_args()
+    
+    if len( args ) == 0:
+        parser.error("missing filenames")
+    for file in args:
+        uploadFile( options.bucket, file, options.dest )
+
+    #FIXME key and secret are unused
