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));
