diff --git a/bin/swift b/bin/swift
index 8cce1c38..b4440133 100755
--- a/bin/swift
+++ b/bin/swift
@@ -496,7 +496,7 @@ def st_download(parser, args, print_queue, error_queue):
 def prt_bytes(bytes, human_flag):
     """
     convert a number > 1024 to printable format, either in 4 char -h format as
-    with ls -lh or return as 12 char right justified string (up to 999GB)
+    with ls -lh or return as 12 char right justified string
     """
 
     if human_flag:
@@ -509,7 +509,7 @@ def prt_bytes(bytes, human_flag):
                 suffix = mods[0]
                 mods = mods[1:]
             if suffix != '':
-                if temp > 9:
+                if temp >= 10:
                     bytes = '%3d%s' % (temp, suffix)
                 else:
                     bytes = '%.1f%s' % (temp, suffix)
@@ -526,6 +526,7 @@ list [options] [container]
     Lists the containers for the account or the objects for a container. -p or
     --prefix is an option that will only list items beginning with that prefix.
     -l produces output formatted like 'ls -l' and --lh like 'ls -lh'.
+    -t used with -l or --lh, only report totals
     -d or --delimiter is option (for container listings only) that will roll up
     items with the given delimiter (see http://docs.openstack.org/
         api/openstack-object-storage/1.0/content/list-objects.html)
@@ -540,6 +541,9 @@ def st_list(parser, args, print_queue, error_queue):
         '--lh', dest='human', help='report sizes as human '
         "similar to ls -lh switch, but -h taken", action='store_true',
         default=False)
+    parser.add_option(
+        '-t', dest='totals', help='used with -l or --ls, only report totals',
+        action='store_true', default=False)
     parser.add_option(
         '-p', '--prefix', dest='prefix',
         help='Will only list items beginning with the prefix')
@@ -559,6 +563,7 @@ def st_list(parser, args, print_queue, error_queue):
     conn = get_conn(options)
     try:
         marker = ''
+        total_count = total_bytes = 0
         while True:
             if not args:
                 items = \
@@ -575,31 +580,47 @@ def st_list(parser, args, print_queue, error_queue):
                 if not options.long and not options.human:
                     print_queue.put(item.get('name', item.get('subdir')))
                 else:
+                    item_bytes = item.get('bytes')
+                    total_bytes += item_bytes
                     if len(args) == 0:    # listing containers
-                        bytes = prt_bytes(item.get('bytes'), options.human)
+                        bytes = prt_bytes(item_bytes, options.human)
                         count = item.get('count')
+                        total_count += count
                         try:
                             meta = conn.head_container(item_name)
                             utc = gmtime(float(meta.get('x-timestamp')))
                             datestamp = strftime('%Y-%m-%d %H:%M:%S', utc)
                         except ClientException:
                             datestamp = '????-??-?? ??:??:??'
-                        print_queue.put("%5s %s %s %s" %
-                                        (count, bytes, datestamp, item_name))
+                        if not options.totals:
+                            print_queue.put("%5s %s %s %s" %
+                                            (count, bytes, datestamp,
+                                             item_name))
                     else:    # list container contents
                         subdir = item.get('subdir')
                         if subdir is None:
-                            bytes = prt_bytes(item.get('bytes'), options.human)
+                            bytes = prt_bytes(item_bytes, options.human)
                             date, xtime = item.get('last_modified').split('T')
                             xtime = xtime.split('.')[0]
                         else:
                             bytes = prt_bytes(0, options.human)
                             date = xtime = ''
                             item_name = subdir
-                        print_queue.put("%s %10s %8s %s" %
-                                        (bytes, date, xtime, item_name))
+                        if not options.totals:
+                            print_queue.put("%s %10s %8s %s" %
+                                            (bytes, date, xtime, item_name))
+
+                marker = items[-1].get('name', items[-1].get('subdir'))
+
+        # report totals
+        if options.long or options.human:
+            if len(args) == 0:
+                print_queue.put("%5s %s" % (prt_bytes(total_count, True),
+                                            prt_bytes(total_bytes,
+                                                      options.human)))
+            else:
+                print_queue.put("%s" % (prt_bytes(total_bytes, options.human)))
 
-            marker = items[-1].get('name', items[-1].get('subdir'))
     except ClientException as err:
         if err.http_status != 404:
             raise
@@ -611,10 +632,14 @@ def st_list(parser, args, print_queue, error_queue):
 st_stat_help = '''
 stat [container] [object]
     Displays information for the account, container, or object depending on the
-    args given (if any).'''.strip('\n')
+    args given (if any). --lh will print number of objects and total sizes
+    like 'list --lh' noting number of objs a multiple of 1024'''.strip('\n')
 
 
 def st_stat(parser, args, print_queue, error_queue):
+    parser.add_option(
+        '--lh', dest='human', help="report totals like 'list --lh'",
+        action='store_true', default=False)
     (options, args) = parse_args(parser, args)
     args = args[1:]
     conn = get_conn(options)
@@ -627,13 +652,15 @@ StorageURL: %s
 Auth Token: %s
 '''.strip('\n') % (conn.url, conn.token))
             container_count = int(headers.get('x-account-container-count', 0))
-            object_count = int(headers.get('x-account-object-count', 0))
-            bytes_used = int(headers.get('x-account-bytes-used', 0))
+            object_count = prt_bytes(headers.get('x-account-object-count', 0),
+                                     options.human).lstrip()
+            bytes_used = prt_bytes(headers.get('x-account-bytes-used', 0),
+                                   options.human).lstrip()
             print_queue.put('''
    Account: %s
 Containers: %d
-   Objects: %d
-     Bytes: %d'''.strip('\n') % (conn.url.rsplit('/', 1)[-1], container_count,
+   Objects: %s
+     Bytes: %s'''.strip('\n') % (conn.url.rsplit('/', 1)[-1], container_count,
                                  object_count, bytes_used))
             for key, value in headers.items():
                 if key.startswith('x-account-meta-'):
@@ -657,13 +684,16 @@ Containers: %d
                              (args[0].replace('/', ' ', 1), args[0])
         try:
             headers = conn.head_container(args[0])
-            object_count = int(headers.get('x-container-object-count', 0))
-            bytes_used = int(headers.get('x-container-bytes-used', 0))
+            object_count = prt_bytes(
+                headers.get('x-container-object-count', 0),
+                options.human).lstrip()
+            bytes_used = prt_bytes(headers.get('x-container-bytes-used', 0),
+                                   options.human).lstrip()
             print_queue.put('''
   Account: %s
 Container: %s
-  Objects: %d
-    Bytes: %d
+  Objects: %s
+    Bytes: %s
  Read ACL: %s
 Write ACL: %s
   Sync To: %s
@@ -701,7 +731,8 @@ Write ACL: %s
                                      args[1], headers.get('content-type')))
             if 'content-length' in headers:
                 print_queue.put('Content Length: %s' %
-                                headers['content-length'])
+                                prt_bytes(headers['content-length'],
+                                          options.human).lstrip())
             if 'last-modified' in headers:
                 print_queue.put(' Last Modified: %s' %
                                 headers['last-modified'])