diff --git a/contrib/scaling/scaling.pl b/contrib/scaling/scaling.pl
index 6b50195382..9d0a26cb3b 100755
--- a/contrib/scaling/scaling.pl
+++ b/contrib/scaling/scaling.pl
@@ -26,10 +26,10 @@ my @csvrow;
 my @tests = qw(/bin/true ./orte_no_op ./mpi_no_op ./mpi_no_op ./mpi_no_op);
 my @options = ("", "", "", "-mca mpi_add_procs_cutoff 0 -mca pmix_base_async_modex 1", "-mca mpi_add_procs_cutoff 0 -mca pmix_base_async_modex 1 -mca async_mpi_init 1 -mca async_mpi_finalize 1");
 my @starterlist = qw(mpirun prun srun aprun);
-my @starteroptionlist = ("--novm",
+my @starteroptionlist = (" --novm",
                          "",
-                         "--distribution=cyclic -N",
-                         "-N");
+                         " --distribution=cyclic --ntasks-per-node=",
+                         " -N");
 
 # Set to true if the script should merely print the cmds
 # it would run, but don't run them
@@ -130,7 +130,7 @@ foreach $starter (@starterlist) {
             push @starteroptions, $opt;
         } elsif ($usesrun && $starter eq "srun") {
             push @starters, $starter;
-            $opt = $starteroptionlist[$idx] . " " . $ppn;
+            $opt = $starteroptionlist[$idx] . $ppn;
             push @starteroptions, $opt;
         }
     }
@@ -277,6 +277,10 @@ foreach $starter (@starters) {
         }
         # give it a couple of seconds to start
         sleep 2;
+    } else {
+        if ($myresults) {
+            print FILE "\n\n";
+        }
     }
 
     if ($myresults) {
@@ -292,7 +296,15 @@ foreach $starter (@starters) {
             if (!$SHOWME) {
                 # pre-position the executable
                 $cmd = $starter . $starteroptions[$index] . " $test 2>&1";
-                system($cmd);
+                my $error;
+                $error = system($cmd);
+                if (0 != $error) {
+                    if ($myresults) {
+                        print FILE "Command $cmd returned error $error\n";
+                        $testnum = $testnum + 1;
+                        next;
+                    }
+                }
             }
             $n = 1;
             while ($n <= $num_nodes) {
@@ -321,12 +333,18 @@ foreach $starter (@starters) {
             print "\n--------------------------------------------------\n";
         }
         $testnum = $testnum + 1;
+        if ($starter eq "srun" or $starter eq "aprun") {
+            if ($testnum ge 3) {
+                last;
+            }
+        }
     }
     if ($havedvm) {
         if (!$SHOWME) {
             $cmd = "prun --terminate";
             system($cmd);
         }
+        $havedvm = 0;
     }
     $index = $index + 1;
 }