diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 085dc12..c6c41f9 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -125,7 +125,7 @@
 
   double
     duration,
-    standard;
+    serial;
 
   MagickBooleanType
     concurrent,
@@ -163,13 +163,31 @@
     if (LocaleCompare("regard-warnings",option+1) == 0)
       regard_warnings=MagickTrue;
   }
+  if (iterations == 1)
+    {
+      status=command(image_info,argc,argv,metadata,exception);
+      if (exception->severity != UndefinedException)
+        {
+          if ((exception->severity > ErrorException) ||
+              (regard_warnings != MagickFalse))
+            status=MagickTrue;
+          CatchException(exception);
+        }
+        if ((metadata != (char **) NULL) && (*metadata != (char *) NULL))
+          {
+            (void) fputs(*metadata,stdout);
+            (void) fputc('\n',stdout);
+            *metadata=DestroyString(*metadata);
+          }
+      return(status);
+    }
   number_threads=GetOpenMPMaximumThreads();
-  standard=0.0;
+  serial=0.0;
   for (n=1; n <= number_threads; n++)
   {
     double
-      efficiency,
-      elapsed_time,
+      e,
+      parallel,
       user_time;
 
     TimerInfo
@@ -242,18 +260,20 @@
           }
         }
       }
-    elapsed_time=GetElapsedTime(timer);
-    if (n == 1)
-      standard=elapsed_time;
     user_time=GetUserTime(timer);
-    efficiency=((1.0/MagickMin((double) number_threads,standard/elapsed_time))-
-      (1.0/number_threads))/(1.0-(1.0/number_threads));
+    parallel=GetElapsedTime(timer);
+    e=1.0;
+    if (n == 1)
+      serial=parallel;
+    else
+      e=((1.0/(1.0/((serial/(serial+parallel))+(1.0-(serial/(serial+parallel)))/
+        (double) n)))-(1.0/(double) n))/(1.0-1.0/(double) n);
     (void) FormatLocaleFile(stderr,
       "Performance[%.20g]: %.20gi %gips %0.3fe %0.3fu %lu:%02lu.%03lu\n",
-      (double) n,(double) iterations,(double) iterations/elapsed_time,
-      efficiency,user_time,(unsigned long) (elapsed_time/60.0),(unsigned long)
-      floor(fmod(elapsed_time,60.0)),(unsigned long) 
-      (1000.0*(elapsed_time-floor(elapsed_time))+0.5));
+      (double) n,(double) iterations,(double) iterations/parallel,e,
+      user_time,(unsigned long) (parallel/60.0),(unsigned long)
+      floor(fmod(parallel,60.0)),(unsigned long)
+      (1000.0*(parallel-floor(parallel))+0.5));
     timer=DestroyTimerInfo(timer);
   }
   return(status);