diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
index 6d6b318..c758c48 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
@@ -34,9 +34,19 @@
      * Used to check reason parameter in flows.
      */
     enum FlowRemoveReason {
-        NO_REASON,
         IDLE_TIMEOUT,
-        HARD_TIMEOUT;
+        HARD_TIMEOUT,
+        DELETE,
+        GROUP_DELETE,
+        METER_DELETE,
+        EVICTION,
+        NO_REASON;
+
+        /**
+         * Covert short to enum.
+         * @return reason in enum
+         * @param reason remove reason in integer
+         */
         public static FlowRemoveReason parseShort(short reason) {
             switch (reason) {
                 case -1 :
@@ -45,6 +55,14 @@
                     return IDLE_TIMEOUT;
                 case 1:
                     return HARD_TIMEOUT;
+                case 2 :
+                    return DELETE;
+                case 3:
+                    return GROUP_DELETE;
+                case 4:
+                    return METER_DELETE;
+                case 5:
+                    return EVICTION;
                 default :
                     return NO_REASON;
             }
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 d59b859..7d1a9d1 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
@@ -249,7 +249,8 @@
             .register(new ImmutableListSerializer(),
                       ImmutableList.class,
                       ImmutableList.of(1).getClass(),
-                      ImmutableList.of(1, 2).getClass())
+                      ImmutableList.of(1, 2).getClass(),
+                      ImmutableList.of(1, 2, 3).subList(1, 3).getClass())
             .register(new ImmutableSetSerializer(),
                       ImmutableSet.class,
                       ImmutableSet.of().getClass(),
diff --git a/drivers/default/features.xml b/drivers/default/features.xml
index 52741e7..4f2efc5 100644
--- a/drivers/default/features.xml
+++ b/drivers/default/features.xml
@@ -20,7 +20,7 @@
         <feature>onos-api</feature>
         <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
 
-        <bundle>mvn:org.onosproject/openflowj/0.9.7.onos</bundle>
+        <bundle>mvn:org.onosproject/openflowj/3.2.0.onos</bundle>
         <bundle>mvn:${project.groupId}/onos-of-api/${project.version}</bundle>
 
     </feature>
diff --git a/drivers/flowspec/pom.xml b/drivers/flowspec/pom.xml
index 187a651..93554a6 100644
--- a/drivers/flowspec/pom.xml
+++ b/drivers/flowspec/pom.xml
@@ -61,7 +61,6 @@
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
-            <version>19.0</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
index d5b18b4..5ea98c8 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
@@ -20,8 +20,8 @@
 import java.util.List;
 import java.util.Set;
 
-import org.jboss.netty.buffer.ChannelBuffer;
-import org.jboss.netty.buffer.ChannelBuffers;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
 import org.onosproject.drivers.optical.OpticalAdjacencyLinkService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Annotations;
@@ -203,7 +203,7 @@
                 // |---------------------------------------------------------------------------|
                 // | Header (2 bytes) | ID (4 BITS) | MAC (6 bytes) | Port (4 bytes) | Unused  |
                 // |---------------------------------------------------------------------------|
-                ChannelBuffer buffer = ChannelBuffers.buffer(OPSPEC_BYTES);
+                ByteBuf buffer = Unpooled.buffer(OPSPEC_BYTES);
                 otn.getOpspec().write32Bytes(buffer);
                 long mac = buffer.getLong(OPSPEC_MAC_POS) << OPSPEC_ID_BITS >>> OPSPEC_MAC_BIT_OFF;
                 int port = (int) (buffer.getLong(OPSPEC_PORT_POS) << OPSPEC_ID_BITS >>> OPSPEC_PORT_BIT_OFF);
diff --git a/features/features.xml b/features/features.xml
index 2dfb2f2..7403b25 100644
--- a/features/features.xml
+++ b/features/features.xml
@@ -23,7 +23,7 @@
         <bundle>mvn:commons-lang/commons-lang/2.6</bundle>
         <bundle>mvn:org.apache.commons/commons-lang3/3.5</bundle>
         <bundle>mvn:commons-configuration/commons-configuration/1.10</bundle>
-        <bundle>mvn:com.google.guava/guava/19.0</bundle>
+        <bundle>mvn:com.google.guava/guava/20.0</bundle>
         <bundle>mvn:io.netty/netty/3.10.5.Final</bundle>
         <bundle>mvn:io.netty/netty-common/4.1.5.Final</bundle>
         <bundle>mvn:io.netty/netty-buffer/4.1.5.Final</bundle>
diff --git a/lib/BUCK b/lib/BUCK
index 6295c8c..6867754 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Mon, 15 May 2017 21:06:23 GMT. Do not edit this file manually. *****
+# ***** This file was auto-generated at Thu, 18 May 2017 21:45:37 GMT. Do not edit this file manually. *****
 # ***** Use onos-lib-gen *****
 
 pass_thru_pom(
@@ -23,6 +23,7 @@
     ':objenesis',
     ':guava',
     ':netty',
+    ':netty-buffer',
     ':netty-common',
     ':minimal-json',
     ':kryo',
@@ -311,19 +312,19 @@
 
 remote_jar (
   name = 'guava',
-  out = 'guava-19.0.jar',
-  url = 'mvn:com.google.guava:guava:jar:19.0',
-  sha1 = '6ce200f6b23222af3d8abb6b6459e6c44f4bb0e9',
-  maven_coords = 'com.google.guava:guava:19.0',
+  out = 'guava-20.0.jar',
+  url = 'mvn:com.google.guava:guava:jar:20.0',
+  sha1 = '89507701249388e1ed5ddcf8c41f4ce1be7831ef',
+  maven_coords = 'com.google.guava:guava:20.0',
   visibility = [ 'PUBLIC' ],
 )
 
 remote_jar (
   name = 'guava-testlib',
-  out = 'guava-testlib-19.0.jar',
-  url = 'mvn:com.google.guava:guava-testlib:jar:19.0',
-  sha1 = 'ce5b880b206de3f76d364988a6308c68c726f74a',
-  maven_coords = 'com.google.guava:guava-testlib:jar:NON-OSGI:19.0',
+  out = 'guava-testlib-20.0.jar',
+  url = 'mvn:com.google.guava:guava-testlib:jar:20.0',
+  sha1 = 'e3666edd0d7b10ddfa5242b998efd831e4b264ff',
+  maven_coords = 'com.google.guava:guava-testlib:jar:NON-OSGI:20.0',
   visibility = [ 'PUBLIC' ],
 )
 
@@ -860,10 +861,10 @@
 
 remote_jar (
   name = 'openflowj',
-  out = 'openflowj-0.9.8.onos.jar',
-  url = 'mvn:org.onosproject:openflowj:jar:0.9.8.onos',
-  sha1 = '4dc85deb24584eee18ef103d10a01c20d2f657bc',
-  maven_coords = 'org.onosproject:openflowj:0.9.8.onos',
+  out = 'openflowj-3.2.0.onos.jar',
+  url = 'mvn:org.onosproject:openflowj:jar:3.2.0.onos',
+  sha1 = 'b890ecb2901912b9c7ededd1d1028fea73aa5db4',
+  maven_coords = 'org.onosproject:openflowj:3.2.0.onos',
   visibility = [ 'PUBLIC' ],
 )
 
@@ -1278,4 +1279,3 @@
   maven_coords = 'org.apache.sshd:sshd-core:1.4.0',
   visibility = [ 'PUBLIC' ],
 )
-
diff --git a/lib/deps.json b/lib/deps.json
index e6074f2..d4efb01 100644
--- a/lib/deps.json
+++ b/lib/deps.json
@@ -12,6 +12,7 @@
       "objenesis",
       "guava",
       "netty",
+      "netty-buffer",
       "netty-common",
       "minimal-json",
       "kryo",
@@ -111,8 +112,8 @@
     "ganymed-ssh2": "mvn:ch.ethz.ganymed:ganymed-ssh2:262",
     "gmetric4j": "mvn:info.ganglia.gmetric4j:gmetric4j:1.0.10",
     "gson": "mvn:com.google.code.gson:gson:jar:2.6.2",
-    "guava": "mvn:com.google.guava:guava:19.0",
-    "guava-testlib": "mvn:com.google.guava:guava-testlib:19.0",
+    "guava": "mvn:com.google.guava:guava:20.0",
+    "guava-testlib": "mvn:com.google.guava:guava-testlib:20.0",
     "hamcrest-all": "mvn:org.hamcrest:hamcrest-all:1.3",
     "hk2-api": "mvn:org.glassfish.hk2:hk2-api:2.5.0-b32",
     "hk2-locator": "mvn:org.glassfish.hk2:hk2-locator:2.5.0-b32",
@@ -172,7 +173,7 @@
     "catalyst-netty": "mvn:io.atomix.catalyst:catalyst-netty:1.2.1",
     "catalyst-transport": "mvn:io.atomix.catalyst:catalyst-transport:1.2.1",
     "objenesis": "mvn:org.objenesis:objenesis:2.2",
-    "openflowj": "mvn:org.onosproject:openflowj:0.9.8.onos",
+    "openflowj": "mvn:org.onosproject:openflowj:3.2.0.onos",
     "org.apache.felix.scr": "mvn:org.apache.felix:org.apache.felix.scr:1.8.2",
     "org.apache.felix.scr.annotations": "mvn:org.apache.felix:org.apache.felix.scr.annotations:1.9.12",
     "org.apache.karaf.features.core": "mvn:org.apache.karaf.features:org.apache.karaf.features.core:3.0.8",
diff --git a/lib/pom.xml b/lib/pom.xml
index e76a082..c7616bc 100644
--- a/lib/pom.xml
+++ b/lib/pom.xml
@@ -38,7 +38,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <onos-build-conf.version>1.11.0-SNAPSHOT</onos-build-conf.version>
         <netty4.version>4.1.5.Final</netty4.version>
-        <openflowj.version>0.9.8.onos</openflowj.version>
+        <openflowj.version>3.2.0.onos-SNAPSHOT</openflowj.version>
         <onos-maven-plugin.version>1.10</onos-maven-plugin.version>
         <osgi.version>5.0.0</osgi.version>
         <karaf.version>3.0.8</karaf.version>
@@ -46,7 +46,7 @@
         <jetty.version>9.2.21.v20170120</jetty.version>
         <jackson.version>2.8.6</jackson.version>
         <slf4j.version>1.7.21</slf4j.version>
-        <guava.version>19.0</guava.version>
+        <guava.version>20.0</guava.version>
         <commons.io.version>2.4</commons.io.version>
         <!-- TODO argLine was originally added maven-surfire-plugin configuration
                   to fix locale errors for non-US developers. However, it breaks
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
index afe2701..7cc5b5d 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
@@ -15,12 +15,15 @@
  */
 package org.onosproject.openflow.controller;
 
-import org.jboss.netty.buffer.ChannelBuffer;
+import io.netty.buffer.ByteBuf;
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.protocol.OFType;
 import org.projectfloodlight.openflow.protocol.OFVersion;
 
 import com.google.common.hash.PrimitiveSink;
+
+import java.util.Arrays;
+
 /**
  * Used to support for the third party privacy flow rule.
  * it implements OFMessage interface to use exist adapter API.
@@ -61,11 +64,21 @@
     }
 
     @Override
-    public void writeTo(ChannelBuffer channelBuffer) {
+    public void writeTo(ByteBuf byteBuf) {
      // Do nothing here for now.
     }
 
     @Override
+    public boolean equalsIgnoreXid(Object obj) {
+        return Arrays.equals(payLoad, ((ThirdPartyMessage) obj).payLoad());
+    }
+
+    @Override
+    public int hashCodeIgnoreXid() {
+        return payLoad.hashCode();
+    }
+
+    @Override
     public Builder createBuilder() {
      // Do nothing here for now.
         return null;
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
index 26f7221..c5cb9f7 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
@@ -17,6 +17,8 @@
 package org.onosproject.openflow.controller.impl;
 
 
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandlerContext;
@@ -47,7 +49,15 @@
         // a list of the parsed messages to the controller.
         // The performance *may or may not* not be as good as before.
         OFMessageReader<OFMessage> reader = OFFactories.getGenericReader();
-        OFMessage message = reader.readFrom(buffer);
+
+        //toByteBuffer is optimized to avoid copying.
+        ByteBuf byteBuf = Unpooled.wrappedBuffer(buffer.toByteBuffer());
+        OFMessage message = reader.readFrom(byteBuf);
+
+        if (message != null) {
+            //set buffer's read index, as it has not been changed.
+            buffer.readerIndex(buffer.readerIndex() + byteBuf.readerIndex());
+        }
 
         return message;
     }
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
index abb63f1..727301f 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
@@ -18,6 +18,8 @@
 
 import java.util.List;
 
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.Channel;
@@ -46,13 +48,16 @@
             size += ofm.getLengthU();
         }*/
 
-        ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
+        ByteBuf bb = Unpooled.buffer();
 
         for (OFMessage ofm : msglist) {
             if (ofm != null) {
-                ofm.writeTo(buf);
+                ofm.writeTo(bb);
             }
         }
+
+        ChannelBuffer buf = ChannelBuffers.wrappedBuffer(bb.nioBuffer());
+
         return buf;
     }
 
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
index 564ca7b..c49acbb 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
@@ -17,7 +17,7 @@
 
 import java.util.Set;
 
-import org.jboss.netty.buffer.ChannelBuffer;
+import io.netty.buffer.ByteBuf;
 import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
 import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags;
 import org.projectfloodlight.openflow.protocol.OFStatsType;
@@ -81,11 +81,23 @@
     }
 
     @Override
