diff --git a/swiftmpistepsim.c b/swiftmpistepsim.c
index 394dea04b506074c75fa76e037bb283e12b8dc59..7a8091fd909f0a0512900611766f77ceb09ae454 100644
--- a/swiftmpistepsim.c
+++ b/swiftmpistepsim.c
@@ -38,6 +38,9 @@ static int verbose = 0;
 /* Attempt to keep original injection time differences. */
 static int usetics = 1;
 
+/* Scale to apply to the size of the messages we send. */
+static float messagescale = 1.0;
+
 /* Integer types of send and recv tasks, must match log. */
 static const int task_type_send = 22;
 static const int task_type_recv = 23;
@@ -336,6 +339,9 @@ static void pick_logs(void) {
     if (log->rank == myrank && log->activation) {
       if (log->type == task_type_send || log->type == task_type_recv) {
 
+        /* Scale size. */
+        log->size *= messagescale ;
+
         /* Allocate space for data. */
         log->data = calloc(log->size, 1);
 
@@ -366,7 +372,8 @@ static void pick_logs(void) {
 static void usage(char *argv[]) {
   fprintf(stderr, "Usage: %s [-vf] SWIFT_mpiuse-log-file.dat logfile.dat\n",
           argv[0]);
-  fprintf(stderr, " options: -v verbose, -f fast injections\n");
+  fprintf(stderr, " options: -v verbose, -f fast injections, "
+                  "-s message size (bytes)\n");
   fflush(stderr);
 }
 
@@ -392,7 +399,7 @@ int main(int argc, char *argv[]) {
   /* Handle the command-line, we expect a mpiuse data file to read and various
    * options. */
   int opt;
-  while ((opt = getopt(argc, argv, "vf")) != -1) {
+  while ((opt = getopt(argc, argv, "vfs:")) != -1) {
     switch (opt) {
       case 'f':
         usetics = 0;
@@ -400,6 +407,9 @@ int main(int argc, char *argv[]) {
       case 'v':
         verbose = 1;
         break;
+      case 's':
+        messagescale = atof(optarg);
+        break;
       default:
         if (myrank == 0) usage(argv);
         return 1;
@@ -438,6 +448,10 @@ int main(int argc, char *argv[]) {
   if (myrank == 0) {
     message("Start of MPI tests");
     message("==================");
+    if (messagescale != 1.0f) {
+      message(" ");
+      message("  Using message scale of %f", messagescale);
+    }
   }
 
   /* Make three threads, one for injecting tasks and two to check for