diff --git a/osmclient/common/package_tool.py b/osmclient/common/package_tool.py
index c2e1995..19b1386 100644
--- a/osmclient/common/package_tool.py
+++ b/osmclient/common/package_tool.py
@@ -370,22 +370,24 @@
             with tarfile.open("{}.tar.gz".format(package_name), mode='w:gz') as archive:
                 print("Adding File: {}".format(package_name))
                 archive.add('{}'.format(package_name), recursive=True)
-            #return "Created {}.tar.gz".format(package_folder)
-            #self.build("{}".format(os.path.basename(package_folder)))
+            # return "Created {}.tar.gz".format(package_folder)
+            # self.build("{}".format(os.path.basename(package_folder)))
             os.chdir(cwd)
+            cwd = None
+            created_package = "{}/{}.tar.gz".format(os.path.dirname(package_folder) or '.', package_name)
+            os.rename("{}/{}.tar.gz".format(directory_name, package_name),
+                      created_package)
+            os.rename("{}/{}/checksums.txt".format(directory_name, package_name),
+                      "{}/checksums.txt".format(package_folder))
+            print("Package created: {}".format(created_package))
+            return created_package
         except Exception as exc:
+            raise ClientException('failure during build of targz file (create temp dir, calculate checksum, '
+                                  'tar.gz file): {}'.format(exc))
+        finally:
             if cwd:
                 os.chdir(cwd)
             shutil.rmtree(os.path.join(package_folder, "tmp"))
-            raise ClientException('failure during build of targz file (create temp dir, calculate checksum, tar.gz file): {}'.format(exc))
-        created_package = "{}/{}.tar.gz".format(package_folder, package_name)
-        os.rename("{}/{}.tar.gz".format(directory_name, package_name),
-                  created_package)
-        os.rename("{}/{}/checksums.txt".format(directory_name, package_name),
-                  "{}/checksums.txt".format(package_folder))
-        shutil.rmtree(os.path.join(package_folder, "tmp"))
-        print("Package created: {}".format(created_package))
-        return created_package
 
     def create_temp_dir(self, package_folder, charm_list=None):
         """
diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py
index 402a09b..57fb6b3 100755
--- a/osmclient/scripts/osm.py
+++ b/osmclient/scripts/osm.py
@@ -3097,7 +3097,7 @@
     for cluster in resp:
         table.add_row([cluster['name'], cluster['_id'], cluster['k8s_version'], cluster['vim_account'],
                        json.dumps(cluster['nets']), cluster["_admin"]["operationalState"],
-                       trunc_text(cluster.get('description',''),40)])
+                       trunc_text(cluster.get('description') or '', 40)])
     table.align = 'l'
     print(table)
     # except ClientException as e:
@@ -3264,7 +3264,7 @@
     table = PrettyTable(['Name', 'Id', 'Type', 'URI', 'Description'])
     for repo in resp:
         #cluster['k8s-nets'] = json.dumps(yaml.safe_load(cluster['k8s-nets']))
-        table.add_row([repo['name'], repo['_id'], repo['type'], repo['url'], trunc_text(repo.get('description',''),40)])
+        table.add_row([repo['name'], repo['_id'], repo['type'], repo['url'], trunc_text(repo.get('description') or '',40)])
     table.align = 'l'
     print(table)
 
@@ -3317,18 +3317,25 @@
 @click.option('--domain-name', 'domain_name',
               default=None,
               help='assign to a domain')
+@click.option('--quotas', 'quotas', multiple=True, default=None,
+              help="provide quotas. Can be used several times: 'quota1=number[,quota2=number,...]'. Quotas can be one "
+                   "of vnfds, nsds, nsts, pdus, nsrs, nsis, vim_accounts, wim_accounts, sdns, k8sclusters, k8srepos")
 @click.pass_context
-def project_create(ctx, name, domain_name):
+def project_create(ctx, name, domain_name, quotas):
     """Creates a new project
 
     NAME: name of the project
     DOMAIN_NAME: optional domain name for the project when keystone authentication is used
+    QUOTAS: set quotas for the project
     """
     logger.debug("")
-    project = {}
-    project['name'] = name
+    project = {'name': name}
     if domain_name:
         project['domain_name'] = domain_name
+    quotas_dict = _process_project_quotas(quotas)
+    if quotas_dict:
+        project['quotas'] = quotas_dict
+
     # try:
     check_client_version(ctx.obj, ctx.command.name)
     ctx.obj.project.create(name, project)
@@ -3337,6 +3344,20 @@
     #     exit(1)
 
 
+def _process_project_quotas(quota_list):
+    quotas_dict = {}
+    if not quota_list:
+        return quotas_dict
+    try:
+        for quota in quota_list:
+            for single_quota in quota.split(","):
+                k, v = single_quota.split("=")
+                quotas_dict[k] = None if v in ('None', 'null', '') else int(v)
+    except (ValueError, TypeError):
+        raise ClientException("invalid format for 'quotas'. Use 'k1=v1,v1=v2'. v must be a integer or null")
+    return quotas_dict
+
+
 @cli_osm.command(name='project-delete', short_help='deletes a project')
 @click.argument('name')
 #@click.option('--force', is_flag=True, help='forces the deletion bypassing pre-conditions')
@@ -3400,23 +3421,29 @@
 
 @cli_osm.command(name='project-update', short_help='updates a project (only the name can be updated)')
 @click.argument('project')
-@click.option('--name',
-              prompt=True,
+@click.option('--name', default=None,
               help='new name for the project')
-
+@click.option('--quotas', 'quotas', multiple=True, default=None,
+              help="change quotas. Can be used several times: 'quota1=number|empty[,quota2=...]' "
+                   "(use empty to reset quota to default")
 @click.pass_context
-def project_update(ctx, project, name):
+def project_update(ctx, project, name, quotas):
     """
     Update a project name
 
     :param ctx:
     :param project: id or name of the project to modify
     :param name:  new name for the project
+    :param quotas:  change quotas of the project
     :return:
     """
     logger.debug("")
     project_changes = {}
-    project_changes['name'] = name
+    if name:
+        project_changes['name'] = name
+    quotas_dict = _process_project_quotas(quotas)
+    if quotas_dict:
+        project_changes['quotas'] = quotas_dict
 
     # try:
     check_client_version(ctx.obj, ctx.command.name)