-    public void writeTo(ChannelBuffer channelBuffer) {
+    public void writeTo(ByteBuf byteBuf) {
 
     }
 
     @Override
+    public boolean equalsIgnoreXid(Object obj) {
+     // Do nothing here for now
+        return true;
+    }
+
+    @Override
+    public int hashCodeIgnoreXid() {
+     // Do nothing here for now
+        return 0;
+    }
+
+    @Override
     public Builder createBuilder() {
         return null;
     }
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
index 6c9ddde..f0737e5 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.openflow;
 
-import org.jboss.netty.buffer.ChannelBuffer;
+import io.netty.buffer.ByteBuf;
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.protocol.OFType;
 import org.projectfloodlight.openflow.protocol.OFVersion;
@@ -50,7 +50,19 @@
     }
 
     @Override
-    public void writeTo(ChannelBuffer channelBuffer) { }
+    public void writeTo(ByteBuf byteBuf) { }
+
+    @Override
+    public boolean equalsIgnoreXid(Object obj) {
+     // Do nothing here for now
+        return true;
+    }
+
+    @Override
+    public int hashCodeIgnoreXid() {
+     // Do nothing here for now
+        return 0;
+    }
 
     @Override
     public Builder createBuilder() {
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
index 43b5f3d..e62345c 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
@@ -18,6 +18,7 @@
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
+import io.netty.buffer.ByteBuf;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.junit.Test;
 import org.onosproject.openflow.OfMessageAdapter;
@@ -45,9 +46,9 @@
         }
 
         @Override
-        public void writeTo(ChannelBuffer channelBuffer) {
+        public void writeTo(ByteBuf byteBuf) {
             String message = "message" + Integer.toString(id) + " ";
-            channelBuffer.writeBytes(message.getBytes(StandardCharsets.UTF_8));
+            byteBuf.writeBytes(message.getBytes(StandardCharsets.UTF_8));
         }
     }
 
diff --git a/providers/openflow/base/features.xml b/providers/openflow/base/features.xml
index f2af0c6..dc00bde 100644
--- a/providers/openflow/base/features.xml
+++ b/providers/openflow/base/features.xml
@@ -18,7 +18,7 @@
     <feature name="${project.artifactId}" version="${project.version}"
              description="${project.description}">
         <feature>onos-api</feature>
-        <bundle>mvn:org.onosproject/openflowj/0.9.7.onos</bundle>
+        <bundle>mvn:org.onosproject/openflowj/3.2.0.onos</bundle>
         <bundle>mvn:${project.groupId}/onos-of-api/${project.version}</bundle>
         <bundle>mvn:${project.groupId}/onos-of-ctl/${project.version}</bundle>
 
diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index f9858a4..5e0fae4 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -110,6 +110,7 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Dictionary;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -364,12 +365,14 @@
         OFPortMod.Builder pmb = sw.factory().buildPortMod();
         OFPort port = OFPort.of((int) portNumber.toLong());
         pmb.setPortNo(port);
