diff --git a/Dockerfile b/Dockerfile
index b7a8a91..e40b8bc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,19 @@
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+#
 FROM ubuntu:16.04
 
 RUN apt-get update && apt-get -y install git make python python3 \
     libcurl4-gnutls-dev libgnutls-dev tox python-dev python3-dev \
-    debhelper python-setuptools python-all apt-utils
+    debhelper python-setuptools python3-setuptools python-all python3-all \
+    apt-utils
diff --git a/devops-stages/stage-build.sh b/devops-stages/stage-build.sh
index bf7602b..dd4af61 100755
--- a/devops-stages/stage-build.sh
+++ b/devops-stages/stage-build.sh
@@ -1,3 +1,17 @@
 #!/bin/sh
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 rm -rf deb_dist
-tox -e build
+tox -e build,build3
diff --git a/osmclient/common/wait.py b/osmclient/common/wait.py
index 620e7f5..a85808c 100644
--- a/osmclient/common/wait.py
+++ b/osmclient/common/wait.py
@@ -134,9 +134,9 @@
             resp = ''
             if resp_unicode:
                 resp = json.loads(resp_unicode)
-            # print 'HTTP CODE: {}'.format(http_code)
-            # print 'RESP: {}'.format(resp)
-            # print 'URL: {}/{}'.format(apiUrlStatus, entity_id)
+            # print('HTTP CODE: {}'.format(http_code))
+            # print('RESP: {}'.format(resp))
+            # print('URL: {}/{}'.format(apiUrlStatus, entity_id))
             if deleteFlag and http_code == 404:
                 # In case of deletion, '404 Not Found' means successfully deleted
                 # Display 'detailed-status: Deleted' and return
@@ -173,8 +173,8 @@
                         else:
                             time_to_return = True
             new_detailed_status = _get_detailed_status(resp, entity_label, detailed_status_deleted)
-            # print 'DETAILED-STATUS: {}'.format(new_detailed_status)
-            # print 'DELETE-ATTEMPTS-LEFT: {}'.format(delete_attempts_left)
+            # print('DETAILED-STATUS: {}'.format(new_detailed_status))
+            # print('DELETE-ATTEMPTS-LEFT: {}'.format(delete_attempts_left))
             if not new_detailed_status:
                 new_detailed_status = 'In progress'
             # TODO: Change LCM to provide detailed-status more up to date
diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py
index 27ac086..fe140dd 100755
--- a/osmclient/scripts/osm.py
+++ b/osmclient/scripts/osm.py
@@ -219,7 +219,7 @@
         resp = ctx.obj.nsd.list(filter)
     else:
         resp = ctx.obj.nsd.list()
-    # print yaml.safe_dump(resp)
+    # print(yaml.safe_dump(resp))
     table = PrettyTable(['nsd name', 'id'])
     fullclassname = ctx.obj.__module__ + "." + ctx.obj.__class__.__name__
     if fullclassname == 'osmclient.sol005.client.Client':
@@ -273,7 +273,7 @@
         resp = ctx.obj.vnfd.list(filter)
     else:
         resp = ctx.obj.vnfd.list()
-    # print yaml.safe_dump(resp)
+    # print(yaml.safe_dump(resp))
     table = PrettyTable(['nfpkg name', 'id'])
     fullclassname = ctx.obj.__module__ + "." + ctx.obj.__class__.__name__
     if fullclassname == 'osmclient.sol005.client.Client':
@@ -520,7 +520,7 @@
     except ClientException as inst:
         print((inst.message))
         exit(1)
-    # print yaml.safe_dump(resp)
+    # print(yaml.safe_dump(resp))
     table = PrettyTable(['nst name', 'id'])
     for nst in resp:
         name = nst['name'] if 'name' in nst else '-'
diff --git a/osmclient/sol005/http.py b/osmclient/sol005/http.py
index 867db2d..f19a098 100644
--- a/osmclient/sol005/http.py
+++ b/osmclient/sol005/http.py
@@ -29,7 +29,7 @@
 
     def _get_curl_cmd(self, endpoint):
         curl_cmd = pycurl.Curl()
