diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackGroupRuleManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackGroupRuleManager.java
index e3af2c1..1f2ae55 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackGroupRuleManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackGroupRuleManager.java
@@ -19,6 +19,7 @@
 import org.onosproject.core.CoreService;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.group.DefaultGroupDescription;
+import org.onosproject.net.group.Group;
 import org.onosproject.net.group.GroupBucket;
 import org.onosproject.net.group.GroupBuckets;
 import org.onosproject.net.group.GroupDescription;
@@ -64,14 +65,19 @@
     public void setRule(ApplicationId appId, DeviceId deviceId, int groupId,
                         GroupDescription.Type type, List<GroupBucket> buckets,
                         boolean install) {
+        Group group = groupService.getGroup(deviceId, getGroupKey(groupId));
         if (install) {
-            GroupDescription groupDesc = new DefaultGroupDescription(deviceId,
-                    type, new GroupBuckets(buckets), getGroupKey(groupId), groupId, appId);
-            groupService.addGroup(groupDesc);
-            log.info("Adding group rule {}", groupId);
+            if (group == null) {
+                GroupDescription groupDesc = new DefaultGroupDescription(deviceId,
+                        type, new GroupBuckets(buckets), getGroupKey(groupId), groupId, appId);
+                groupService.addGroup(groupDesc);
+                log.debug("Adding group table rule {}", groupId);
+            }
         } else {
-            groupService.removeGroup(deviceId, getGroupKey(groupId), appId);
-            log.info("Removing group rule {}", groupId);
+            if (group != null) {
+                groupService.removeGroup(deviceId, getGroupKey(groupId), appId);
+                log.debug("Removing group table rule {}", groupId);
+            }
         }
     }
 
@@ -83,14 +89,22 @@
     @Override
     public void setBuckets(ApplicationId appId, DeviceId deviceId,
                            int groupId, List<GroupBucket> buckets, boolean install) {
+        if (!hasGroup(deviceId, groupId)) {
+            return;
+        }
         if (install) {
-            groupService.addBucketsToGroup(deviceId, getGroupKey(groupId),
-                    new GroupBuckets(buckets), getGroupKey(groupId), appId);
-            log.info("Adding buckets for group rule {}", groupId);
+            // we add the buckets into the group, only if the buckets do not exist
+            // in the given group
+            Group group = groupService.getGroup(deviceId, getGroupKey(groupId));
+            if (group.buckets() != null && !group.buckets().buckets().containsAll(buckets)) {
+                groupService.addBucketsToGroup(deviceId, getGroupKey(groupId),
+                        new GroupBuckets(buckets), getGroupKey(groupId), appId);
+                log.debug("Adding buckets for group rule {}", groupId);
+            }
         } else {
             groupService.removeBucketsFromGroup(deviceId, getGroupKey(groupId),
                     new GroupBuckets(buckets), getGroupKey(groupId), appId);
-            log.info("Removing buckets for group rule {}", groupId);
+            log.debug("Removing buckets for group rule {}", groupId);
         }
     }
 
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackMetadataProxyHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackMetadataProxyHandler.java
index 420846d..b5413af 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackMetadataProxyHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackMetadataProxyHandler.java
@@ -544,7 +544,7 @@
 
             String method = oldRequest.getRequestLine().getMethod().toUpperCase();
 
-            log.info("Sending HTTP {} request to metadata endpoint {}...", method, url);
+            log.debug("Sending HTTP {} request to metadata endpoint {}...", method, url);
 
             switch (method) {
                 case HTTP_POST_METHOD:
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
index 4a8dc7c..b3c1a1f 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
@@ -828,7 +828,7 @@
 
         IpAddress natAddress = externalGatewayIpSnatEnabled(osRouter.get(), osNetworkAdminService);
         if (natAddress == null) {
-            log.warn("NAT address is not found");
+            log.debug("NAT address is not found");
             return;
         }
 
