diff --git a/utils/os_client.py b/utils/os_client.py
index 63f9151..03462dc 100644
--- a/utils/os_client.py
+++ b/utils/os_client.py
@@ -10,6 +10,7 @@
 from keystoneauth1 import session as keystone_session
 from keystoneclient.v3 import client as keystone_client
 from neutronclient.v2_0 import client as neutron_client
+from neutronclient import common as neutron_common
 from novaclient import client as novaclient
 
 import utils
@@ -297,42 +298,49 @@
             rulesets = [
                 {
                     # ssh
-                    'ip_protocol': 'tcp',
-                    'from_port': 22,
-                    'to_port': 22,
-                    'cidr': '0.0.0.0/0',
+                    'protocol': 'tcp',
+                    'port_range_max': 22,
+                    'port_range_min': 22,
+                    'remote_ip_prefix': '0.0.0.0/0',
+                    'direction': 'ingress'
                 },
                 {
                     # iperf3
-                    'ip_protocol': 'tcp',
-                    'from_port': 5201,
-                    'to_port': 5201,
-                    'cidr': '0.0.0.0/0',
+                    'protocol': 'tcp',
+                    'port_range_max': 5201,
+                    'port_range_min': 5201,
+                    'remote_ip_prefix': '0.0.0.0/0',
+                    'direction': 'ingress'
                 },
                 {
                     # iperf
-                    'ip_protocol': 'tcp',
-                    'from_port': 5001,
-                    'to_port': 5001,
-                    'cidr': '0.0.0.0/0',
+                    'protocol': 'tcp',
+                    'port_range_max': 5001,
+                    'port_range_min': 5001,
+                    'remote_ip_prefix': '0.0.0.0/0',
+                    'direction': 'ingress'
                 },
                 {
                     # ping
-                    'ip_protocol': 'icmp',
-                    'from_port': -1,
-                    'to_port': -1,
-                    'cidr': '0.0.0.0/0',
+                    'protocol': 'icmp',
+                    'remote_ip_prefix': '0.0.0.0/0',
+                    'direction': 'ingress'
                 }
             ]
         sg_name = "spt-test-secgroup-{}".format(random.randrange(100, 999))
         sg_desc = sg_name + " SPT"
-        secgroup = self.os_clients.compute.security_groups.create(
-            sg_name, sg_desc)
+        body = {"security_group": {"name": sg_name, "description": sg_desc}}
+        secgroup = self.os_clients.network.create_security_group(body=body)
+
+        rule_body_teplate = {"security_group_rule": {}}
         for ruleset in rulesets:
-            self.os_clients.compute.security_group_rules.create(
-                secgroup.id, **ruleset)
+            rule_body_teplate["security_group_rule"] = ruleset
+            rule_body_teplate["security_group_rule"]["security_group_id"] = \
+                secgroup['security_group']['id']
+            self.os_clients.network.create_security_group_rule(
+                body=rule_body_teplate)
         logger.info("Created a security group {}".format(sg_name))
-        return secgroup
+        return secgroup['security_group']
 
     def create_basic_server(self, image=None, flavor=None, net=None,
                             availability_zone=None, sec_groups=(),
@@ -355,7 +363,7 @@
             vm = os_conn.compute.servers.find(id=vm_id)
         except Exception as e:
             raise Exception(
-                "{}. Could not get the VM \"{}\": {}".format(
+                "Could not get the VM \"{}\": {}".format(
                     vm_id, e))
         return vm
 
@@ -444,3 +452,16 @@
         nova_services = self.os_clients.compute.hosts.list()
         computes_list = [h for h in nova_services if h.service == "compute"]
         return computes_list
+
+    def create_floating_ip(self, floating_net_id):
+        fip = self.os_clients.network.create_floatingip({"floatingip": {
+            "floating_network_id": floating_net_id}})
+        return fip['floatingip']
+
+    def delete_floating_ip(self, floatingip_id):
+        try:
+            return self.os_clients.network.delete_floatingip(floatingip_id)
+        except neutron_common.exceptions.NotFound as e:
+            msg = "Could not delete a Floating IP, UUID {}. Error: {}" \
+                  "".format(floatingip_id, e)
+            logger.info(msg)