-        #print self._url + endpoint
+        #print(self._url + endpoint)
         curl_cmd.setopt(pycurl.URL, self._url + endpoint)
         curl_cmd.setopt(pycurl.SSL_VERIFYPEER, 0)
         curl_cmd.setopt(pycurl.SSL_VERIFYHOST, 0)
@@ -44,7 +44,7 @@
         curl_cmd.setopt(pycurl.WRITEFUNCTION, data.write)
         curl_cmd.perform()
         http_code = curl_cmd.getinfo(pycurl.HTTP_CODE)
-        #print 'HTTP_CODE: {}'.format(http_code)
+        #print('HTTP_CODE: {}'.format(http_code))
         curl_cmd.close()
         # TODO 202 accepted should be returned somehow
         if data.getvalue():
diff --git a/osmclient/sol005/ns.py b/osmclient/sol005/ns.py
index 1c45f01..a75513b 100644
--- a/osmclient/sol005/ns.py
+++ b/osmclient/sol005/ns.py
@@ -83,7 +83,7 @@
                     break
         resp = self._http.get_cmd('{}/{}'.format(self._apiBase, ns_id))
         #resp = self._http.get_cmd('{}/{}/nsd_content'.format(self._apiBase, ns_id))
-        #print yaml.safe_dump(resp)
+        #print(yaml.safe_dump(resp))
         if resp:
             return resp
         raise NotFound("ns {} not found".format(name))
@@ -95,8 +95,8 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                                  ns['_id'], querystring))
-        # print 'HTTP CODE: {}'.format(http_code)
-        # print 'RESP: {}'.format(resp)
+        # print('HTTP CODE: {}'.format(http_code))
+        # print('RESP: {}'.format(resp))
         if http_code == 202:
             if wait and resp:
                 resp = json.loads(resp)
@@ -203,7 +203,7 @@
                 if wim_account is not None:
                     ns['wimAccountId'] = get_wim_account_id(wim_account)
 
-        # print yaml.safe_dump(ns)
+        # print(yaml.safe_dump(ns))
         try:
             self._apiResource = '/ns_instances_content'
             self._apiBase = '{}{}{}'.format(self._apiName,
@@ -215,8 +215,8 @@
             self._http.set_http_header(http_header)
             http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=ns)
-            # print 'HTTP CODE: {}'.format(http_code)
-            # print 'RESP: {}'.format(resp)
+            # print('HTTP CODE: {}'.format(http_code))
+            # print('RESP: {}'.format(resp))
             if http_code in (200, 201, 202, 204):
                 if resp:
                     resp = json.loads(resp)
@@ -256,8 +256,8 @@
             http_code, resp = self._http.get2_cmd('{}?nsInstanceId={}'.format(
                                                        self._apiBase, ns['_id'],
                                                        filter_string) )
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code == 200:
                 if resp:
                     resp = json.loads(resp)
@@ -287,8 +287,8 @@
             self._apiBase = '{}{}{}'.format(self._apiName,
                                       self._apiVersion, self._apiResource)
             http_code, resp = self._http.get2_cmd('{}/{}'.format(self._apiBase, operationId))
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code == 200:
                 if resp:
                     resp = json.loads(resp)
@@ -319,11 +319,11 @@
             self._apiBase = '{}{}{}'.format(self._apiName,
                                             self._apiVersion, self._apiResource)
             endpoint = '{}/{}/{}'.format(self._apiBase, ns['_id'], op_name)
-            #print 'OP_NAME: {}'.format(op_name)
-            #print 'OP_DATA: {}'.format(json.dumps(op_data))
+            #print('OP_NAME: {}'.format(op_name))
+            #print('OP_DATA: {}'.format(json.dumps(op_data)))
             http_code, resp = self._http.post_cmd(endpoint=endpoint, postfields_dict=op_data)
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code in (200, 201, 202, 204):
                 if resp:
                     resp = json.loads(resp)
@@ -377,8 +377,8 @@
         try:
             http_code, resp = self._http.post_cmd(endpoint='/test/message/alarm_request',
                                        postfields_dict=data)
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code in (200, 201, 202, 204):
                 #resp = json.loads(resp)
                 print('Alarm created')
@@ -405,8 +405,8 @@
         try:
             http_code, resp = self._http.post_cmd(endpoint='/test/message/alarm_request',
                                        postfields_dict=data)
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code in (200, 201, 202, 204):
                 #resp = json.loads(resp)
                 print('Alarm deleted')
