diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
index c02c1ec..b2f0af0 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
@@ -15,9 +15,12 @@
  */
 package org.onosproject.scalablegateway.api;
 
+import com.google.common.base.MoreObjects;
 import org.onlab.packet.Ip4Address;
 import org.onosproject.net.DeviceId;
 
+import java.util.Objects;
+
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
@@ -62,6 +65,40 @@
         return dataIpAddress;
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (obj instanceof GatewayNode) {
+            GatewayNode that = (GatewayNode) obj;
+            if (Objects.equals(gatewayDeviceId, that.gatewayDeviceId) &&
+                    Objects.equals(gatewayExternalInterfaceName,
+                                   that.gatewayExternalInterfaceName) &&
+                    Objects.equals(dataIpAddress, that.dataIpAddress)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(gatewayDeviceId,
+                            gatewayExternalInterfaceName,
+                            dataIpAddress);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("deviceId", gatewayDeviceId)
+                .add("externalPort", gatewayExternalInterfaceName)
+                .add("dataIp", dataIpAddress)
+                .toString();
+    }
+
     /**
      * Returns GatewayNode builder object.
      *
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
index adf354e..37e601c 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
@@ -203,9 +203,15 @@
 
     @Override
     public boolean addGatewayNode(GatewayNode gatewayNode) {
-        gatewayNodeMap.putIfAbsent(gatewayNode.getGatewayDeviceId(), gatewayNode);
-        updateGatewayLoadBalance(gatewayNode, true);
-        return true;
+        Versioned<GatewayNode> existingNode = gatewayNodeMap.putIfAbsent(
+                gatewayNode.getGatewayDeviceId(), gatewayNode);
+        if (existingNode == null) {
+            updateGatewayLoadBalance(gatewayNode, true);
+            log.info("Added {} to gateway pool", gatewayNode);
+            return true;
+        } else {
+            return false;
+        }
     }
 
     @Override
