diff --git a/tools/analyse_memuse_logs.py b/tools/analyse_memuse_logs.py
index e61c97b9bf85c71800822e69aa7671b3f6e489e5..4026c73d1e13a4484975fe3902e508493dc838cb 100755
--- a/tools/analyse_memuse_logs.py
+++ b/tools/analyse_memuse_logs.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 """
 Usage:
-    process_memuse.py memuse_report1.dat [memuse_report2.dat] ...
+    process_memuse.py [options] memuse_report1.dat [memuse_report2.dat] ...
 
 Parse the output of a run of SWIFT to convert the memuse output dumps into a
 timeseries of memory use. Also outputs use in memory per labelled type.
@@ -23,13 +23,24 @@ You should have received a copy of the GNU Lesser General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 """
 
-import sys
 from collections import OrderedDict
+import argparse
+import sys
 
 #  Command-line arguments.
-if len(sys.argv) < 2:
-    print "usage: ", sys.argv[0], " memuse_report1.dat [memuse_report2.dat] ..."
-    sys.exit(1)
+parser = argparse.ArgumentParser(description="Analyse memory usage reports")
+
+parser.add_argument("memuse_report", nargs='+',
+                    help="Memory usage reports (order by step if using more than one)")
+parser.add_argument(
+    "-b",
+    "--blacklist",
+    dest="blacklist",
+    help="substring of allocations to ignore (maybe be repeated)",
+    default=None,
+    action='append'
+)
+args = parser.parse_args()
 
 memuse = OrderedDict()
 labels = {}
@@ -37,9 +48,7 @@ totalmem = 0
 process_use = ""
 peak = 0.0
 
-blacklist = ["sort", "temp"]
-
-for filename in sys.argv[1:]:
+for filename in args.memuse_report:
     sys.stderr.write("## Processing: " + filename + "\n")
     with open(filename) as infile:
         print '# {:<18s} {:>30s} {:>9s} {:>9s} {:s}'.format("tic", "label", "allocated", "step", "MB")
@@ -51,13 +60,15 @@ for filename in sys.argv[1:]:
                 tic, adr, rank, step, allocated, label, size = line.split()
 
                 #  Skip blacklisted allocations, these can swamp the signal...
-                skip = False
-                for item in blacklist:
-                    if item in label:
-                        skip = True
-                        break
-                if skip:
-                    continue
+                if args.blacklist != None:
+                    skip = False
+                    for item in args.blacklist:
+                        if item in label:
+                            skip = True
+                            break
+                    if skip:
+                        continue
+
                 rank = int(rank)
                 step = int(step)
                 allocated = int(allocated)