@@ -431,8 +431,8 @@
         try:
             http_code, resp = self._http.post_cmd(endpoint='/test/message/metric_request',
                                        postfields_dict=data)
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code in (200, 201, 202, 204):
                 #resp = json.loads(resp)
                 return 'Metric exported'
diff --git a/osmclient/sol005/nsd.py b/osmclient/sol005/nsd.py
index 873be5b..bbfed17 100644
--- a/osmclient/sol005/nsd.py
+++ b/osmclient/sol005/nsd.py
@@ -44,7 +44,7 @@
         if filter:
             filter_string = '?{}'.format(filter)
         resp = self._http.get_cmd('{}{}'.format(self._apiBase, filter_string))
-        #print yaml.safe_dump(resp)
+        #print(yaml.safe_dump(resp))
         if resp:
             return resp
         return list()
@@ -65,7 +65,7 @@
         # It is redundant, since the previous one already gets the whole nsdinfo
         # The only difference is that a different primitive is exercised
         resp = self._http.get_cmd('{}/{}'.format(self._apiBase, nsd['_id']))
-        #print yaml.safe_dump(resp)
+        #print(yaml.safe_dump(resp))
         if resp:
             return resp
         raise NotFound("nsd {} not found".format(name))
@@ -75,8 +75,8 @@
         headers = self._client._headers
         headers['Accept'] = 'application/binary'
         http_code, resp = self._http.get2_cmd('{}/{}/{}'.format(self._apiBase, nsd['_id'], thing))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 #store in a file
@@ -106,8 +106,8 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                          nsd['_id'], querystring))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code == 202:
             print('Deletion in progress')
         elif http_code == 204:
@@ -157,8 +157,8 @@
                                             self._apiVersion, self._apiResource)
             endpoint = '{}{}'.format(self._apiBase,ow_string)
             http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 resp = json.loads(resp)
diff --git a/osmclient/sol005/nsi.py b/osmclient/sol005/nsi.py
index 33c0b92..ab6cf0a 100644
--- a/osmclient/sol005/nsi.py
+++ b/osmclient/sol005/nsi.py
@@ -83,7 +83,7 @@
                     break
         resp = self._http.get_cmd('{}/{}'.format(self._apiBase, nsi_id))
         #resp = self._http.get_cmd('{}/{}/nsd_content'.format(self._apiBase, nsi_id))
-        #print yaml.safe_dump(resp)
+        #print(yaml.safe_dump(resp))
         if resp:
             return resp
         raise NotFound("nsi {} not found".format(name))
@@ -95,8 +95,8 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                          nsi['_id'], querystring))
-        # print 'HTTP CODE: {}'.format(http_code)
-        # print 'RESP: {}'.format(resp)
+        # print('HTTP CODE: {}'.format(http_code))
+        # print('RESP: {}'.format(resp))
         if http_code == 202:
             if wait and resp:
                 resp = json.loads(resp)
@@ -199,7 +199,7 @@
                         raise ValueError("Error at --config 'additionalParamsForSubnet' items must contain "
                                          "'additionalParamsForNs' and/or 'additionalParamsForVnf'")
 
-        # print yaml.safe_dump(nsi)
+        # print(yaml.safe_dump(nsi))
         try:
             self._apiResource = '/netslice_instances_content'
             self._apiBase = '{}{}{}'.format(self._apiName,
@@ -211,8 +211,8 @@
             self._http.set_http_header(http_header)
             http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=nsi)
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code in (200, 201, 202, 204):
                 if resp:
                     resp = json.loads(resp)
@@ -252,8 +252,8 @@
             http_code, resp = self._http.get2_cmd('{}?netsliceInstanceId={}'.format(
                                                        self._apiBase, nsi['_id'],
                                                        filter_string) )
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code == 200:
                 if resp:
                     resp = json.loads(resp)
@@ -283,8 +283,8 @@
             self._apiBase = '{}{}{}'.format(self._apiName,
                                       self._apiVersion, self._apiResource)
             http_code, resp = self._http.get2_cmd('{}/{}'.format(self._apiBase, operationId))
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code == 200:
                 if resp:
                     resp = json.loads(resp)
