diff --git a/README.install b/README.install
index 45de260..da4ab4c 100644
--- a/README.install
+++ b/README.install
@@ -1,22 +1,42 @@
 NDN.JS: A javascript client library for Named Data Networking
+-------------------------------------------------------------
 
-BASIC LIBRARY: NO BUILD REQUIRED. 
+BASIC LIBRARY: NO BUILD REQUIRED
+================================
 The basic NDN.JS library does not need to be "built".  For the library, you can manually
 include the necessary scripts in a web page or include Helper.js to have it load all of
 the scripts.
 
-BUILD A COMBINED, COMPRESSED LIBRARY. 
+BUILD A COMBINED, COMPRESSED LIBRARY 
+====================================
+
 A more efficient way to include the library is to used the combined, compressed library
 ndn-js.js that can be made using the js/tools/build/make-js.sh script.  See the README in
 that directly.  While we try to keep a built version in that directory for convenience, it
 may fall out of sync with the library, so we recommend building it using the script if
 possible.
 
-WEBSOCKETS PROXY. 
+To create a combined and optionally compressed version of NDN.JS scripts:
+
+    ./waf configure --no-ws --prefix=<PREFIX_TO_INSTALL_JS> --compiler
+    ./waf install
+
+These commands will create a combined version, combined version compressed using  Google's
+Closure Compiler, and install it into <PREFIX_TO_INSTALL_JS> folder.
+
+The compressed version is what we recommend including in applications.
+
+
+WEBSOCKETS PROXY
+================
+
 If you wish to run your own WebSockets proxy instead of using the NDN testbed, you must
 build and install Node.js (often on the machine also running the ccnd you wish to proxy
 for, but that doesn't have to be the case).  See wsproxy/README.md
 
-THE FIREFOX ADD-ON.
+THE FIREFOX ADD-ON
+==================
+
 If the compressed library js/tools/build/ndn-js.js is out of date, first build it (see above).
-Go to js/ndnProtocol and run make-ndnProtocol.sh which makes js/ndnProtocol.xpi .
+Go to js/ndnProtocol and run make-ndnProtocol.sh which makes js/ndnProtocol.xpi.
+
diff --git a/wscript b/wscript
index 36530f2..72b9c4b 100644
--- a/wscript
+++ b/wscript
@@ -12,95 +12,105 @@
 import urllib, subprocess, os, shutil
 
 def options (opt):
-    opt.add_option('--js-path', action='store',dest='js_path',
-                   help='''Path to install combined and compressed .js files''')
-    opt.add_option('--yui',action='store_true',default=False,dest='yui',
-                   help='''Download and use yuicompressor-2.4.7 (http://yui.github.com/yuicompressor/)''')
-    opt.add_option('--compiler',action='store_true',default=False,dest='compiler',
-                   help='''Download and use closure-compiler-r2388 (https://code.google.com/p/closure-compiler/)''')
+    js = opt.add_option_group ("ndn.js compilation options")
+
+    js.add_option('--no-js',action='store_false',default=True,dest='js',
+                  help='''Disable ndn.js compilation and installation''')
+    js.add_option('--yui',action='store_true',default=False,dest='yui',
+                  help='''Download and use yuicompressor-2.4.7 (http://yui.github.com/yuicompressor/)''')
+    js.add_option('--compiler',action='store_true',default=False,dest='compiler',
+                  help='''Download and use closure-compiler-r2388 (https://code.google.com/p/closure-compiler/)''')
+
+    ws = opt.add_option_group ("ws-proxy options")
+    ws.add_option ('--no-ws',action='store_false',default=True,dest='ws',
+                   help='''Disable ws-proxy installation''')
 
 def configure (conf):
-    if conf.options.yui:
-        conf.start_msg ("Checking for yuicompressor")
-        if os.path.exists('tools/yuicompressor.jar'):
-            conf.end_msg('tools/yuicompressor.jar')
-            conf.env.HAVE_YUI = 1
-        else:
-            conf.end_msg('not found','YELLOW')
-            url="%s%s.zip" % (YUICOMPRESSOR_URL, YUICOMPRESSOR_NAME)
-            Logs.info ("Downloading yuicompressor from %s..." % url)
-            urllib.urlretrieve (url, "build/yuicompressor.zip")
+    if conf.options.js:
+        conf.env.JS = 1
+        if conf.options.yui:
+            conf.start_msg ("Checking for yuicompressor")
+            if os.path.exists('tools/yuicompressor.jar'):
+                conf.end_msg('tools/yuicompressor.jar')
+                conf.env.HAVE_YUI = 1
+            else:
+                conf.end_msg('not found','YELLOW')
+                url="%s%s.zip" % (YUICOMPRESSOR_URL, YUICOMPRESSOR_NAME)
+                Logs.info ("Downloading yuicompressor from %s..." % url)
+                urllib.urlretrieve (url, "build/yuicompressor.zip")
 
-            filename='%s/build/%s.jar' % (YUICOMPRESSOR_NAME,YUICOMPRESSOR_NAME)
-            subprocess.check_call (['unzip', '-qq', '-o', '-j', 'build/yuicompressor.zip',
-                                    filename, '-d', 'tools/'])
-            os.rename ("tools/%s.jar" % YUICOMPRESSOR_NAME, "tools/yuicompressor.jar")
-            conf.env.HAVE_YUI = 1
+                filename='%s/build/%s.jar' % (YUICOMPRESSOR_NAME,YUICOMPRESSOR_NAME)
+                subprocess.check_call (['unzip', '-qq', '-o', '-j', 'build/yuicompressor.zip',
+                                        filename, '-d', 'tools/'])
+                os.rename ("tools/%s.jar" % YUICOMPRESSOR_NAME, "tools/yuicompressor.jar")
+                conf.env.HAVE_YUI = 1
 
-    if conf.options.compiler:
-        conf.start_msg ("Checking for closure-compiler")
-        if os.path.exists('tools/compiler.jar'):
-            conf.end_msg('tools/compiler.jar')
-            conf.env.HAVE_COMPILER = 1
-        else:
-            conf.end_msg('not found','YELLOW')
-            Logs.info ("Downloading closure-compiler from %s..." % CLOSURE_COMPILER)
-            urllib.urlretrieve (CLOSURE_COMPILER, "build/closure-compiler.zip")
+        if conf.options.compiler:
+            conf.start_msg ("Checking for closure-compiler")
+            if os.path.exists('tools/compiler.jar'):
+                conf.end_msg('tools/compiler.jar')
+                conf.env.HAVE_COMPILER = 1
+            else:
+                conf.end_msg('not found','YELLOW')
+                Logs.info ("Downloading closure-compiler from %s..." % CLOSURE_COMPILER)
+                urllib.urlretrieve (CLOSURE_COMPILER, "build/closure-compiler.zip")
 
-            subprocess.check_call (['unzip', '-qq', '-o', '-j', 'build/closure-compiler.zip', 'compiler.jar', '-d', 'tools/'])
-            conf.env.HAVE_COMPILER = 1
+                subprocess.check_call (['unzip', '-qq', '-o', '-j', 'build/closure-compiler.zip', 'compiler.jar', '-d', 'tools/'])
+                conf.env.HAVE_COMPILER = 1
 
-    if conf.options.js_path:
-        conf.env.JS_PATH = conf.options.js_path
+    if conf.options.ws:
+        conf.env.WS = 1
 
 def build (bld):
-    securityLib = ["contrib/securityLib/sha256.js",
-                   "contrib/securityLib/base64.js",
-                   "contrib/securityLib/rsa.js",
-                   "contrib/securityLib/rsa2.js",
-                   "contrib/securityLib/rsapem-1.1.js",
-                   "contrib/securityLib/rsasign-1.2.js",
-                   "contrib/securityLib/asn1hex-1.1.js",
-                   "contrib/securityLib/x509-1.1.js",
-                   "contrib/securityLib/jsbn.js",
-                   "contrib/securityLib/jsbn2.js"]
+    if bld.env['JS']:
+        securityLib = ["contrib/securityLib/sha256.js",
+                       "contrib/securityLib/base64.js",
+                       "contrib/securityLib/rsa.js",
+                       "contrib/securityLib/rsa2.js",
+                       "contrib/securityLib/rsapem-1.1.js",
+                       "contrib/securityLib/rsasign-1.2.js",
+                       "contrib/securityLib/asn1hex-1.1.js",
+                       "contrib/securityLib/x509-1.1.js",
+                       "contrib/securityLib/jsbn.js",
+                       "contrib/securityLib/jsbn2.js"]
 
-    ndnjs = ["js/Closure.js",
-             "js/WebSocketTransport.js",
-             "js/util/CCNProtocolDTags.js",
-             "js/util/CCNTime.js",
-             "js/util/ExponentialReExpressClosure.js",
-             "js/Name.js",
-             "js/ContentObject.js",
-             "js/encoding/DateFormat.js",
-             "js/Interest.js",
-             "js/Key.js",
-             "js/PublisherID.js",
-             "js/PublisherPublicKeyDigest.js",
-             "js/FaceInstance.js",
-             "js/ForwardingEntry.js",
-             "js/encoding/DynamicUint8Array.js",
-             "js/encoding/BinaryXMLEncoder.js",
-             "js/encoding/BinaryXMLDecoder.js",
-             "js/encoding/BinaryXMLStructureDecoder.js",
-             "js/encoding/DataUtils.js",
-             "js/encoding/EncodingUtils.js",
-             "js/security/KeyManager.js",
-             "js/security/Witness.js"] + securityLib + ["js/NDN.js"]
+        ndnjs = ["js/Closure.js",
+                 "js/WebSocketTransport.js",
+                 "js/util/CCNProtocolDTags.js",
+                 "js/util/CCNTime.js",
+                 "js/util/ExponentialReExpressClosure.js",
+                 "js/Name.js",
+                 "js/ContentObject.js",
+                 "js/encoding/DateFormat.js",
+                 "js/Interest.js",
+                 "js/Key.js",
+                 "js/PublisherID.js",
+                 "js/PublisherPublicKeyDigest.js",
+                 "js/FaceInstance.js",
+                 "js/ForwardingEntry.js",
+                 "js/encoding/DynamicUint8Array.js",
+                 "js/encoding/BinaryXMLEncoder.js",
+                 "js/encoding/BinaryXMLDecoder.js",
+                 "js/encoding/BinaryXMLStructureDecoder.js",
+                 "js/encoding/DataUtils.js",
+                 "js/encoding/EncodingUtils.js",
+                 "js/security/KeyManager.js",
+                 "js/security/Witness.js"] + securityLib + ["js/NDN.js"]
 
-    ndnjs = bld (features="combine",
-                 target="ndn",
-                 source=ndnjs)
+        ndnjs = bld (features="combine",
+                     target="ndn",
+                     source=ndnjs,
+                     install_path="${PREFIX}")
 
-    if bld.env['HAVE_YUI']:
-        ndnjs.yui = True
+        if bld.env['HAVE_YUI']:
+            ndnjs.yui = True
 
-    if bld.env['HAVE_COMPILER']:
-        ndnjs.compiler = True
+        if bld.env['HAVE_COMPILER']:
+            ndnjs.compiler = True
 
-    if bld.env['JS_PATH']:
-        ndnjs.install_path = bld.env['JS_PATH']
-
+    if bld.env['WS']:
+        bld.install_as ('${BINDIR}/websocket-ccnd-proxy-tcp', 'wsproxy/wsproxy-tcp.js', chmod=Utils.O755)
+        bld.install_as ('${BINDIR}/websocket-ccnd-proxy-udp', 'wsproxy/wsproxy-udp.js', chmod=Utils.O755)
 
 @TaskGen.extension('.js')
 def js_hook(self, node):
@@ -126,7 +136,7 @@
         out_min = "%s.min.js" % self.target
         compiler = self.create_task ('closure_compiler')
         compiler.combine = task
-        compiler.set_outputs (yui.generator.path.find_or_declare (out_min))
+        compiler.set_outputs (compiler.generator.path.find_or_declare (out_min))
         tasks.append (compiler)
 
     try:
