diff --git a/src/main/java/net/onrc/onos/core/util/FlowEntryMatch.java b/src/main/java/net/onrc/onos/core/util/FlowEntryMatch.java
index ce6a202..f0b1152 100644
--- a/src/main/java/net/onrc/onos/core/util/FlowEntryMatch.java
+++ b/src/main/java/net/onrc/onos/core/util/FlowEntryMatch.java
@@ -98,30 +98,42 @@
      * @param other the object to copy from.
      */
     public FlowEntryMatch(FlowEntryMatch other) {
-        if ((other.inPort != null) && other.inPort.enabled())
+        if ((other.inPort != null) && other.inPort.enabled()) {
             this.enableInPort(other.inPort.value());
-        if ((other.srcMac != null) && other.srcMac.enabled())
+        }
+        if ((other.srcMac != null) && other.srcMac.enabled()) {
             this.enableSrcMac(other.srcMac.value());
-        if ((other.dstMac != null) && other.dstMac.enabled())
+        }
+        if ((other.dstMac != null) && other.dstMac.enabled()) {
             this.enableDstMac(other.dstMac.value());
-        if ((other.ethernetFrameType != null) && other.ethernetFrameType.enabled())
+        }
+        if ((other.ethernetFrameType != null) && other.ethernetFrameType.enabled()) {
             this.enableEthernetFrameType(other.ethernetFrameType.value());
-        if ((other.vlanId != null) && other.vlanId.enabled())
+        }
+        if ((other.vlanId != null) && other.vlanId.enabled()) {
             this.enableVlanId(other.vlanId.value());
-        if ((other.vlanPriority != null) && other.vlanPriority.enabled())
+        }
+        if ((other.vlanPriority != null) && other.vlanPriority.enabled()) {
             this.enableVlanPriority(other.vlanPriority.value());
-        if ((other.srcIPv4Net != null) && other.srcIPv4Net.enabled())
+        }
+        if ((other.srcIPv4Net != null) && other.srcIPv4Net.enabled()) {
             this.enableSrcIPv4Net(other.srcIPv4Net.value());
-        if ((other.dstIPv4Net != null) && other.dstIPv4Net.enabled())
+        }
+        if ((other.dstIPv4Net != null) && other.dstIPv4Net.enabled()) {
             this.enableDstIPv4Net(other.dstIPv4Net.value());
-        if ((other.ipProto != null) && other.ipProto.enabled())
+        }
+        if ((other.ipProto != null) && other.ipProto.enabled()) {
             this.enableIpProto(other.ipProto.value());
-        if ((other.ipToS != null) && other.ipToS.enabled())
+        }
+        if ((other.ipToS != null) && other.ipToS.enabled()) {
             this.enableIpToS(other.ipToS.value());
-        if ((other.srcTcpUdpPort != null) && other.srcTcpUdpPort.enabled())
+        }
+        if ((other.srcTcpUdpPort != null) && other.srcTcpUdpPort.enabled()) {
             this.enableSrcTcpUdpPort(other.srcTcpUdpPort.value());
-        if ((other.dstTcpUdpPort != null) && other.dstTcpUdpPort.enabled())
+        }
+        if ((other.dstTcpUdpPort != null) && other.dstTcpUdpPort.enabled()) {
             this.enableDstTcpUdpPort(other.dstTcpUdpPort.value());
+        }
     }
 
     /**
@@ -131,8 +143,9 @@
      */
     @JsonProperty("inPort")
     public Port inPort() {
-        if (inPort != null)
+        if (inPort != null) {
             return inPort.value();
+        }
         return null;
     }
 
@@ -160,8 +173,9 @@
      */
     @JsonProperty("matchInPort")
     public boolean matchInPort() {
-        if (inPort != null)
+        if (inPort != null) {
             return inPort.enabled();
+        }
         return false;
     }
 
@@ -172,8 +186,9 @@
      */
     @JsonProperty("srcMac")
     public MACAddress srcMac() {
-        if (srcMac != null)
+        if (srcMac != null) {
             return srcMac.value();
+        }
         return null;
     }
 
@@ -201,8 +216,9 @@
      */
     @JsonProperty("matchSrcMac")
     public boolean matchSrcMac() {
-        if (srcMac != null)
+        if (srcMac != null) {
             return srcMac.enabled();
+        }
         return false;
     }
 
@@ -213,8 +229,9 @@
      */
     @JsonProperty("dstMac")
     public MACAddress dstMac() {
-        if (dstMac != null)
+        if (dstMac != null) {
             return dstMac.value();
+        }
         return null;
     }
 
@@ -242,8 +259,9 @@
      */
     @JsonProperty("matchDstMac")
     public boolean matchDstMac() {
-        if (dstMac != null)
+        if (dstMac != null) {
             return dstMac.enabled();
+        }
         return false;
     }
 
@@ -254,8 +272,9 @@
      */
     @JsonProperty("ethernetFrameType")
     public Short ethernetFrameType() {
-        if (ethernetFrameType != null)
+        if (ethernetFrameType != null) {
             return ethernetFrameType.value();
+        }
         return null;
     }
 
@@ -284,8 +303,9 @@
      */
     @JsonProperty("matchEthernetFrameType")
     public boolean matchEthernetFrameType() {
-        if (ethernetFrameType != null)
+        if (ethernetFrameType != null) {
             return ethernetFrameType.enabled();
+        }
         return false;
     }
 
@@ -296,8 +316,9 @@
      */
     @JsonProperty("vlanId")
     public Short vlanId() {
-        if (vlanId != null)
+        if (vlanId != null) {
             return vlanId.value();
+        }
         return null;
     }
 
