diff --git a/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java b/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
index 3923173..8f1662c 100644
--- a/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
+++ b/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
@@ -300,7 +300,7 @@
         entries = complete(ret);
         log.trace(" keystore.getChildren({})", spath);
         log.trace("  entries keys:{}", entries.keySet());
-        if ((entries != null) && (!entries.isEmpty())) {
+        if (!entries.isEmpty()) {
             entries.forEach((k, v) -> {
                 String[] names = k.split(ResourceIdParser.NM_CHK);
                 String name = names[0];
diff --git a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
index 9a8b3e0..17028d6 100644
--- a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
+++ b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
@@ -1024,7 +1024,7 @@
 
         Boolean directConnFlag = directlyConnected(dhcp6Relay);
         ConnectPoint inPort = context.inPacket().receivedFrom();
-        if ((directConnFlag || (!directConnFlag && indirectDhcpServerIp == null))
+        if ((directConnFlag || indirectDhcpServerIp == null)
              && !inPort.equals(dhcpServerConnectPoint)) {
             log.warn("Receiving port {} is not the same as server connect point {} for direct or indirect-null",
                     inPort, dhcpServerConnectPoint);
diff --git a/apps/evpnopenflow/src/main/java/org/onosproject/evpnopenflow/rsc/vpnport/impl/VpnPortManager.java b/apps/evpnopenflow/src/main/java/org/onosproject/evpnopenflow/rsc/vpnport/impl/VpnPortManager.java
index 18ff172..2babba6 100644
--- a/apps/evpnopenflow/src/main/java/org/onosproject/evpnopenflow/rsc/vpnport/impl/VpnPortManager.java
+++ b/apps/evpnopenflow/src/main/java/org/onosproject/evpnopenflow/rsc/vpnport/impl/VpnPortManager.java
@@ -290,8 +290,6 @@
         String cidr = "0.0.0.0/0";
         String gatewayIp = "0.0.0.0";
         Set<HostRoute> hostRoutes = Sets.newHashSet();
-        String ipV6AddressMode = null;
-        String ipV6RaMode = null;
         TenantNetworkId tenantNetworkId = null;
         Set<AllocationPool> allocationPools = Sets.newHashSet();
         Iterable<TenantNetwork> networks
@@ -306,11 +304,11 @@
         Subnet subnet = new DefaultSubnet(SubnetId.subnetId(id), subnetName,
                                           tenantNetworkId,
                                           tenantId, IpAddress.Version.INET,
-                                          cidr == null ? null : IpPrefix.valueOf(cidr),
-                                          gatewayIp == null ? null : IpAddress.valueOf(gatewayIp),
+                                          IpPrefix.valueOf(cidr),
+                                          IpAddress.valueOf(gatewayIp),
                                           false, false, hostRoutes,
-                                          ipV6AddressMode == null ? null : Subnet.Mode.valueOf(ipV6AddressMode),
-                                          ipV6RaMode == null ? null : Subnet.Mode.valueOf(ipV6RaMode),
+                                          null,
+                                          null,
                                           allocationPools);
 
         Set<Subnet> subnetsSet = Sets.newHashSet(subnet);
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
index a0cb597..5ce27e3 100644
--- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
@@ -916,7 +916,7 @@
 
         if (newKey != null) {
             DefaultTeTopology newTopology = new DefaultTeTopology(
-                    newKey == null ? teTopology.teTopologyId() : newKey,
+                    newKey,
                     teTopology.teNodes(), teTopology.teLinks(),
                     teTopology.teTopologyIdStringValue(), new CommonTopologyData(teTopology));
             // Update with new data
diff --git a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngConfigurationManager.java b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngConfigurationManager.java
index dded6bd..1e8a5ed 100644
--- a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngConfigurationManager.java
+++ b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngConfigurationManager.java
@@ -280,10 +280,10 @@
                 return true;
             }
         }
-        if (!isPublicIpExist) {
-            log.info("The public IP address {} retrieved from XOS mapping does "
-                    + "not exist", publicIpAddress);
-        }
+
+        log.info("The public IP address {} retrieved from XOS mapping does "
+                + "not exist", publicIpAddress);
+
         return false;
     }
 