@@ -315,11 +315,11 @@
             self._apiBase = '{}{}{}'.format(self._apiName,
                                             self._apiVersion, self._apiResource)
             endpoint = '{}/{}/{}'.format(self._apiBase, nsi['_id'], op_name)
-            #print 'OP_NAME: {}'.format(op_name)
-            #print 'OP_DATA: {}'.format(json.dumps(op_data))
+            #print('OP_NAME: {}'.format(op_name))
+            #print('OP_DATA: {}'.format(json.dumps(op_data)))
             http_code, resp = self._http.post_cmd(endpoint=endpoint, postfields_dict=op_data)
-            #print 'HTTP CODE: {}'.format(http_code)
-            #print 'RESP: {}'.format(resp)
+            #print('HTTP CODE: {}'.format(http_code))
+            #print('RESP: {}'.format(resp))
             if http_code in (200, 201, 202, 204):
                 if resp:
                     resp = json.loads(resp)
diff --git a/osmclient/sol005/nst.py b/osmclient/sol005/nst.py
index ca62235..bd453bf 100644
--- a/osmclient/sol005/nst.py
+++ b/osmclient/sol005/nst.py
@@ -42,7 +42,7 @@
         if filter:
             filter_string = '?{}'.format(filter)
         resp = self._http.get_cmd('{}{}'.format(self._apiBase, filter_string))
-        #print yaml.safe_dump(resp)
+        #print(yaml.safe_dump(resp))
         if resp:
             return resp
         return list()
@@ -63,7 +63,7 @@
         # It is redundant, since the previous one already gets the whole nstinfo
         # The only difference is that a different primitive is exercised
         resp = self._http.get_cmd('{}/{}'.format(self._apiBase, nst['_id']))
-        #print yaml.safe_dump(resp)
+        #print(yaml.safe_dump(resp))
         if resp:
             return resp
         raise NotFound("nst {} not found".format(name))
@@ -73,8 +73,8 @@
         headers = self._client._headers
         headers['Accept'] = 'application/binary'
         http_code, resp = self._http.get2_cmd('{}/{}/{}'.format(self._apiBase, nst['_id'], thing))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 #store in a file
@@ -104,8 +104,8 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                          nst['_id'], querystring))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code == 202:
             print('Deletion in progress')
         elif http_code == 204:
@@ -154,8 +154,8 @@
                                             self._apiVersion, self._apiResource)
             endpoint = '{}{}'.format(self._apiBase,ow_string)
             http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 resp = json.loads(resp)
diff --git a/osmclient/sol005/package.py b/osmclient/sol005/package.py
index 12412e4..330df3c 100644
--- a/osmclient/sol005/package.py
+++ b/osmclient/sol005/package.py
@@ -76,7 +76,7 @@
         else:
             endpoint = '/vnfpkgm/v1/vnf_packages_content'
         #endpoint = '/nsds' if pkg_type['type'] == 'nsd' else '/vnfds'
-        #print 'Endpoint: {}'.format(endpoint)
+        #print('Endpoint: {}'.format(endpoint))
         headers = self._client._headers
         headers['Content-Type'] = 'application/gzip'
         #headers['Content-Type'] = 'application/binary'
@@ -89,8 +89,8 @@
                       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)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 resp = json.loads(resp)
diff --git a/osmclient/sol005/pdud.py b/osmclient/sol005/pdud.py
index e8ba9c4..a3995d6 100644
--- a/osmclient/sol005/pdud.py
+++ b/osmclient/sol005/pdud.py
@@ -60,7 +60,7 @@
         # It is redundant, since the previous one already gets the whole pdudInfo
         # The only difference is that a different primitive is exercised
         resp = self._http.get_cmd('{}/{}'.format(self._apiBase, pdud['_id']))
-        #print yaml.safe_dump(resp)
+        #print(yaml.safe_dump(resp))
         if resp:
             return resp
         raise NotFound("pdu {} not found".format(name))
@@ -72,8 +72,8 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                          pdud['_id'], querystring))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code == 202:
             print('Deletion in progress')
         elif http_code == 204:
