diff --git a/apps/p4runtime-test/BUCK b/apps/p4runtime-test/BUCK
index 9ad0926..521f7c2 100644
--- a/apps/p4runtime-test/BUCK
+++ b/apps/p4runtime-test/BUCK
@@ -1,5 +1,5 @@
 GRPC_VER = '1.3.0'
-PROTOBUF_VER = '3.0.2'
+PROTOBUF_VER = '3.2.0'
 
 COMPILE_DEPS = [
     '//lib:CORE_DEPS',
diff --git a/apps/p4runtime-test/src/test/java/org/onosproject/p4runtime/test/P4RuntimeTest.java b/apps/p4runtime-test/src/test/java/org/onosproject/p4runtime/test/P4RuntimeTest.java
index bfef373..319afec 100644
--- a/apps/p4runtime-test/src/test/java/org/onosproject/p4runtime/test/P4RuntimeTest.java
+++ b/apps/p4runtime-test/src/test/java/org/onosproject/p4runtime/test/P4RuntimeTest.java
@@ -25,7 +25,6 @@
 import org.onlab.util.ImmutableByteSequence;
 import org.onosproject.grpc.ctl.GrpcControllerImpl;
 import org.onosproject.net.DeviceId;
-import org.onosproject.net.pi.model.PiActionGroupType;
 import org.onosproject.net.pi.model.PiActionId;
 import org.onosproject.net.pi.model.PiActionParamId;
 import org.onosproject.net.pi.model.PiActionProfileId;
@@ -64,7 +63,6 @@
 import static org.onosproject.net.pi.model.PiPacketOperationType.PACKET_OUT;
 import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.BMV2_JSON;
 import static org.slf4j.LoggerFactory.getLogger;
-import static p4.P4RuntimeOuterClass.ActionProfileGroup.Type.SELECT;
 import static p4.P4RuntimeOuterClass.Update.Type.INSERT;
 
 /**
@@ -170,7 +168,6 @@
         P4RuntimeOuterClass.ActionProfileGroup groupMsg = P4RuntimeOuterClass.ActionProfileGroup.newBuilder()
                 .setActionProfileId(actionProfileId)
                 .setGroupId(1)
-                .setType(SELECT)
                 .addMembers(P4RuntimeOuterClass.ActionProfileGroup.Member.newBuilder()
                                     .setMemberId(1)
                                     .setWeight(1)
@@ -269,7 +266,6 @@
             members.add(member);
         }
         PiActionGroup actionGroup = PiActionGroup.builder()
-                .withType(PiActionGroupType.SELECT)
                 .withActionProfileId(actionProfileId)
                 .withId(groupId)
                 .addMembers(members)
diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiActionGroupType.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiActionGroupType.java
deleted file mode 100644
index dd92888..0000000
--- a/core/api/src/main/java/org/onosproject/net/pi/model/PiActionGroupType.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.
- */
-
-package org.onosproject.net.pi.model;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Type of action group in a protocol-independent pipeline.
- */
-@Beta
-public enum PiActionGroupType {
-
-    /**
-     * Performs load-balancing among different members of the group.
-     */
-    SELECT
-}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroup.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroup.java
index 9084bea..dd90f9b 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroup.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroup.java
@@ -21,7 +21,6 @@
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
-import org.onosproject.net.pi.model.PiActionGroupType;
 import org.onosproject.net.pi.model.PiActionProfileId;
 
 import java.util.Collection;
@@ -37,15 +36,12 @@
 public final class PiActionGroup implements PiEntity {
 
     private final PiActionGroupId id;
-    private final PiActionGroupType type;
     private final ImmutableSet<PiActionGroupMember> members;
     private final PiActionProfileId piActionProfileId;
 
-    private PiActionGroup(PiActionGroupId id, PiActionGroupType type,
-                          ImmutableSet<PiActionGroupMember> members,
+    private PiActionGroup(PiActionGroupId id, ImmutableSet<PiActionGroupMember> members,
                           PiActionProfileId piActionProfileId) {
         this.id = id;
-        this.type = type;
         this.members = members;
         this.piActionProfileId = piActionProfileId;
     }
@@ -60,15 +56,6 @@
     }
 
     /**
-     * Returns the type of this action group.
-     *
-     * @return action group type
-     */
-    public PiActionGroupType type() {
-        return type;
-    }
-
-    /**
      * Returns the members of this action group.
      *
      * @return collection of action members.
@@ -96,21 +83,19 @@
         }
         PiActionGroup that = (PiActionGroup) o;
         return Objects.equal(id, that.id) &&
-                Objects.equal(type, that.type) &&
                 Objects.equal(members, that.members) &&
                 Objects.equal(piActionProfileId, that.piActionProfileId);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(id, type, members);
+        return Objects.hashCode(id, members);
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
                 .add("groupId", id)
-                .add("type", type)
                 .add("members", members)
                 .add("piActionProfileId", piActionProfileId)
                 .toString();
@@ -136,7 +121,6 @@
     public static final class Builder {
 
         private PiActionGroupId id;
-        private PiActionGroupType type;
         private Map<PiActionGroupMemberId, PiActionGroupMember> members = Maps.newHashMap();
         private PiActionProfileId piActionProfileId;
 
@@ -156,17 +140,6 @@
         }
 
         /**
-         * Sets the type of this action group.
-         *
-         * @param type action group type
-         * @return this
-         */
-        public Builder withType(PiActionGroupType type) {
-            this.type = type;
-            return this;
-        }
-
-        /**
          * Adds one member to this action group.
          *
          * @param member action group member
@@ -206,11 +179,9 @@
          */
         public PiActionGroup build() {
             checkNotNull(id);
-            checkNotNull(type);
             checkArgument(!members.isEmpty(), "Members cannot be empty");
             checkNotNull(piActionProfileId);
-            return new PiActionGroup(id, type,
-                                     ImmutableSet.copyOf(members.values()),
+            return new PiActionGroup(id, ImmutableSet.copyOf(members.values()),
                                      piActionProfileId);
         }
     }
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java
index 2905eb9..9682383 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java
@@ -57,8 +57,7 @@
     }
 
     /**
-     * Returns the weight associated to this member. Meaningful if the action group of this member is of type {@link
-     * org.onosproject.net.pi.model.PiActionGroupType#SELECT}.
+     * Returns the weight associated to this member.
      *
      * @return weight
      */
@@ -139,8 +138,7 @@
         }
 
         /**
-         * Sets the weight of this member. Meaningful only if the action group is of type {@link
-         * org.onosproject.net.pi.model.PiActionGroupType#SELECT}.
+         * Sets the weight of this member.
          * <p>
          * Default value is 0.
          *
diff --git a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java
index 6672d91..bd4bc2c 100644
--- a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java
+++ b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java
@@ -20,7 +20,6 @@
 import com.google.common.testing.EqualsTester;
 import org.apache.commons.collections.CollectionUtils;
 import org.junit.Test;
-import org.onosproject.net.pi.model.PiActionGroupType;
 import org.onosproject.net.pi.model.PiActionId;
 import org.onosproject.net.pi.model.PiActionParamId;
 
@@ -54,14 +53,12 @@
     private PiActionGroup piActionGroup1 = PiActionGroup.builder()
             .addMember(piActionGroupMember)
             .withId(piActionGroupId)
-            .withType(PiActionGroupType.SELECT)
             .withActionProfileId(ACTION_PROF_ID)
             .build();
 
     private PiActionGroup sameAsPiActionGroup1 = PiActionGroup.builder()
             .addMember(piActionGroupMember)
             .withId(piActionGroupId)
-            .withType(PiActionGroupType.SELECT)
             .withActionProfileId(ACTION_PROF_ID)
             .build();
 
@@ -69,7 +66,6 @@
     private PiActionGroup piActionGroup2 = PiActionGroup.builder()
             .addMember(piActionGroupMember)
             .withId(piActionGroupId2)
-            .withType(PiActionGroupType.SELECT)
             .withActionProfileId(ACTION_PROF_ID)
             .build();
 
@@ -105,7 +101,6 @@
         piActionGroupMembers.add(piActionGroupMember);
         assertThat(piActionGroup1, is(notNullValue()));
         assertThat(piActionGroup1.id(), is(piActionGroupId));
-        assertThat(piActionGroup1.type(), is(PiActionGroupType.SELECT));
         assertThat("Incorrect members value",
                    CollectionUtils.isEqualCollection(piActionGroup1.members(), piActionGroupMembers));
     }
diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java
index eeabebc..ea7ae50 100644
--- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java
+++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java
@@ -19,7 +19,6 @@
 import org.onosproject.net.Device;
 import org.onosproject.net.group.Group;
 import org.onosproject.net.group.GroupBucket;
-import org.onosproject.net.pi.model.PiActionGroupType;
 import org.onosproject.net.pi.model.PiPipeconf;
 import org.onosproject.net.pi.model.PiPipelineInterpreter;
 import org.onosproject.net.pi.runtime.PiAction;
@@ -63,14 +62,6 @@
         final PiActionGroup.Builder piActionGroupBuilder = PiActionGroup.builder()
                 .withId(PiActionGroupId.of(group.id().id()));
 
-        switch (group.type()) {
-            case SELECT:
-                piActionGroupBuilder.withType(PiActionGroupType.SELECT);
-                break;
-            default:
-                throw new PiTranslationException(format("Group type %s not supported", group.type()));
-        }
-
         if (!(group.appCookie() instanceof PiGroupKey)) {
             throw new PiTranslationException("Group app cookie is not PI (class should be PiGroupKey)");
         }
diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiTranslatorServiceTest.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiTranslatorServiceTest.java
index 9a80e9f..801780e 100644
--- a/core/net/src/test/java/org/onosproject/net/pi/impl/PiTranslatorServiceTest.java
+++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiTranslatorServiceTest.java
@@ -43,7 +43,6 @@
 import org.onosproject.net.group.GroupBucket;
 import org.onosproject.net.group.GroupBuckets;
 import org.onosproject.net.group.GroupDescription;
-import org.onosproject.net.pi.model.PiActionGroupType;
 import org.onosproject.net.pi.model.PiPipeconf;
 import org.onosproject.net.pi.runtime.PiAction;
 import org.onosproject.net.pi.runtime.PiActionGroup;
@@ -245,8 +244,6 @@
 
         assertThat("Group ID must be equal",
                    piGroup1.id().id(), is(equalTo(GROUP_ID.id())));
-        assertThat("Group type must be SELECT",
-                   piGroup1.type(), is(equalTo(PiActionGroupType.SELECT)));
         assertThat("Action profile ID must be equal",
                    piGroup1.actionProfileId(), is(equalTo(ACT_PRF_WCMP_SELECTOR_ID)));
 
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
index 6a03032..2148450 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
@@ -203,7 +203,6 @@
 import org.onosproject.net.packet.DefaultOutboundPacket;
 import org.onosproject.net.packet.DefaultPacketRequest;
 import org.onosproject.net.packet.PacketPriority;
-import org.onosproject.net.pi.model.PiActionGroupType;
 import org.onosproject.net.pi.model.PiActionId;
 import org.onosproject.net.pi.model.PiActionParamId;
 import org.onosproject.net.pi.model.PiActionProfileId;
@@ -619,7 +618,6 @@
             .register(DomainConstraint.class)
             .register(
                     // PI model
-                    PiActionGroupType.class,
                     PiActionId.class,
                     PiActionParamId.class,
                     PiActionProfileId.class,
diff --git a/lib/BUCK b/lib/BUCK
index ab6e31b..51bb3f0 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Tue, 12 Dec 2017 18:49:34 GMT. Do not edit this file manually. *****
+# ***** This file was auto-generated at Tue, 12 Dec 2017 22:03:12 GMT. Do not edit this file manually. *****
 # ***** Use onos-lib-gen *****
 
 pass_thru_pom(
@@ -1401,15 +1401,6 @@
 )
 
 remote_jar (
-  name = 'protobuf-java-3.0.2',
-  out = 'protobuf-java-3.0.2.jar',
-  url = 'mvn:com.google.protobuf:protobuf-java:jar:3.0.2',
-  sha1 = 'ee55e8e697d10b6643d77bb1f686bac3b9ba8579',
-  maven_coords = 'com.google.protobuf:protobuf-java:3.0.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
   name = 'protobuf-java-3.2.0',
   out = 'protobuf-java-3.2.0.jar',
   url = 'mvn:com.google.protobuf:protobuf-java:jar:3.2.0',
diff --git a/lib/deps.json b/lib/deps.json
index ef09e5d..efb7ffd 100644
--- a/lib/deps.json
+++ b/lib/deps.json
@@ -255,7 +255,6 @@
     "grpc-netty-1.3.0": "mvn:io.grpc:grpc-netty:1.3.0",
     "grpc-auth-1.3.0": "mvn:io.grpc:grpc-auth:1.3.0",
     "protobuf-java-3.3.0": "mvn:com.google.protobuf:protobuf-java:3.3.0",
-    "protobuf-java-3.0.2": "mvn:com.google.protobuf:protobuf-java:3.0.2",
     "protobuf-java-3.2.0": "mvn:com.google.protobuf:protobuf-java:3.2.0",
     "grpc-testing-1.3.0": "mvn:io.grpc:grpc-testing:1.3.0",
     "grpc-testing-proto-1.3.0": "mvn:io.grpc:grpc-testing-proto:1.3.0",
diff --git a/protocols/grpc/BUCK b/protocols/grpc/BUCK
index bcd74a5..7c91c47 100644
--- a/protocols/grpc/BUCK
+++ b/protocols/grpc/BUCK
@@ -1,4 +1,4 @@
-PROTOBUF_VER = '3.0.2'
+PROTOBUF_VER = '3.2.0'
 GRPC_VER = '1.3.0'
 
 BUNDLES = [
@@ -13,7 +13,7 @@
     '//lib:grpc-netty-1.3.0',
     '//lib:grpc-auth-1.3.0',
     '//lib:google-instrumentation-0.3.0',
-    '//lib:protobuf-java-3.0.2',
+    '//lib:protobuf-java-3.2.0',
     # Lazily adding all netty-related packages.
     # Some of them might not be necessary.
     '//lib:netty',
diff --git a/protocols/grpc/ctl/BUCK b/protocols/grpc/ctl/BUCK
index ad855fd..e0c2b6d 100644
--- a/protocols/grpc/ctl/BUCK
+++ b/protocols/grpc/ctl/BUCK
@@ -1,4 +1,4 @@
-PROTOBUF_VER = '3.0.2'
+PROTOBUF_VER = '3.2.0'
 GRPC_VER = '1.3.0'
 
 COMPILE_DEPS = [
diff --git a/protocols/grpc/proto/BUCK b/protocols/grpc/proto/BUCK
index f0df65d..8d32ab1 100644
--- a/protocols/grpc/proto/BUCK
+++ b/protocols/grpc/proto/BUCK
@@ -2,7 +2,7 @@
     '//bucklets/grpc.bucklet'
 )
 
-PROTOBUF_VER = '3.0.2'
+PROTOBUF_VER = '3.2.0'
 GRPC_VER = '1.3.0'
 
 COMPILE_DEPS = [
diff --git a/protocols/p4runtime/ctl/BUCK b/protocols/p4runtime/ctl/BUCK
index cb22402..87366f5 100644
--- a/protocols/p4runtime/ctl/BUCK
+++ b/protocols/p4runtime/ctl/BUCK
@@ -1,5 +1,5 @@
 GRPC_VER = '1.3.0'
-PROTOBUF_VER = '3.0.2'
+PROTOBUF_VER = '3.2.0'
 
 COMPILE_DEPS = [
     '//lib:CORE_DEPS',
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java
index c2a291e..9a01a82 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java
@@ -17,7 +17,6 @@
 package org.onosproject.p4runtime.ctl;
 
 import com.google.common.collect.Maps;
-import org.onosproject.net.pi.model.PiActionGroupType;
 import org.onosproject.net.pi.model.PiActionProfileId;
 import org.onosproject.net.pi.model.PiPipeconf;
 import org.onosproject.net.pi.runtime.PiActionGroup;
@@ -65,14 +64,6 @@
                         .setGroupId(piActionGroup.id().id())
                         .setActionProfileId(actionProfileId);
 
-        switch (piActionGroup.type()) {
-            case SELECT:
-                actionProfileGroupBuilder.setType(ActionProfileGroup.Type.SELECT);
-                break;
-            default:
-                throw new EncodeException(format("PI action group type %s not supported", piActionGroup.type()));
-        }
-
         piActionGroup.members().forEach(m -> {
             // TODO: currently we don't set "watch" field of member
             Member member = Member.newBuilder()
@@ -115,17 +106,6 @@
                 .withActionProfileId(piActionProfileId)
                 .withId(PiActionGroupId.of(actionProfileGroup.getGroupId()));
 
-        switch (actionProfileGroup.getType()) {
-            case UNSPECIFIED:
-                // FIXME: PI returns unspecified for select groups. Remove this case when PI bug will be fixed.
-            case SELECT:
-                piActionGroupBuilder.withType(PiActionGroupType.SELECT);
-                break;
-            default:
-                throw new EncodeException(format("Action profile type %s is not supported",
-                                                 actionProfileGroup.getType()));
-        }
-
         Map<Integer, Integer> memberWeights = Maps.newHashMap();
         actionProfileGroup.getMembersList().forEach(member -> {
             int weight = member.getWeight();
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
index 7a89970..bac0bb9 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
@@ -328,16 +328,16 @@
 
         ForwardingPipelineConfig pipelineConfig = ForwardingPipelineConfig
                 .newBuilder()
-                .setDeviceId(p4DeviceId)
                 .setP4Info(p4Info)
                 .setP4DeviceConfig(p4DeviceConfigMsg.toByteString())
                 .build();
 
         SetForwardingPipelineConfigRequest request = SetForwardingPipelineConfigRequest
                 .newBuilder()
+                .setDeviceId(p4DeviceId)
                 .setElectionId(p4RuntimeElectionId)
                 .setAction(VERIFY_AND_COMMIT)
-                .addConfigs(pipelineConfig)
+                .setConfig(pipelineConfig)
                 .build();
 
         try {
diff --git a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java
index afeb438..6379f8b 100644
--- a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java
+++ b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java
@@ -64,7 +64,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import static org.onosproject.net.pi.model.PiActionGroupType.SELECT;
 import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.P4_INFO_TEXT;
 import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.INSERT;
 import static p4.P4RuntimeOuterClass.Action;
@@ -95,7 +94,6 @@
             .withId(GROUP_ID)
             .addMembers(GROUP_MEMBERS)
             .withActionProfileId(ACT_PROF_ID)
-            .withType(SELECT)
             .build();
     private static final DeviceId DEVICE_ID = DeviceId.deviceId("device:p4runtime:1");
     private static final int P4_DEVICE_ID = 1;
@@ -223,7 +221,6 @@
     public void testReadGroups() throws Exception {
         ActionProfileGroup.Builder group = ActionProfileGroup.newBuilder()
                 .setGroupId(GROUP_ID.id())
-                .setType(ActionProfileGroup.Type.SELECT)
                 .setActionProfileId(P4_INFO_ACT_PROF_ID);
 
         List<ActionProfileMember> members = Lists.newArrayList();
@@ -277,7 +274,6 @@
         PiActionGroup piActionGroup = groups.iterator().next();
         assertEquals(ACT_PROF_ID, piActionGroup.actionProfileId());
         assertEquals(GROUP_ID, piActionGroup.id());
-        assertEquals(SELECT, piActionGroup.type());
         assertEquals(3, piActionGroup.members().size());
         assertTrue(GROUP_MEMBERS.containsAll(piActionGroup.members()));
         assertTrue(piActionGroup.members().containsAll(GROUP_MEMBERS));
diff --git a/protocols/p4runtime/model/BUCK b/protocols/p4runtime/model/BUCK
index 68442dc..86c44c4 100644
--- a/protocols/p4runtime/model/BUCK
+++ b/protocols/p4runtime/model/BUCK
@@ -1,4 +1,4 @@
-PROTOBUF_VER = '3.0.2'
+PROTOBUF_VER = '3.2.0'
 
 COMPILE_DEPS = [
     '//lib:CORE_DEPS',
diff --git a/protocols/p4runtime/proto/BUCK b/protocols/p4runtime/proto/BUCK
index fdb2515..95fe691 100644
--- a/protocols/p4runtime/proto/BUCK
+++ b/protocols/p4runtime/proto/BUCK
@@ -2,10 +2,10 @@
     '//bucklets/grpc.bucklet'
 )
 
-PROTOBUF_VER = '3.0.2'
+PROTOBUF_VER = '3.2.0'
 GRPC_VER = '1.3.0'
 
-PI_COMMIT = 'a8814a8ac40838a9df83fe47a17a025b69026fcf'
+PI_COMMIT = '13d611a9c655938676ebcde2bd5653b461f46ca7'
 PI_BASEURL = 'https://github.com/p4lang/PI.git'
 
 # Wondering which .proto files to build? Check p4runtime's Makefile:
diff --git a/protocols/p4runtime/proto/pom.xml b/protocols/p4runtime/proto/pom.xml
index f1d656f..f07728e 100644
--- a/protocols/p4runtime/proto/pom.xml
+++ b/protocols/p4runtime/proto/pom.xml
@@ -29,7 +29,7 @@
     <description>ONOS P4Runtime Proto</description>
 
     <properties>
-        <protobuf.version>3.0.2</protobuf.version>
+        <protobuf.version>3.2.0</protobuf.version>
         <piCommit>a8814a8ac40838a9df83fe47a17a025b69026fcf</piCommit>
         <piBaseUrl>https://github.com/p4lang/PI.git</piBaseUrl>
     </properties>
diff --git a/tools/dev/bin/onos-setup-p4-dev b/tools/dev/bin/onos-setup-p4-dev
index ac12c3d..5450651 100755
--- a/tools/dev/bin/onos-setup-p4-dev
+++ b/tools/dev/bin/onos-setup-p4-dev
@@ -15,10 +15,10 @@
 set -e
 
 BUILD_DIR=~/p4tools
-BMV2_COMMIT="44ac9c21636b00fed660ae8590889d85b5d4df4c"
-PI_COMMIT="a8814a8ac40838a9df83fe47a17a025b69026fcf"
+BMV2_COMMIT="d930fa2818d8ed71f3bf36eaf3f3687d9b68184f"
+PI_COMMIT="13d611a9c655938676ebcde2bd5653b461f46ca7"
 P4C_COMMIT="040b931fbfcb7912e3a14cd05df950fbdd49b038"
-PROTOBUF_COMMIT="tags/v3.0.2"
+PROTOBUF_COMMIT="tags/v3.2.0"
 GRPC_COMMIT="tags/v1.3.0"
 
 NUM_CORES=`grep -c ^processor /proc/cpuinfo`