-        if (enable) {
-            pmb.setConfig(0x0); // port_down bit 0
-        } else {
-            pmb.setConfig(0x1); // port_down bit 1
+        Set<OFPortConfig> portConfig = EnumSet.noneOf(OFPortConfig.class);
+        if (!enable) {
+            portConfig.add(OFPortConfig.PORT_DOWN);
         }
-        pmb.setMask(0x1);
+        pmb.setConfig(portConfig);
+        Set<OFPortConfig> portMask = EnumSet.noneOf(OFPortConfig.class);
+        portMask.add(OFPortConfig.PORT_DOWN);
+        pmb.setMask(portMask);
         pmb.setAdvertise(0x0);
         for (OFPortDesc pd : sw.getPorts()) {
             if (pd.getPortNo().equals(port)) {
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
index 5c245a8..9fa03be 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
@@ -208,7 +208,7 @@
                             .withPriority(removed.getPriority())
                             .withIdleTimeout(removed.getIdleTimeout())
                             .withCookie(removed.getCookie().getValue())
-                            .withReason(FlowRule.FlowRemoveReason.parseShort(removed.getReason()));
+                            .withReason(FlowRule.FlowRemoveReason.parseShort((short) removed.getReason().ordinal()));
 
                     if (removed.getVersion() != OFVersion.OF_10) {
                         builder.forTable(removed.getTableId().getValue());
diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java
index 406337b..a26e05a 100644
--- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java
+++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java
@@ -28,8 +28,10 @@
 import org.slf4j.Logger;
 
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -82,37 +84,36 @@
     public OFMeterMod add() {
         validate();
         OFMeterMod.Builder builder = builderMeterMod();
-        builder.setCommand(OFMeterModCommand.ADD.ordinal());
+        builder.setCommand(OFMeterModCommand.ADD);
         return builder.build();
     }
 
     public OFMeterMod remove() {
         validate();
         OFMeterMod.Builder builder = builderMeterMod();
-        builder.setCommand(OFMeterModCommand.DELETE.ordinal());
+        builder.setCommand(OFMeterModCommand.DELETE);
         return builder.build();
     }
 
     public OFMeterMod modify() {
         validate();
         OFMeterMod.Builder builder = builderMeterMod();
-        builder.setCommand(OFMeterModCommand.MODIFY.ordinal());
+        builder.setCommand(OFMeterModCommand.MODIFY);
         return builder.build();
     }
 
     private OFMeterMod.Builder builderMeterMod() {
         OFMeterMod.Builder builder = factory.buildMeterMod();
-        int flags = 0;
+        Set<OFMeterFlags> flags = EnumSet.noneOf(OFMeterFlags.class);
         if (burst) {
-            // covering loxi short comings.
-            flags |= 1 << OFMeterFlags.BURST.ordinal();
+            flags.add(OFMeterFlags.BURST);
         }
         switch (unit) {
             case PKTS_PER_SEC:
-                flags |= 1 << OFMeterFlags.PKTPS.ordinal();
+                flags.add(OFMeterFlags.PKTPS);
                 break;
             case KB_PER_SEC:
-                flags |= 1 << OFMeterFlags.KBPS.ordinal();
+                flags.add(OFMeterFlags.KBPS);
                 break;
             default:
                 log.warn("Unknown unit type {}", unit);
diff --git a/tools/package/maven-plugin/pom.xml b/tools/package/maven-plugin/pom.xml
index 2d36c86..8d3758d 100644
--- a/tools/package/maven-plugin/pom.xml
+++ b/tools/package/maven-plugin/pom.xml
@@ -54,7 +54,7 @@
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
-            <version>19.0</version>
+            <version>20.0</version>
         </dependency>
 
         <dependency>
