diff --git a/tools/package/runtime/bin/_find-node b/tools/package/runtime/bin/_find-node
new file mode 100644
index 0000000..51f6364
--- /dev/null
+++ b/tools/package/runtime/bin/_find-node
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+
+#
+# Copyright 2015-present Open Networking Laboratory
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# -----------------------------------------------------------------------------
+# Utility for converting a number of a node in a cell to the node's address
+# -----------------------------------------------------------------------------
+
+validate_number () {
+    local re="^[0-9]+$"
+    if [[ ! $1 =~ $re ]] ; then
+    return 1
+    fi
+
+    return 0
+}
+
+find_node () {
+    if validate_number $1 ; then
+    # input is a number, try to find if an OC node is defined
+
+    oc_try="OC$1"
+    node=${!oc_try}
+
+    if [ -n "$node" ]; then
+            # node lookup succeeded, return node
+        echo $node
+    else
+            # node lookup failed, return original input
+        echo $1
+    fi
+
+    else
+    echo $1
+    fi
+
+    return 0
+}
diff --git a/tools/package/runtime/bin/onos-app b/tools/package/runtime/bin/onos-app
new file mode 100755
index 0000000..c07d327
--- /dev/null
+++ b/tools/package/runtime/bin/onos-app
@@ -0,0 +1,106 @@
+#!/bin/bash
+
+#
+# Copyright 2015-present Open Networking Laboratory
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# -----------------------------------------------------------------------------
+# Tool to manage ONOS applications using REST API.
+# -----------------------------------------------------------------------------
+
+# If ONOS_HOME is set, respect its value.
+# If ONOS_HOME is not set (e.g. in the init or service environment),
+# set it based on this script's path.
+ONOS_HOME=${ONOS_HOME:-$(cd $(dirname $0)/.. >/dev/null 2>&1 && pwd)}
+ONOS_WEB_USER=${ONOS_WEB_USER:-onos} # ONOS WEB User defaults to 'onos'
+ONOS_WEB_PASS=${ONOS_WEB_PASS:-rocks} # ONOS WEB Password defaults to 'rocks'
+
+. ${ONOS_HOME}/bin/_find-node
+
+node=$(find_node $1)
+cmd=${2:-list}
+app=${3}
+
+export URL=http://$node:8181/onos/v1/applications
+export HDR="-HContent-Type:application/octet-stream"
+export HAJ="-HContent-Type:application/json"
+export curl="curl -sS --user $ONOS_WEB_USER:$ONOS_WEB_PASS --noproxy localhost "
+
+# Prints usage help
+function usage {
+    echo "usage: onos-app <node-ip> list" >&2
+    echo "       onos-app <node-ip> {install|install!} <app-file>" >&2
+    echo "       onos-app <node-ip> {reinstall|reinstall!} [<app-name>] <app-file>" >&2
+    echo "       onos-app <node-ip> {activate|deactivate|uninstall} <app-name>" >&2
+    exit 1
+}
+
+# Extract app name from the specified *.oar file
+function appName {
+    aux=/tmp/aux$$.jar
+    cp $1 $aux
+    pushd /tmp >/dev/null
+    jar xf $aux app.xml && grep name= app.xml | cut -d\" -f2
+    rm -f $aux /tmp/app.xml
+    popd >/dev/null
+}
+
+[ -z $node -o "$node" = "-h" -o "$node" = "--help" -o "$node" = "-?" ] && usage
+
+case $cmd in
+    list) $curl -X GET $URL;;
+    installUrl!|installUrl)
+        activate="false"
+        [ $cmd = "installUrl!" ] && activate="true"
+        [ $# -lt 3 ] && usage
+        appurl=$3
+        $curl -X POST $HAJ -d '{"url" : "'"$appurl"'", "activate" : "'$activate'" }' $URL
+        ;;
+    install!|install)
+        [ $cmd = "install!" ] && activate="?activate=true"
+        [ $# -lt 3 -o ! -f $app ] && usage
+        $curl -X POST $HDR $URL$activate --data-binary @$app
+        ;;
+
+    reinstall!|reinstall)
+        [ $cmd = "reinstall!" ] && activate="?activate=true"
+        [ $# -lt 4 -a ! -f "$3" ] && usage
+        [ $# -eq 4 -a ! -f "$4" ] && usage
+        oar=$4
+        [ $# -lt 4 ] && oar=$3 && app=$(appName $oar)
+        $curl -X DELETE $URL/$app
+        $curl -X POST $HDR $URL$activate --data-binary @$oar
+        ;;
+
+    uninstall)
+        [ $# -lt 3 ] && usage
+        $curl -X DELETE $URL/$app
+        ;;
+    activate)
+        [ $# -lt 3 ] && usage
+        $curl -X POST $URL/$app/active
+        ;;
+    deactivate)
+        [ $# -lt 3 ] && usage
+        $curl -X DELETE $URL/$app/active
+        ;;
+
+    *) usage;;
+esac
+
+
+status=$?
+echo # new line for prompt
+exit $status
diff --git a/tools/package/runtime/bin/onos-netcfg b/tools/package/runtime/bin/onos-netcfg
new file mode 100755
index 0000000..fe19d8e
--- /dev/null
+++ b/tools/package/runtime/bin/onos-netcfg
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+#
+# Copyright 2015-present Open Networking Laboratory
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# -----------------------------------------------------------------------------
+# ONOS network configuration uploader.
+# -----------------------------------------------------------------------------
+
+# If ONOS_HOME is set, respect its value.
+# If ONOS_HOME is not set (e.g. in the init or service environment),
+# set it based on this script's path.
+ONOS_HOME=${ONOS_HOME:-$(cd $(dirname $0)/.. >/dev/null 2>&1 && pwd)}
+ONOS_WEB_USER=${ONOS_WEB_USER:-onos} # ONOS WEB User defaults to 'onos'
+ONOS_WEB_PASS=${ONOS_WEB_PASS:-rocks} # ONOS WEB Password defaults to 'rocks'
+
+. ${ONOS_HOME}/bin/_find-node
+
+fail="--fail"
+[ "$1" == "-v" ] && shift && fail=""
+
+node=$(find_node $1)
+file="${2}"
+url="${3}"
+
+if [ "$node" == "" -o "$file" == "" ]; then
+     echo "Usage: onos-netcfg [-v] node file|DELETE [url]"
+     exit 1
+fi
+
+method="POST"
+[ $(echo $file | awk '{print tolower($0)}') == "delete" ] && method="DELETE"
+
+if [ $method == "POST" ]; then
+    # Validate JSON
+    cat $file | python -m json.tool >> /dev/null
+    if [ "$?" -ne "0" ]; then
+        echo "Not valid JSON File" && exit 1
+    fi
+    curl $fail -sSL --user $ONOS_WEB_USER:$ONOS_WEB_PASS \
+        -X POST -H 'Content-Type:application/json' \
+        http://$node:8181/onos/v1/network/configuration/${url} -d@$file
+elif [ $method == "DELETE" ]; then
+    curl $fail -sSL --user $ONOS_WEB_USER:$ONOS_WEB_PASS \
+        -X DELETE http://$node:8181/onos/v1/network/configuration/${url}
+fi
