diff --git a/osmclient/common/utils.py b/osmclient/common/utils.py
index a3f4bc8..8ef325f 100644
--- a/osmclient/common/utils.py
+++ b/osmclient/common/utils.py
@@ -67,10 +67,10 @@
 
     dict = yaml.load(tar.extractfile(yamlfile))
     result = {}
-    for k1, v1 in dict.items():
+    for k1, v1 in list(dict.items()):
         if not k1.endswith('-catalog'):
             continue
-        for k2, v2 in v1.items():
+        for k2, v2 in list(v1.items()):
             if not k2.endswith('nsd') and not k2.endswith('vnfd'):
                 continue
 
@@ -80,7 +80,7 @@
                 result['type'] = 'vnfd'
 
             for entry in v2:
-                for k3, v3 in entry.items():
+                for k3, v3 in list(entry.items()):
                     # strip off preceeding chars before :
                     key_name = k3.split(':').pop()
 
diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py
index d581228..ba8ef5a 100755
--- a/osmclient/scripts/osm.py
+++ b/osmclient/scripts/osm.py
@@ -76,9 +76,9 @@
 @click.pass_context
 def cli(ctx, hostname, so_port, so_project, ro_hostname, ro_port, sol005):
     if hostname is None:
-        print(
+        print((
             "either hostname option or OSM_HOSTNAME " +
-            "environment variable needs to be specified")
+            "environment variable needs to be specified"))
         exit(1)
     kwargs={}
     if so_port is not None:
@@ -228,7 +228,7 @@
         else:
             resp = ctx.obj.vnf.list()
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
     fullclassname = ctx.obj.__module__ + "." + ctx.obj.__class__.__name__
     if fullclassname == 'osmclient.sol005.client.Client':
