diff --git a/.gitignore b/.gitignore
index 45f9e2d..2378208 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,12 +7,16 @@
 .DS_Store
 examples
 infoedit
+jndn
 Mini_NDN.egg-info
 mininet
 NFD
 NLSR
+ndn-cpp
 ndn-cxx
+ndn-js
 ndn-tools
 openflow
+PyNDN2
 util
 .vagrant
diff --git a/install.sh b/install.sh
index f65ac0d..110beb6 100755
--- a/install.sh
+++ b/install.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2015-2017, The University of Memphis,
+# Copyright (C) 2015-2018, The University of Memphis,
 #                          Arizona Board of Regents,
 #                          Regents of the University of California.
 #
@@ -219,6 +219,105 @@
     sudo python setup.py clean --all install
 }
 
+function ndn_cpp {
+    if [[ updated != true ]]; then
+        $update
+        updated="true"
+    fi
+
+    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
+        $install git build-essential libssl-dev libsqlite3-dev libboost-all-dev libprotobuf-dev protobuf-compiler
+    fi
+
+    if [[ $DIST == Fedora ]]; then
+        printf '\nNDN-CPP does not support Fedora yet.\n'
+        return
+    fi
+
+    git clone --depth 1 https://github.com/named-data/ndn-cpp
+    cd ndn-cpp
+    ./configure
+    proc=$(nproc)
+    make -j$proc
+    sudo make install
+    sudo ldconfig
+    cd ..
+}
+
+function pyNDN {
+    if [[ updated != true ]]; then
+        $update
+        updated="true"
+    fi
+
+    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
+        $install git build-essential libssl-dev libffi-dev python-dev python-pip
+    fi
+
+    if [[ $DIST == Fedora ]]; then
+        printf '\nPyNDN does not support Fedora yet.\n'
+        return
+    fi
+
+    sudo pip install cryptography trollius protobuf pytest mock
+    git clone --depth 1 https://github.com/named-data/PyNDN2
+    cd PyNDN2
+    # Update the user's PYTHONPATH.
+    echo "export PYTHONPATH=\$PYTHONPATH:`pwd`/python" >> ~/.bashrc
+    # Also update root's PYTHONPATH in case of running under sudo.
+    echo "export PYTHONPATH=\$PYTHONPATH:`pwd`/python" | sudo tee -a /root/.bashrc > /dev/null
+    cd ..
+}
+
+function ndn_js {
+    if [[ updated != true ]]; then
+        $update
+        updated="true"
+    fi
+
+    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
+        $install git nodejs npm
+    fi
+
+    if [[ $DIST == Fedora ]]; then
+        printf '\nNDN-JS does not support Fedora yet.\n'
+        return
+    fi
+
+    sudo ln -fs /usr/bin/nodejs /usr/bin/node
+    sudo npm install -g mocha
+    sudo npm install rsa-keygen sqlite3
+    git clone --depth 1 https://github.com/named-data/ndn-js
+}
+
+function jNDN {
+    if [[ updated != true ]]; then
+        $update
+        updated="true"
+    fi
+
+    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
+        $install git openjdk-8-jdk maven
+    fi
+
+    if [[ $DIST == Fedora ]]; then
+        printf '\nNDN-JS does not support Fedora yet.\n'
+        return
+    fi
+
+    git clone --depth 1 https://github.com/named-data/jndn
+    cd jndn
+    mvn install
+    cd ..
+}
+
+function commonClientLibraries {
+    ndn_cpp
+    pyNDN
+    ndn_js
+    jNDN
+}
+
 function usage {
     printf '\nUsage: %s [-a]\n\n' $(basename $0) >&2
 
@@ -230,22 +329,24 @@
     printf -- ' -m: install mininet and dependencies\n' >&2
     printf -- ' -r: install NLSR\n' >&2
     printf -- ' -t: install tools\n' >&2
+    printf -- ' -c: install Common Client Libraries\n' >&2
     exit 2
 }
 
 if [[ $# -eq 0 ]]; then
     usage
 else
-    while getopts 'aemfrti' OPTION
+    while getopts 'aemfrtic' OPTION
     do
         case $OPTION in
         a)
-        infoedit
         forwarder
         minindn
         mininet
         routing
         tools
+        infoedit
+        commonClientLibraries
         break
         ;;
         e)    infoedit;;
@@ -254,6 +355,7 @@
         m)    mininet;;
         r)    routing;;
         t)    tools;;
+        c)    commonClientLibraries;;
         ?)    usage;;
         esac
     done
