diff --git a/protocols/p4runtime/proto/BUCK b/protocols/p4runtime/proto/BUCK
index f7ef33e..33c46f4 100644
--- a/protocols/p4runtime/proto/BUCK
+++ b/protocols/p4runtime/proto/BUCK
@@ -5,7 +5,7 @@
 P4RT_PROTOC_VER = '3.0.2'
 P4RT_GRPC_VER = '1.3.0'
 
-PI_COMMIT = 'f110570ca0c8ddc5feaf5028b08a0f477ceb4eea'
+PI_COMMIT = '8051d54c9c3415ca800db232a226189fd17ad60a'
 PI_BASEURL = 'https://github.com/p4lang/PI.git'
 
 # Wondering which .proto files to build? Check p4runtime's Makefile:
diff --git a/tools/dev/bin/onos-setup-p4-dev b/tools/dev/bin/onos-setup-p4-dev
index f3573a1..65179ef 100755
--- a/tools/dev/bin/onos-setup-p4-dev
+++ b/tools/dev/bin/onos-setup-p4-dev
@@ -15,8 +15,8 @@
 set -e
 
 BUILD_DIR=~/p4tools
-BMV2_COMMIT="41c1f2ed487ff086a1d582069e8bc68cab8ffdb0"
-PI_COMMIT="f110570ca0c8ddc5feaf5028b08a0f477ceb4eea"
+BMV2_COMMIT="654e9c3794273b481284d8bafecfc74c7ffd643d"
+PI_COMMIT="8051d54c9c3415ca800db232a226189fd17ad60a"
 P4C_COMMIT="adce375fd961a9e467c7e77ad1bef647ef28e5e8"
 P4C_BM_COMMIT="8f4abeaa6f8374aaf95ea2aacfc2b750069391b5"
 PROTOBUF_COMMIT="tags/v3.0.2"
@@ -26,13 +26,18 @@
 
 function do_requirements {
     sudo apt update
+    #FIXME the following two lines seem like they are not required, at least for 16.04
     sudo apt install -y python-software-properties software-properties-common
     sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
     sudo apt update
-    sudo apt install -y \
+    #FIXME 14.04 needs special gcc, 16.04 can use apt-get default
+    sudo apt install -y --no-install-recommends \
         autoconf \
         automake \
         bison \
+        build-essential \
+        cmake \
+        cpp \
         curl \
         dpkg-dev \
         flex \
@@ -40,20 +45,38 @@
         gcc-4.9 \
         git \
         libboost-dev \
+        libboost-filesystem-dev \
         libboost-iostreams-dev \
+        libboost-program-options-dev \
+        libboost-system-dev \
+        libboost-test-dev \
+        libboost-thread-dev \
+        libc6-dev \
+        libevent-dev \
+        libffi-dev \
         libfl-dev \
         libgc-dev \
+        libgc1c2 \
+        libgflags-dev \
         libgmp-dev \
+        libgmp10 \
+        libgmpxx4ldbl \
+        libjudy-dev \
+        libpcap-dev \
         libreadline6 \
         libreadline6-dev \
+        libssl-dev \
         libtool \
-        libc6-dev \
         make \
+        mktemp \
         pkg-config \
         python \
+        python-dev \
         python-ipaddr \
+        python-pip \
         python-scapy \
         tcpdump \
+        wget \
         unzip
 
     # Needed for p4c.
@@ -62,7 +85,6 @@
 }
 
 function do_protobuf {
-    # Protobuf
     cd ${BUILD_DIR}
     if [ ! -d protobuf ]; then
       git clone https://github.com/google/protobuf.git
@@ -70,15 +92,19 @@
     cd protobuf
     git fetch
     git checkout ${PROTOBUF_COMMIT}
+
+    export CFLAGS="-Os"
+    export CXXFLAGS="-Os"
+    export LDFLAGS="-Wl,-s"
     ./autogen.sh
     ./configure --prefix=/usr
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
+    unset CFLAGS CXXFLAGS LDFLAGS
 }
 
 function do_grpc {
-    # gRPC
     cd ${BUILD_DIR}
     if [ ! -d grpc ]; then
       git clone https://github.com/grpc/grpc.git
@@ -87,30 +113,15 @@
     git fetch
     git checkout ${GRPC_COMMIT}
     git submodule update --init
-    make -j${NUM_CORES}
-    sudo make install
-    sudo ldconfig
-}
 