@@ -99,8 +99,8 @@
             endpoint = self._apiBase
             #endpoint = '{}{}'.format(self._apiBase,ow_string)
             http_code, resp = self._http.post_cmd(endpoint=endpoint, postfields_dict=pdu)
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 resp = json.loads(resp)
diff --git a/osmclient/sol005/sdncontroller.py b/osmclient/sol005/sdncontroller.py
index 6f63a9a..4036dfb 100644
--- a/osmclient/sol005/sdncontroller.py
+++ b/osmclient/sol005/sdncontroller.py
@@ -61,8 +61,8 @@
     def create(self, name, sdn_controller, wait=False):
         http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=sdn_controller)
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 resp = json.loads(resp)
@@ -87,8 +87,8 @@
         sdnc_id_for_wait = self._get_id_for_wait(name)
         http_code, resp = self._http.put_cmd(endpoint='{}/{}'.format(self._apiBase,sdnc['_id']),
                                        postfields_dict=sdn_controller)
-        # print 'HTTP CODE: {}'.format(http_code)
-        # print 'RESP: {}'.format(resp)
+        # print('HTTP CODE: {}'.format(http_code))
+        # print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if wait:
                 # In this case, 'resp' always returns None, so 'resp['id']' cannot be used.
@@ -115,8 +115,8 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                          sdn_controller['_id'], querystring))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code == 202:
             if wait:
                 # Wait for status for SDNC instance deletion
@@ -143,7 +143,7 @@
         if filter:
             filter_string = '?{}'.format(filter)
         resp = self._http.get_cmd('{}{}'.format(self._apiBase,filter_string))
-        #print 'RESP: {}'.format(resp)
+        #print('RESP: {}'.format(resp))
         if resp:
             return resp
         return list()
diff --git a/osmclient/sol005/vim.py b/osmclient/sol005/vim.py
index 3012ae2..ad6f9b7 100644
--- a/osmclient/sol005/vim.py
+++ b/osmclient/sol005/vim.py
@@ -82,8 +82,8 @@
 
         http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=vim_account)
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 resp = json.loads(resp)
@@ -124,8 +124,8 @@
         #vim_account['config'] = json.dumps(vim_config)
         http_code, resp = self._http.put_cmd(endpoint='{}/{}'.format(self._apiBase,vim['_id']),
                                        postfields_dict=vim_account)
-        # print 'HTTP CODE: {}'.format(http_code)
-        # print 'RESP: {}'.format(resp)
+        # print('HTTP CODE: {}'.format(http_code))
+        # print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if wait:
                 # In this case, 'resp' always returns None, so 'resp['id']' cannot be used.
@@ -170,8 +170,8 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                          vim_id, querystring))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code == 202:
             if wait:
                 # When deleting an account, 'resp' may be None.
diff --git a/osmclient/sol005/vnf.py b/osmclient/sol005/vnf.py
index 9875d39..6da13f5 100644
--- a/osmclient/sol005/vnf.py
+++ b/osmclient/sol005/vnf.py
@@ -46,7 +46,7 @@
             else:
                 filter_string = '?nsr-id-ref={}'.format(ns_instance['_id'])
         resp = self._http.get_cmd('{}{}'.format(self._apiBase,filter_string))
-        #print 'RESP: {}'.format(resp)
+        #print('RESP: {}'.format(resp))
         if resp:
             return resp
         return list()
@@ -72,7 +72,7 @@
                     vnf_id = vnf['_id']
                     break
         resp = self._http.get_cmd('{}/{}'.format(self._apiBase, vnf_id))
-        #print 'RESP: {}'.format(resp)
+        #print('RESP: {}'.format(resp))
         if resp:
             return resp
         raise NotFound("vnf {} not found".format(name))
diff --git a/osmclient/sol005/vnfd.py b/osmclient/sol005/vnfd.py
index 965b999..8ad11c6 100644
--- a/osmclient/sol005/vnfd.py
+++ b/osmclient/sol005/vnfd.py
@@ -64,7 +64,7 @@
         # It is redundant, since the previous one already gets the whole vnfpkginfo
         # The only difference is that a different primitive is exercised
         resp = self._http.get_cmd('{}/{}'.format(self._apiBase, vnfd['_id']))
-        #print yaml.safe_dump(resp)
+        #print(yaml.safe_dump(resp))
         if resp:
             return resp
         raise NotFound("vnfd {} not found".format(name))