@@ -280,7 +280,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         resp = ctx.obj.ns.list_op(name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     table = PrettyTable(['id', 'operation', 'status'])
@@ -299,15 +299,15 @@
         resp = ctx.obj.nsd.get(name)
         #resp = ctx.obj.nsd.get_individual(name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     if literal:
-        print yaml.safe_dump(resp)
+        print(yaml.safe_dump(resp))
         return
 
     table = PrettyTable(['field', 'value'])
-    for k, v in resp.items():
+    for k, v in list(resp.items()):
         table.add_row([k, json.dumps(v, indent=2)])
     table.align = 'l'
     print(table)
@@ -344,15 +344,15 @@
         resp = ctx.obj.vnfd.get(name)
         #resp = ctx.obj.vnfd.get_individual(name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     if literal:
-        print yaml.safe_dump(resp)
+        print(yaml.safe_dump(resp))
         return
 
     table = PrettyTable(['field', 'value'])
-    for k, v in resp.items():
+    for k, v in list(resp.items()):
         table.add_row([k, json.dumps(v, indent=2)])
     table.align = 'l'
     print(table)
@@ -398,16 +398,16 @@
     try:
         ns = ctx.obj.ns.get(name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     if literal:
-        print yaml.safe_dump(resp)
+        print(yaml.safe_dump(ns))
         return
 
     table = PrettyTable(['field', 'value'])
 
-    for k, v in ns.items():
+    for k, v in list(ns.items()):
         if filter is None or filter in k:
             table.add_row([k, json.dumps(v, indent=2)])
 
@@ -415,7 +415,7 @@
     if fullclassname != 'osmclient.sol005.client.Client':
         nsopdata = ctx.obj.ns.get_opdata(ns['id'])
         nsr_optdata = nsopdata['nsr:nsr']
-        for k, v in nsr_optdata.items():
+        for k, v in list(nsr_optdata.items()):
             if filter is None or filter in k:
                 table.add_row([k, json.dumps(v, indent=2)])
     table.align = 'l'
@@ -437,15 +437,15 @@
         check_client_version(ctx.obj, ctx.command.name)
         resp = ctx.obj.vnf.get(name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     if literal:
-        print yaml.safe_dump(resp)
+        print(yaml.safe_dump(resp))
         return
 
     table = PrettyTable(['field', 'value'])
-    for k, v in resp.items():
+    for k, v in list(resp.items()):
         if filter is None or filter in k:
             table.add_row([k, json.dumps(v, indent=2)])
     table.align = 'l'
@@ -460,7 +460,7 @@
         check_client_version(ctx.obj, ctx.command.name, 'v1')
         resp = ctx.obj.vnf.get_monitoring(vnf_name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     table = PrettyTable(['vnf name', 'monitoring name', 'value', 'units'])
@@ -483,11 +483,11 @@
         check_client_version(ctx.obj, ctx.command.name, 'v1')
         resp = ctx.obj.ns.get_monitoring(ns_name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     table = PrettyTable(['vnf name', 'monitoring name', 'value', 'units'])
-    for key, val in resp.items():
+    for key, val in list(resp.items()):
         for monitor in val:
             table.add_row(
                 [key,
@@ -510,11 +510,11 @@
         check_client_version(ctx.obj, ctx.command.name)
         op_info = ctx.obj.ns.get_op(id)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     table = PrettyTable(['field', 'value'])
-    for k, v in op_info.items():
+    for k, v in list(op_info.items()):
         if filter is None or filter in k:
             table.add_row([k, json.dumps(v, indent=2)])
     table.align = 'l'
@@ -530,7 +530,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         ctx.obj.nsd.create(filename, overwrite)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -565,7 +565,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         ctx.obj.vnfd.create(filename, overwrite)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -631,7 +631,7 @@
             ssh_keys=ssh_keys,
             account=vim_account)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -644,7 +644,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         ctx.obj.nsd.update(name, content)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 @cli.command(name='nsd-update', short_help='updates a NSD/NSpkg')
@@ -678,7 +678,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         ctx.obj.vnfd.update(name, content)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -720,7 +720,7 @@
             check_client_version(ctx.obj, '--force')
             ctx.obj.nsd.delete(name, force)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -756,7 +756,7 @@
             check_client_version(ctx.obj, '--force')
             ctx.obj.vnfd.delete(name, force)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -800,7 +800,7 @@
             check_client_version(ctx.obj, '--force')
             ctx.obj.ns.delete(name, force)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -869,7 +869,7 @@
         else:
             ctx.obj.vim.create(name, vim)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -915,7 +915,7 @@
         if config: vim['config'] = config
         ctx.obj.vim.update(name, vim, sdn_controller, sdn_port_mapping)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -935,7 +935,7 @@
             check_client_version(ctx.obj, '--force')
             ctx.obj.vim.delete(name, force)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -977,11 +977,11 @@
         if 'vim_password' in resp:
             resp['vim_password']='********'
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     table = PrettyTable(['key', 'attribute'])
-    for k, v in resp.items():
+    for k, v in list(resp.items()):
         table.add_row([k, json.dumps(v, indent=2)])
     table.align = 'l'
     print(table)
@@ -1047,7 +1047,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         ctx.obj.sdnc.create(name, sdncontroller)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
 
 
 @cli.command(name='sdnc-update', short_help='updates an SDN controller')
@@ -1102,7 +1102,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         ctx.obj.sdnc.update(name, sdncontroller)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -1119,7 +1119,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         ctx.obj.sdnc.delete(name, force)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -1133,7 +1133,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         resp = ctx.obj.sdnc.list(filter)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
     table = PrettyTable(['name', 'id'])
     for sdnc in resp:
@@ -1154,11 +1154,11 @@
         check_client_version(ctx.obj, ctx.command.name)
         resp = ctx.obj.sdnc.get(name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     table = PrettyTable(['key', 'attribute'])
-    for k, v in resp.items():
+    for k, v in list(resp.items()):
         table.add_row([k, json.dumps(v, indent=2)])
     table.align = 'l'
     print(table)
@@ -1205,7 +1205,7 @@
         check_client_version(ctx.obj, ctx.command.name)
         ctx.obj.ns.create_alarm(alarm)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -1256,15 +1256,15 @@
     try:
         check_client_version(ctx.obj, ctx.command.name)
         if not interval:
-            print '{}'.format(ctx.obj.ns.export_metric(metric_data))
+            print('{}'.format(ctx.obj.ns.export_metric(metric_data)))
         else:
             i = 1
             while True:
-                print '{} {}'.format(ctx.obj.ns.export_metric(metric_data),i)
+                print('{} {}'.format(ctx.obj.ns.export_metric(metric_data),i))
                 time.sleep(int(interval))
                 i+=1
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -1286,7 +1286,7 @@
         if fullclassname != 'osmclient.sol005.client.Client':
             ctx.obj.package.wait_for_upload(filename)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -1302,7 +1302,7 @@
         check_client_version(ctx.obj, ctx.command.name, 'v1')
         resp = ctx.obj.ns.list()
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
     table = PrettyTable(
@@ -1346,7 +1346,7 @@
         check_client_version(ctx.obj, ctx.command.name, 'v1')
         ctx.obj.ns.scale(ns_name, ns_scale_group, index)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -1357,7 +1357,7 @@
     try:
         check_client_version(ctx.obj, ctx.command.name, 'v1')
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
     table = PrettyTable(['name', 'account-type', 'details'])
     for account in ctx.obj.vca.list():
@@ -1381,7 +1381,7 @@
         check_client_version(ctx.obj, ctx.command.name, 'v1')
         ctx.obj.vca.delete(name)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
@@ -1405,7 +1405,7 @@
         check_client_version(ctx.obj, ctx.command.name, 'v1')
         ctx.obj.vca.create(name, account_type, server, user, secret)
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 @cli.command(name='ro-dump')
@@ -1415,7 +1415,7 @@
     check_client_version(ctx.obj, ctx.command.name, 'v1')
     resp = ctx.obj.vim.get_resource_orchestrator()
     table = PrettyTable(['key', 'attribute'])
-    for k, v in resp.items():
+    for k, v in list(resp.items()):
         table.add_row([k, json.dumps(v, indent=2)])
     table.align = 'l'
     print(table)
@@ -1458,7 +1458,7 @@
         ctx.obj.ns.exec_op(ns_name, op_name='action', op_data=op_data)
 
     except ClientException as inst:
-        print(inst.message)
+        print((inst.message))
         exit(1)
 
 
diff --git a/osmclient/sol005/client.py b/osmclient/sol005/client.py
index cec7436..479fc9a 100644
--- a/osmclient/sol005/client.py
+++ b/osmclient/sol005/client.py
@@ -68,7 +68,7 @@
         self._headers['Accept'] = 'application/json'
         self._headers['Content-Type'] = 'application/yaml'
         http_header = ['{}: {}'.format(key,val)
-                      for (key,val) in self._headers.items()]
+                      for (key,val) in list(self._headers.items())]
         self._http_client.set_http_header(http_header)
 
         token = self.get_token()
diff --git a/osmclient/sol005/http.py b/osmclient/sol005/http.py
index 4debf0d..7988d89 100644
--- a/osmclient/sol005/http.py
+++ b/osmclient/sol005/http.py
@@ -17,9 +17,7 @@
 from io import BytesIO
 import pycurl
 import json
-import yaml
 from osmclient.common import http
-from osmclient.common.exceptions import ClientException
 
 class Http(http.Http):
 
diff --git a/osmclient/sol005/ns.py b/osmclient/sol005/ns.py
index 75cdf3f..c60baa0 100644
--- a/osmclient/sol005/ns.py
+++ b/osmclient/sol005/ns.py
@@ -84,9 +84,9 @@
         #print 'HTTP CODE: {}'.format(http_code)
         #print 'RESP: {}'.format(resp)
         if http_code == 202:
-            print 'Deletion in progress'
+            print('Deletion in progress')
         elif http_code == 204:
-            print 'Deleted'
+            print('Deleted')
         else:
             msg = ""
             if resp:
@@ -143,7 +143,7 @@
                     if vld.get("vim-network-name"):
                         if isinstance(vld["vim-network-name"], dict):
                             vim_network_name_dict = {}
-                            for vim_account, vim_net in vld["vim-network-name"].items():
+                            for vim_account, vim_net in list(vld["vim-network-name"].items()):
                                 vim_network_name_dict[get_vim_account_id(vim_account)] = vim_net
                             vld["vim-network-name"] = vim_network_name_dict
                 ns["vld"] = ns_config["vld"]
@@ -169,7 +169,7 @@
                 if not resp or 'id' not in resp:
                     raise ClientException('unexpected response from server - {} '.format(
                                       resp))
-                print resp['id']
+                print(resp['id'])
             else:
                 msg = ""
                 if resp:
@@ -273,7 +273,7 @@
                 if not resp or 'id' not in resp:
                     raise ClientException('unexpected response from server - {}'.format(
                                       resp))
-                print resp['id']
+                print(resp['id'])
             else:
                 msg = ""
                 if resp:
@@ -299,7 +299,7 @@
             #print 'RESP: {}'.format(resp)
             if http_code in (200, 201, 202, 204):
                 #resp = json.loads(resp)
-                print 'Alarm created'
+                print('Alarm created')
             else:
                 msg = ""
                 if resp:
@@ -327,7 +327,7 @@
             #print 'RESP: {}'.format(resp)
             if http_code in (200, 201, 202, 204):
                 #resp = json.loads(resp)
-                print 'Alarm deleted'
+                print('Alarm deleted')
             else:
                 msg = ""
                 if resp:
@@ -339,7 +339,7 @@
                                       http_code, msg))
         except ClientException as exc:
             message="failed to delete alarm: alarm {}\n{}".format(
-                    alarm,
+                    name,
                     exc.message)
             raise ClientException(message)
 
diff --git a/osmclient/sol005/nsd.py b/osmclient/sol005/nsd.py
index 10ad38f..0dbec43 100644
--- a/osmclient/sol005/nsd.py
+++ b/osmclient/sol005/nsd.py
@@ -21,7 +21,6 @@
 from osmclient.common.exceptions import NotFound
 from osmclient.common.exceptions import ClientException
 from osmclient.common import utils
-import yaml
 import json
 import magic
 #from os import stat
@@ -109,9 +108,9 @@
         #print 'HTTP CODE: {}'.format(http_code)
         #print 'RESP: {}'.format(resp)
         if http_code == 202:
-            print 'Deletion in progress'
+            print('Deletion in progress')
         elif http_code == 204:
-            print 'Deleted'
+            print('Deleted')
         else:
             msg = ""
             if resp:
@@ -143,7 +142,7 @@
                   )
         headers["Content-File-MD5"] = utils.md5(filename)
         http_header = ['{}: {}'.format(key,val)
-                      for (key,val) in headers.items()]
+                      for (key,val) in list(headers.items())]
         self._http.set_http_header(http_header)
         if update_endpoint:
             http_code, resp = self._http.put_cmd(endpoint=update_endpoint, filename=filename)
@@ -164,7 +163,7 @@
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server - {}'.format(
                                       resp))
-            print resp['id']
+            print(resp['id'])
         else:
             msg = "Error {}".format(http_code)
             if resp:
diff --git a/osmclient/sol005/package.py b/osmclient/sol005/package.py
index 172ee45..887539b 100644
--- a/osmclient/sol005/package.py
+++ b/osmclient/sol005/package.py
@@ -18,13 +18,9 @@
 OSM package API handling
 """
 
-import tarfile
-import re
-import yaml
 #from os import stat
 #from os.path import basename
 from osmclient.common.exceptions import ClientException
-from osmclient.common.exceptions import NotFound
 from osmclient.common import utils
 import json
 
@@ -56,7 +52,7 @@
         #headers['Content-Range'] = 'bytes 0-{}/{}'.format(file_size - 1, file_size)
         headers["Content-File-MD5"] = utils.md5(filename)
         http_header = ['{}: {}'.format(key,val)
-                      for (key,val) in headers.items()]
+                      for (key,val) in list(headers.items())]
         self._http.set_http_header(http_header)
         http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
         #print 'HTTP CODE: {}'.format(http_code)
@@ -67,7 +63,7 @@
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server - {}'.format(
                                       resp))
-            print resp['id']
+            print(resp['id'])
         else:
             msg = ""
             if resp:
@@ -75,5 +71,5 @@
                      msg = json.loads(resp)
                 except ValueError:
                     msg = resp
-            raise ClientException("failed to delete ns {} - {}".format(name, msg))
+            raise ClientException("failed to upload package - {}".format(msg))
 
diff --git a/osmclient/sol005/sdncontroller.py b/osmclient/sol005/sdncontroller.py
index 39ad3be..6129961 100644
--- a/osmclient/sol005/sdncontroller.py
+++ b/osmclient/sol005/sdncontroller.py
@@ -21,7 +21,6 @@
 from osmclient.common import utils
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
-import yaml
 import json
 
 
@@ -45,7 +44,7 @@
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server - {}'.format(
                                       resp))
-            print resp['id']
+            print(resp['id'])
         else:
             msg = ""
             if resp:
@@ -67,7 +66,7 @@
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server - {}'.format(
                                       resp))
-            print resp['id']
+            print(resp['id'])
         else:
             msg = ""
             if resp:
@@ -87,11 +86,11 @@
         #print 'HTTP CODE: {}'.format(http_code)
         #print 'RESP: {}'.format(resp)
         if http_code == 202:
-            print 'Deletion in progress'
+            print('Deletion in progress')
         elif http_code == 204:
-            print 'Deleted'
+            print('Deleted')
         elif resp and 'result' in resp:
-            print 'Deleted'
+            print('Deleted')
         else:
             msg = ""
             if resp:
diff --git a/osmclient/sol005/vim.py b/osmclient/sol005/vim.py
index 6e15e5b..293362a 100644
--- a/osmclient/sol005/vim.py
+++ b/osmclient/sol005/vim.py
@@ -66,7 +66,7 @@
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server - {}'.format(
                                       resp))
-            print resp['id']
+            print(resp['id'])
         else:
             msg = ""
             if resp:
@@ -81,9 +81,9 @@
 
         vim_config = {}
         if 'config' in vim_account:
-            if config=="" and (sdncontroller or sdn_port_mapping):
+            if vim_account.get('config')=="" and (sdn_controller or sdn_port_mapping):
                 raise ClientException("clearing config is incompatible with updating SDN info")
-            if config=="":
+            if vim_account.get('config')=="":
                 vim_config = None
             else:
                 vim_config = yaml.safe_load(vim_account['config'])
@@ -105,7 +105,7 @@
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server - {}'.format(
                                       resp))
-            print resp['id']
+            print(resp['id'])
         else:
             msg = ""
             if resp:
@@ -144,9 +144,9 @@
         #print 'HTTP CODE: {}'.format(http_code)
         #print 'RESP: {}'.format(resp)
         if http_code == 202:
-            print 'Deletion in progress'
+            print('Deletion in progress')
         elif http_code == 204:
-            print 'Deleted'
+            print('Deleted')
         else:
             msg = ""
             if resp:
diff --git a/osmclient/sol005/vnfd.py b/osmclient/sol005/vnfd.py
index b4d7987..c769d4c 100644
--- a/osmclient/sol005/vnfd.py
+++ b/osmclient/sol005/vnfd.py
@@ -21,7 +21,6 @@
 from osmclient.common.exceptions import NotFound
 from osmclient.common.exceptions import ClientException
 from osmclient.common import utils
-import yaml
 import json
 import magic
 #from os import stat
@@ -108,9 +107,9 @@
         #print 'HTTP CODE: {}'.format(http_code)
         #print 'RESP: {}'.format(resp)
         if http_code == 202:
-            print 'Deletion in progress'
+            print('Deletion in progress')
         elif http_code == 204:
-            print 'Deleted'
+            print('Deleted')
         else:
             msg = ""
             if resp:
@@ -121,7 +120,7 @@
             raise ClientException("failed to delete vnfd {} - {}".format(name, msg))
 
     def create(self, filename, overwrite=None, update_endpoint=None):
-	mime_type = magic.from_file(filename, mime=True)
+        mime_type = magic.from_file(filename, mime=True)
         if mime_type is None:
             raise ClientException(
                      "failed to guess MIME type for file '{}'".format(filename))
@@ -142,7 +141,7 @@
                   )
         headers["Content-File-MD5"] = utils.md5(filename)
         http_header = ['{}: {}'.format(key,val)
-                      for (key,val) in headers.items()]
+                      for (key,val) in list(headers.items())]
         self._http.set_http_header(http_header)
         if update_endpoint:
             http_code, resp = self._http.put_cmd(endpoint=update_endpoint, filename=filename)
@@ -163,7 +162,7 @@
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server: '.format(
                                       resp))
-            print resp['id']
+            print(resp['id'])
         else:
             msg = "Error {}".format(http_code)
             if resp:
diff --git a/osmclient/v1/client.py b/osmclient/v1/client.py
index 7a332eb..b7ce83b 100644
--- a/osmclient/v1/client.py
+++ b/osmclient/v1/client.py
@@ -120,7 +120,7 @@
                 # SO Version 5.x.x.x.x translates to OSM V3
                 return 'v3'
             return 'v2'
-        except Exception as e:
+        except Exception:
             return 'v2'
 
 
diff --git a/osmclient/v1/ns.py b/osmclient/v1/ns.py
index 65f816d..3d638e1 100644
--- a/osmclient/v1/ns.py
+++ b/osmclient/v1/ns.py
@@ -122,7 +122,7 @@
             for network in ns_config['vim-network-name']:
                 # now find this network
                 vld_name = network['name']
-                vim_vld_name = network['vim-network-name']
+                # vim_vld_name = network['vim-network-name']
 
                 for index, vld in enumerate(nsr['nsd']['vld']):
                     if vld['name'] == vld_name:
diff --git a/tox.ini b/tox.ini
index 134636b..5c85c60 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist = py27,py3,flake8
+envlist = py27,py3,flake8,pyflakes
 toxworkdir={homedir}/.tox
 
 [testenv]
@@ -13,6 +13,12 @@
 commands =
     flake8 setup.py
 
+[testenv:pyflakes]
+basepython = python3
+deps = pyflakes
+commands =
+    pyflakes osmclient
+
 [testenv:build]
 basepython = python
 deps = stdeb