-function do_bmv2 {
-    # BMv2 part 1 (without PI)
-    cd ${BUILD_DIR}
-    if [ ! -d bmv2 ]; then
-        git clone https://github.com/p4lang/behavioral-model.git bmv2
-    fi
-    cd bmv2
-    git fetch
-    git checkout ${BMV2_COMMIT}
-    ./install_deps.sh
-    ./autogen.sh
-    ./configure --enable-debugger
+    export LDFLAGS="-Wl,-s"
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
+    unset LDFLAGS
 }
 
 function do_p4runtime {
-    # P4Runtime (PI)
     cd ${BUILD_DIR}
     if [ ! -d p4runtime ]; then
         git clone https://github.com/p4lang/PI.git p4runtime
@@ -119,17 +130,26 @@
     git fetch
     git checkout ${PI_COMMIT}
     git submodule update --init --recursive
+
     ./autogen.sh
-    ./configure --with-bmv2 --with-proto
+    ./configure --with-proto --without-cli --without-internal-rpc
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
 }
 
-function do_bmv2_with_pi {
-    # BMv2 part 2 (with PI)
-    cd ${BUILD_DIR}/bmv2
-    ./configure --enable-debugger --with-pi
+function do_bmv2 {
+    cd ${BUILD_DIR}
+    if [ ! -d bmv2 ]; then
+        git clone https://github.com/p4lang/behavioral-model.git bmv2
+    fi
+    cd bmv2
+    git fetch
+    git checkout ${BMV2_COMMIT}
+
+    ./autogen.sh
+    # FIXME: to build with debugger, we need to install nanomsg first (see bmv2's install_deps.sh)
+    ./configure --without-thrift --without-nanomsg --with-pi
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
@@ -144,7 +164,6 @@
 }
 
 function do_p4c {
-    # p4c
     cd ${BUILD_DIR}
     if [ ! -d p4c ]; then
         git clone https://github.com/p4lang/p4c.git
@@ -153,6 +172,7 @@
     git fetch
     git checkout ${P4C_COMMIT}
     git submodule update --init --recursive
+
     ./bootstrap.sh
     cd build
     make -j${NUM_CORES}
@@ -160,8 +180,9 @@
     sudo ldconfig
 }
 
+# FIXME: Can we deprecate this?
 function do_p4c_bm {
-    # p4c-bmv2 (old BMv2 compiler)
+    # old BMv2 compiler
     cd ${BUILD_DIR}
     if [ ! -d p4c-bmv2 ]; then
         git clone https://github.com/p4lang/p4c-bm.git p4c-bmv2
@@ -196,6 +217,7 @@
         echo "# Building ${proj_dir} (${commit_id})"
         echo "#"
         if ! ${DID_REQUIREMENTS} = true; then
+        #FIXME need version check for 14.04 vs 16.04
             do_requirements
             DID_REQUIREMENTS=true
         fi
@@ -213,9 +235,8 @@
 # In dependency order.
 check_and_do ${PROTOBUF_COMMIT} protobuf do_protobuf
 check_and_do ${GRPC_COMMIT} grpc do_grpc
-check_and_do ${BMV2_COMMIT} bmv2 do_bmv2
 check_and_do ${PI_COMMIT} p4runtime do_p4runtime
-check_and_do ${BMV2_COMMIT} bmv2 do_bmv2_with_pi
+check_and_do ${BMV2_COMMIT} bmv2 do_bmv2
 check_and_do ${P4C_COMMIT} p4c do_p4c
 check_and_do ${P4C_BM_COMMIT} p4c-bmv2 do_p4c_bm
 
diff --git a/tools/dev/mininet/bmv2.py b/tools/dev/mininet/bmv2.py
index a0f92d2..6b31d05 100644
--- a/tools/dev/mininet/bmv2.py
+++ b/tools/dev/mininet/bmv2.py
@@ -22,16 +22,16 @@
     deviceId = 0
     instanceCount = 0
 
-    def __init__(self, name, debugger=False, loglevel="warn", elogger=False, persistent=False,
-                 thriftPort=None, grpcPort=None, netcfg=True, **kwargs):
+    def __init__(self, name, json=None, debugger=False, loglevel="warn", elogger=False,
+                 persistent=False, grpcPort=None, netcfg=True, **kwargs):
         Switch.__init__(self, name, **kwargs)
-        self.thriftPort = ONOSBmv2Switch.pickUnusedPort() if not thriftPort else thriftPort
         self.grpcPort = ONOSBmv2Switch.pickUnusedPort() if not grpcPort else grpcPort
         if self.dpid:
             self.deviceId = int(self.dpid, 0 if 'x' in self.dpid else 16)
         else:
             self.deviceId = ONOSBmv2Switch.deviceId
             ONOSBmv2Switch.deviceId += 1
+        self.json = json
         self.debugger = debugger
         self.loglevel = loglevel
         self.logfile = '/tmp/bmv2-%d.log' % self.deviceId
@@ -43,7 +43,6 @@
             self.exectoken = "/tmp/bmv2-%d-exec-token" % self.deviceId
             self.cmd("touch %s" % self.exectoken)
         # Store thrift port for future uses.
-        self.cmd("echo %d > /tmp/bmv2-%d-thrift-port" % (self.thriftPort, self.deviceId))
         self.cmd("echo %d > /tmp/bmv2-%d-grpc-port" % (self.grpcPort, self.deviceId))
 
     @classmethod
@@ -114,15 +113,17 @@
         for port, intf in self.intfs.items():
             if not intf.IP():
                 args.append('-i %d@%s' % (port, intf.name))
-        if self.thriftPort:
-            args.append('--thrift-port %d' % self.thriftPort)
         if self.elogger:
             nanomsg = 'ipc:///tmp/bmv2-%d-log.ipc' % self.deviceId
             args.append('--nanolog %s' % nanomsg)
         if self.debugger:
             args.append('--debugger')
+        args.append('--log-console')
         args.append('-L%s' % self.loglevel)
-        args.append('--no-p4')
+        if not self.json:
+            args.append('--no-p4')
+        else:
+            args.append(self.json)
 
         # gRPC target-specific options.
         args.append('--')
@@ -131,14 +132,12 @@
 
         bmv2cmd = " ".join(args)
         info("\nStarting BMv2 target: %s\n" % bmv2cmd)
+
         if self.persistent:
             # Bash loop to re-exec the switch if it crashes.
-            cmdStr = "(while [ -e {} ]; " \
-                     "do {} ; " \
-                     "sleep 1; " \
-                     "done;) > {} 2>&1 &".format(self.exectoken, bmv2cmd, self.logfile)
-        else:
-            cmdStr = "{} > {} 2>&1 &".format(bmv2cmd, self.logfile)
+            bmv2cmd = "(while [ -e {} ]; do {} ; sleep 1; done;)".format(self.exectoken, bmv2cmd)
+
+        cmdStr = "{} > {} 2>&1 &".format(bmv2cmd, self.logfile)
 
         # Starts the switch.
         out = self.cmd(cmdStr)
@@ -157,7 +156,7 @@
     def stop(self, deleteIntfs=True):
         """Terminate switch."""
         self.cmd("rm -f /tmp/bmv2-%d-*" % self.deviceId)
-        self.cmd("rm -f /tmp/bmv2-%d.log" % self.deviceId)
+        self.cmd("rm -f /tmp/bmv2-%d.log*" % self.deviceId)
         self.cmd('kill %' + BMV2_TARGET)
         Switch.stop(self, deleteIntfs)
 
