diff --git a/apps/acl/src/main/java/org/onosproject/acl/AclRule.java b/apps/acl/src/main/java/org/onosproject/acl/AclRule.java
index 8c91da4..cd85dea 100644
--- a/apps/acl/src/main/java/org/onosproject/acl/AclRule.java
+++ b/apps/acl/src/main/java/org/onosproject/acl/AclRule.java
@@ -86,7 +86,7 @@
     /**
      * Check if the first CIDR address is in (or the same as) the second CIDR address.
      */
-    private boolean checkCIDRinCIDR(Ip4Prefix cidrAddr1, Ip4Prefix cidrAddr2) {
+    private boolean checkCidrInCidr(Ip4Prefix cidrAddr1, Ip4Prefix cidrAddr2) {
         if (cidrAddr2 == null) {
             return true;
         } else if (cidrAddr1 == null) {
@@ -116,8 +116,8 @@
     public boolean checkMatch(AclRule r) {
         return (this.dstTpPort == r.dstTpPort || r.dstTpPort == 0)
                 && (this.ipProto == r.ipProto || r.ipProto == 0)
-                && (checkCIDRinCIDR(this.srcIp(), r.srcIp()))
-                && (checkCIDRinCIDR(this.dstIp(), r.dstIp()));
+                && (checkCidrInCidr(this.srcIp(), r.srcIp()))
+                && (checkCidrInCidr(this.dstIp(), r.dstIp()));
     }
 
     /**
diff --git a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
index 9ec4c88..bdbcc69 100644
--- a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
+++ b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
@@ -129,7 +129,7 @@
      * @return 200 OK
      */
     @DELETE
-    public Response clearACL() {
+    public Response clearAcl() {
         get(AclService.class).clearAcl();
         return Response.ok().build();
     }
@@ -189,4 +189,4 @@
         return rule.build();
     }
 
-}
\ No newline at end of file
+}
diff --git a/apps/acl/src/main/java/org/onosproject/acl/impl/AclManager.java b/apps/acl/src/main/java/org/onosproject/acl/impl/AclManager.java
index f5c0c20..638f079 100644
--- a/apps/acl/src/main/java/org/onosproject/acl/impl/AclManager.java
+++ b/apps/acl/src/main/java/org/onosproject/acl/impl/AclManager.java
@@ -90,7 +90,7 @@
     /**
      * Checks if the given IP address is in the given CIDR address.
      */
-    private boolean checkIpInCIDR(Ip4Address ip, Ip4Prefix cidr) {
+    private boolean checkIpInCidr(Ip4Address ip, Ip4Prefix cidr) {
         int offset = 32 - cidr.prefixLength();
         int cidrPrefix = cidr.address().toInt();
         int ipIntValue = ip.toInt();
@@ -111,17 +111,17 @@
             DeviceId deviceId = event.subject().location().deviceId();
             for (IpAddress address : event.subject().ipAddresses()) {
                 if ((rule.srcIp() != null) ?
-                        (checkIpInCIDR(address.getIp4Address(), rule.srcIp())) :
-                        (checkIpInCIDR(address.getIp4Address(), rule.dstIp()))) {
+                        (checkIpInCidr(address.getIp4Address(), rule.srcIp())) :
+                        (checkIpInCidr(address.getIp4Address(), rule.dstIp()))) {
                     if (!aclStore.checkIfRuleWorksInDevice(rule.id(), deviceId)) {
                         List<RuleId> allowingRuleList = aclStore
                                 .getAllowingRuleByDenyingRule(rule.id());
                         if (allowingRuleList != null) {
                             for (RuleId allowingRuleId : allowingRuleList) {
-                                generateACLFlow(aclStore.getAclRule(allowingRuleId), deviceId);
+                                generateAclFlow(aclStore.getAclRule(allowingRuleId), deviceId);
                             }
                         }
-                        generateACLFlow(rule, deviceId);
+                        generateAclFlow(rule, deviceId);
                     }
                 }
             }
@@ -212,7 +212,7 @@
         if (cidrAddr.prefixLength() != 32) {
             for (Host h : hosts) {
                 for (IpAddress a : h.ipAddresses()) {
-                    if (checkIpInCIDR(a.getIp4Address(), cidrAddr)) {
+                    if (checkIpInCidr(a.getIp4Address(), cidrAddr)) {
                         deviceIdSet.add(h.location().deviceId());
                     }
                 }
@@ -220,7 +220,7 @@
         } else {
             for (Host h : hosts) {
                 for (IpAddress a : h.ipAddresses()) {
-                    if (checkIpInCIDR(a.getIp4Address(), cidrAddr)) {
+                    if (checkIpInCidr(a.getIp4Address(), cidrAddr)) {
                         deviceIdSet.add(h.location().deviceId());
                         return deviceIdSet;
                     }
@@ -245,10 +245,10 @@
             List<RuleId> allowingRuleList = aclStore.getAllowingRuleByDenyingRule(rule.id());
             if (allowingRuleList != null) {
                 for (RuleId allowingRuleId : allowingRuleList) {
-                    generateACLFlow(aclStore.getAclRule(allowingRuleId), deviceId);
+                    generateAclFlow(aclStore.getAclRule(allowingRuleId), deviceId);
                 }
             }
-            generateACLFlow(rule, deviceId);
+            generateAclFlow(rule, deviceId);
         }
     }
 
@@ -256,7 +256,7 @@
      * Generates ACL flow rule according to ACL rule
      * and install it into related device.
      */
-    private void generateACLFlow(AclRule rule, DeviceId deviceId) {
+    private void generateAclFlow(AclRule rule, DeviceId deviceId) {
         if (rule == null || aclStore.checkIfRuleWorksInDevice(rule.id(), deviceId)) {
             return;
         }