@@ -325,8 +346,9 @@
      */
     @JsonProperty("matchVlanId")
     public boolean matchVlanId() {
-        if (vlanId != null)
+        if (vlanId != null) {
             return vlanId.enabled();
+        }
         return false;
     }
 
@@ -337,8 +359,9 @@
      */
     @JsonProperty("vlanPriority")
     public Byte vlanPriority() {
-        if (vlanPriority != null)
+        if (vlanPriority != null) {
             return vlanPriority.value();
+        }
         return null;
     }
 
@@ -366,8 +389,9 @@
      */
     @JsonProperty("matchVlanPriority")
     public boolean matchVlanPriority() {
-        if (vlanPriority != null)
+        if (vlanPriority != null) {
             return vlanPriority.enabled();
+        }
         return false;
     }
 
@@ -378,8 +402,9 @@
      */
     @JsonProperty("srcIPv4Net")
     public IPv4Net srcIPv4Net() {
-        if (srcIPv4Net != null)
+        if (srcIPv4Net != null) {
             return srcIPv4Net.value();
+        }
         return null;
     }
 
@@ -407,8 +432,9 @@
      */
     @JsonProperty("matchSrcIPv4Net")
     public boolean matchSrcIPv4Net() {
-        if (srcIPv4Net != null)
+        if (srcIPv4Net != null) {
             return srcIPv4Net.enabled();
+        }
         return false;
     }
 
@@ -419,8 +445,9 @@
      */
     @JsonProperty("dstIPv4Net")
     public IPv4Net dstIPv4Net() {
-        if (dstIPv4Net != null)
+        if (dstIPv4Net != null) {
             return dstIPv4Net.value();
+        }
         return null;
     }
 
@@ -449,8 +476,9 @@
      */
     @JsonProperty("matchDstIPv4Net")
     public boolean matchDstIPv4Net() {
-        if (dstIPv4Net != null)
+        if (dstIPv4Net != null) {
             return dstIPv4Net.enabled();
+        }
         return false;
     }
 
@@ -461,8 +489,9 @@
      */
     @JsonProperty("ipProto")
     public Byte ipProto() {
-        if (ipProto != null)
+        if (ipProto != null) {
             return ipProto.value();
+        }
         return null;
     }
 
@@ -490,8 +519,9 @@
      */
     @JsonProperty("matchIpProto")
     public boolean matchIpProto() {
-        if (ipProto != null)
+        if (ipProto != null) {
             return ipProto.enabled();
+        }
         return false;
     }
 
@@ -502,8 +532,9 @@
      */
     @JsonProperty("ipToS")
     public Byte ipToS() {
-        if (ipToS != null)
+        if (ipToS != null) {
             return ipToS.value();
+        }
         return null;
     }
 
@@ -531,8 +562,9 @@
      */
     @JsonProperty("matchIpToS")
     public boolean matchIpToS() {
-        if (ipToS != null)
+        if (ipToS != null) {
             return ipToS.enabled();
+        }
         return false;
     }
 
@@ -543,8 +575,9 @@
      */
     @JsonProperty("srcTcpUdpPort")
     public Short srcTcpUdpPort() {
-        if (srcTcpUdpPort != null)
+        if (srcTcpUdpPort != null) {
             return srcTcpUdpPort.value();
+        }
         return null;
     }
 
@@ -572,8 +605,9 @@
      */
     @JsonProperty("matchSrcTcpUdpPort")
     public boolean matchSrcTcpUdpPort() {
-        if (srcTcpUdpPort != null)
+        if (srcTcpUdpPort != null) {
             return srcTcpUdpPort.enabled();
+        }
         return false;
     }
 
@@ -584,8 +618,9 @@
      */
     @JsonProperty("dstTcpUdpPort")
     public Short dstTcpUdpPort() {
-        if (dstTcpUdpPort != null)
+        if (dstTcpUdpPort != null) {
             return dstTcpUdpPort.value();
+        }
         return null;
     }
 
@@ -614,8 +649,9 @@
      */
     @JsonProperty("matchDstTcpUdpPort")
     public boolean matchDstTcpUdpPort() {
-        if (dstTcpUdpPort != null)
+        if (dstTcpUdpPort != null) {
             return dstTcpUdpPort.enabled();
+        }
         return false;
     }
 
@@ -636,74 +672,86 @@
         // Conditionally add only those matching fields that are enabled
         //
         if (matchInPort()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "inPort=" + this.inPort().toString();
         }
         if (matchSrcMac()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "srcMac=" + this.srcMac().toString();
         }
         if (matchDstMac()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "dstMac=" + this.dstMac().toString();
         }
         if (matchEthernetFrameType()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "ethernetFrameType=" + this.ethernetFrameType().toString();
         }
         if (matchVlanId()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "vlanId=" + this.vlanId().toString();
         }
         if (matchVlanPriority()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "vlanPriority=" + this.vlanPriority().toString();
         }
         if (matchSrcIPv4Net()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "srcIPv4Net=" + this.srcIPv4Net().toString();
         }
         if (matchDstIPv4Net()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "dstIPv4Net=" + this.dstIPv4Net().toString();
         }
         if (matchIpProto()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "ipProto=" + this.ipProto().toString();
         }
         if (matchIpToS()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "ipToS=" + this.ipToS().toString();
         }
         if (matchSrcTcpUdpPort()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "srcTcpUdpPort=" + this.srcTcpUdpPort().toString();
         }
         if (matchDstTcpUdpPort()) {
-            if (addSpace)
+            if (addSpace) {
                 ret += " ";
+            }
             addSpace = true;
             ret += "dstTcpUdpPort=" + this.dstTcpUdpPort().toString();
         }
