diff --git a/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackPort.java b/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackPort.java
index b746b6c..f9a5916 100644
--- a/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackPort.java
+++ b/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackPort.java
@@ -15,13 +15,12 @@
  */
 package org.onosproject.openstackswitching;
 
-import com.google.common.collect.Lists;
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.MacAddress;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -49,13 +48,13 @@
     // <subnet id, ip address>
     private HashMap<String, Ip4Address> fixedIps;
     private String id;
-    private List<String> securityGroups;
+    private Collection<String> securityGroups;
     private String deviceId;
 
     private OpenstackPort(PortStatus status, String name, boolean adminStateUp,
                           String networkId, String tenantId, String deviceOwner,
                           MacAddress macAddress, HashMap fixedIps, String id,
-                          List<String> securityGroups, String deviceId) {
+                          Collection<String> securityGroups, String deviceId) {
 
         this.status = status;
         this.name = name;
@@ -158,7 +157,7 @@
      *
      * @return security group info
      */
-    public List<String> securityGroups() {
+    public Collection<String> securityGroups() {
         return securityGroups;
     }
 
@@ -187,7 +186,7 @@
         OpenstackPort op = new OpenstackPort(this.status, this.name, this.adminStateUp,
                 this.networkId, this.tenantId, this.deviceOwner, this.macAddress,
                 (HashMap) this.fixedIps.clone(), this.id,
-                Collections.unmodifiableList(this.securityGroups), this.deviceId);
+                Collections.unmodifiableCollection(this.securityGroups), this.deviceId);
 
         return op;
     }
@@ -209,12 +208,11 @@
         // list  of hash map <subnet id, ip address>
         private HashMap<String, Ip4Address> fixedIps;
         private String id;
-        private List<String> securityGroups;
+        private Collection<String> securityGroups;
         private String deviceId;
 
         Builder() {
             fixedIps = new HashMap<>();
-            securityGroups = Lists.newArrayList();
         }
 
         /**
@@ -328,12 +326,11 @@
         /**
          * Sets security group of the port.
          *
-         * @param securityGroup security group of the port
+         * @param securityGroupList security group list of the port
          * @return Builder object
          */
-        public Builder securityGroup(String securityGroup) {
-            securityGroups.add(securityGroup);
-
+        public Builder securityGroup(Collection<String> securityGroupList) {
+            this.securityGroups = securityGroupList;
             return this;
         }
 
diff --git a/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackSubnet.java b/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackSubnet.java
index bc536e8..f832768 100644
--- a/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackSubnet.java
+++ b/apps/openstackswitching/api/src/main/java/org/onosproject/openstackswitching/OpenstackSubnet.java
@@ -17,6 +17,8 @@
 
 import org.onlab.packet.Ip4Address;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -34,10 +36,11 @@
     private String gatewayIp;
     private String cidr;
     private String id;
+    private Collection<String> securityGroups;
 
     private OpenstackSubnet(String name, boolean enableHhcp, String networkId,
                             String tenantId, List<Ip4Address> dnsNameservers, String gatewayIp,
-                            String cidr, String id) {
+                            String cidr, String id, Collection<String> securityGroups) {
         this.name = name;
         this.enableHhcp = enableHhcp;
         this.networkId = checkNotNull(networkId);
@@ -46,6 +49,7 @@
         this.gatewayIp = gatewayIp;
         this.cidr = checkNotNull(cidr);
         this.id = checkNotNull(id);
+        this.securityGroups = securityGroups;
     }
 
     /**
@@ -89,6 +93,10 @@
         return id;
     }
 
+    public Collection<String> securityGroups() {
+        return Collections.unmodifiableCollection(this.securityGroups);
+    }
+
     /**
      * OpenstackSubnet Builder class.
      *
@@ -102,6 +110,7 @@
         private String gatewayIp;
         private String cidr;
         private String id;
+        private Collection<String> securityGroups;
 
         Builder() {}
 
@@ -153,9 +162,15 @@
             return this;
         }
 
+        public Builder securityGroups(Collection<String> securityGroups) {
+            this.securityGroups = securityGroups;
+
+            return this;
+        }
+
         public OpenstackSubnet build() {
             return new OpenstackSubnet(name, enableDhcp, networkId, tenantId,
-                    dnsNameservers, gatewayIp, cidr, id);
+                    dnsNameservers, gatewayIp, cidr, id, securityGroups);
         }
     }
 }