@@ -74,8 +74,8 @@
         headers = self._client._headers
         headers['Accept'] = 'application/binary'
         http_code, resp = self._http.get2_cmd('{}/{}/{}'.format(self._apiBase, vnfd['_id'], thing))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 #store in a file
@@ -105,8 +105,8 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                          vnfd['_id'], querystring))
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code == 202:
             print('Deletion in progress')
         elif http_code == 204:
@@ -156,8 +156,8 @@
                                             self._apiVersion, self._apiResource)
             endpoint = '{}{}'.format(self._apiBase,ow_string)
             http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202):
             if resp:
                 resp = json.loads(resp)
diff --git a/osmclient/sol005/wim.py b/osmclient/sol005/wim.py
index bf10e5f..30b36e7 100644
--- a/osmclient/sol005/wim.py
+++ b/osmclient/sol005/wim.py
@@ -77,8 +77,8 @@
 
         http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=wim_account)
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if resp:
                 resp = json.loads(resp)
@@ -116,8 +116,8 @@
         #wim_account['config'] = json.dumps(wim_config)
         http_code, resp = self._http.put_cmd(endpoint='{}/{}'.format(self._apiBase,wim['_id']),
                                        postfields_dict=wim_account)
-        #print 'HTTP CODE: {}'.format(http_code)
-        #print 'RESP: {}'.format(resp)
+        #print('HTTP CODE: {}'.format(http_code))
+        #print('RESP: {}'.format(resp))
         if http_code in (200, 201, 202, 204):
             if wait:
                 # In this case, 'resp' always returns None, so 'resp['id']' cannot be used.
@@ -137,7 +137,7 @@
             raise ClientException("failed to update wim {} - {}".format(wim_name, msg))
 
     def update_wim_account_dict(self, wim_account, wim_input):
-        print (wim_input)
+        print(wim_input)
         wim_account['wim_type'] = wim_input['wim_type']
         wim_account['description'] = wim_input['description']
         wim_account['wim_url'] = wim_input['url']
@@ -163,9 +163,9 @@
             querystring = '?FORCE=True'
         http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
                                          wim_id, querystring))
-        # print 'HTTP CODE: {}'.format(http_code)
-        # print 'RESP: {}'.format(resp)
-        # print 'WIM_ID: {}'.format(wim_id)
+        # print('HTTP CODE: {}'.format(http_code))
+        # print('RESP: {}'.format(resp))
+        # print('WIM_ID: {}'.format(wim_id))
         if http_code == 202:
             if wait:
                 # 'resp' may be None.
diff --git a/setup.py b/setup.py
index 832e2fe..32a91a2 100644
--- a/setup.py
+++ b/setup.py
@@ -1,3 +1,16 @@
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+#
 from setuptools import setup, find_packages
 
 setup(
@@ -13,8 +26,9 @@
     ],
     setup_requires=['setuptools-version-command'],
     test_suite='nose.collector',
-    entry_points='''
-        [console_scripts]
-        osm=osmclient.scripts.osm:cli
-        ''',
+    entry_points={
+        'console_scripts': [
+            'osm = osmclient.scripts.osm:cli',
+        ],
+    },
 )
diff --git a/stdeb.cfg b/stdeb.cfg
index b385524..be9860f 100644
--- a/stdeb.cfg
+++ b/stdeb.cfg
@@ -1,3 +1,17 @@
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+#
 [DEFAULT]
+Suite: xenial
 Build-Depends: dh-python
 Depends: python-setuptools, python-pycurl, python-click, python-prettytable, python-yaml
diff --git a/tox.ini b/tox.ini
index 5c85c60..f6ec0c7 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,11 +1,25 @@
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+#
 [tox]
-envlist = py27,py3,flake8,pyflakes
+envlist = py27,py35,flake8,pyflakes
 toxworkdir={homedir}/.tox
 
 [testenv]
-deps=nose
-     mock
-commands=nosetests
+deps = nose
+       mock
+commands =
+    nosetests
 
 [testenv:flake8]
 basepython = python
@@ -24,3 +38,10 @@
 deps = stdeb
        setuptools-version-command
 commands = python setup.py --command-packages=stdeb.command bdist_deb
+
+[testenv:build3]
+basepython = python3
+deps = stdeb
+       setuptools-version-command
+commands = python3 setup.py --command-packages=stdeb.command bdist_deb
+
