diff --git a/README.md b/README.md
index 1791594..be8b0d2 100644
--- a/README.md
+++ b/README.md
@@ -126,7 +126,7 @@
 hostname = "127.0.0.1"
 myclient = client.Client(host=hostname, sol005=True)
 resp = myclient.nsd.list()
-print yaml.safe_dump(resp)
+print yaml.safe_dump(resp, indent=4, default_flow_style=False)
 ```
 
 ### Simple Python code to get the list of VNF packages from a specific user and project
@@ -151,7 +151,7 @@
    kwargs['project']=project
 myclient = client.Client(host=hostname, sol005=True, **kwargs)
 resp = myclient.vnfd.list()
-print yaml.safe_dump(resp)
+print yaml.safe_dump(resp, indent=4, default_flow_style=False)
 ```
 
 ## Enable autocompletion
diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py
index 57fb6b3..8dbf2b6 100755
--- a/osmclient/scripts/osm.py
+++ b/osmclient/scripts/osm.py
@@ -290,7 +290,7 @@
             if ee['elementType'] not in status_ee:
                 status_ee[ee['elementType']] = {}
                 status_ee[ee['elementType']][ee['status']] = 1
-                continue;
+                continue
             if ee['status'] in status_ee[ee['elementType']]:
                 status_ee[ee['elementType']][ee['status']] += 1
             else:
@@ -992,7 +992,7 @@
     #     exit(1)
 
     if literal:
-        print(yaml.safe_dump(resp))
+        print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
 
     table = PrettyTable(['field', 'value'])
@@ -1040,7 +1040,7 @@
     #     exit(1)
 
     if literal:
-        print(yaml.safe_dump(resp))
+        print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
 
     table = PrettyTable(['field', 'value'])
@@ -1056,7 +1056,7 @@
     resp = ctx.obj.osmrepo.pkg_get(pkgtype, name, repo, version, filter)
 
     if literal:
-        print(yaml.safe_dump(resp))
+        print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
     pkgtype += 'd'
     catalog = pkgtype + '-catalog'
@@ -1218,7 +1218,7 @@
     #     exit(1)
 
     if literal:
-        print(yaml.safe_dump(ns))
+        print(yaml.safe_dump(ns, indent=4, default_flow_style=False))
         return
 
     table = PrettyTable(['field', 'value'])
@@ -1307,7 +1307,7 @@
         print ("Could not determine KDU status")
 
     if literal:
-        print(yaml.safe_dump(resp))
+        print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
 
     table = PrettyTable(['field', 'value'])
@@ -1388,7 +1388,7 @@
     #     exit(1)
 
     if literal:
-        print(yaml.safe_dump(op_info))
+        print(yaml.safe_dump(op_info, indent=4, default_flow_style=False))
         return
 
     table = PrettyTable(['field', 'value'])
@@ -1410,7 +1410,7 @@
     #     exit(1)
 
     if literal:
-        print(yaml.safe_dump(resp))
+        print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
 
     table = PrettyTable(['field', 'value'])
@@ -1458,7 +1458,7 @@
     #     exit(1)
 
     if literal:
-        print(yaml.safe_dump(nsi))
+        print(yaml.safe_dump(nsi, indent=4, default_flow_style=False))
         return
 
     table = PrettyTable(['field', 'value'])
@@ -1564,7 +1564,7 @@
     #     exit(1)
 
     if literal:
-        print(yaml.safe_dump(pdu))
+        print(yaml.safe_dump(pdu, indent=4, default_flow_style=False))
         return
 
     table = PrettyTable(['field', 'value'])
@@ -3091,7 +3091,7 @@
     check_client_version(ctx.obj, ctx.command.name)
     resp = ctx.obj.k8scluster.list(filter)
     if literal:
-        print(yaml.safe_dump(resp))
+        print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
     table = PrettyTable(['Name', 'Id', 'Version', 'VIM', 'K8s-nets', 'Operational State', 'Description'])
     for cluster in resp:
@@ -3118,7 +3118,7 @@
     # try:
     resp = ctx.obj.k8scluster.get(name)
     if literal:
-        print(yaml.safe_dump(resp))
+        print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
     table = PrettyTable(['key', 'attribute'])
     for k, v in list(resp.items()):
@@ -3259,7 +3259,7 @@
     resp = ctx.obj.repo.list(filter)
     resp += ctx.obj.osmrepo.list(filter)
     if literal:
-        print(yaml.safe_dump(resp))
+        print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
     table = PrettyTable(['Name', 'Id', 'Type', 'URI', 'Description'])
     for repo in resp:
@@ -3290,7 +3290,7 @@
 
     if literal:
         if resp:
-            print(yaml.safe_dump(resp))
+            print(yaml.safe_dump(resp, indent=4, default_flow_style=False))
         return
     table = PrettyTable(['key', 'attribute'])
     if resp:
