diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index 19d2c4a..b2ad693 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -381,59 +381,62 @@
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  ApplySettingOption() saves the given single settings option into a CLI wand
-%  holding the image_info, draw_info, quantize_info structures that is later
-%  used for reading, processing, and writing images.
+%  ApplySettingOption() applies a single settings option into a CLI wand
+%  holding the image_info, draw_info, quantize_info structures that will be
+%  later used when processing images.
 %
-%  No image in the wand is actually modified (setting options only)
+%  These options require no images to be present in the wand for them to be
+%  able to be set.  That is they may be used before the first image is read.
 %
 %  The format of the ApplySettingOption method is:
 %
 %    MagickBooleanType ApplySettingOption(MagickWand *wand,
-%        const int argc, const char **argv,ExceptionInfo *exception)
+%        const char *option, const MagickBooleanType set_option, const char
+%        **args, ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
 %    o wand: structure holding settings to be applied
 %
-%    o argc: Specifies a pointer to an integer describing the number of
-%      elements in the argument vector.
+%    o option: The option string to be set
 %
-%    o argv: Specifies a pointer to a text array containing the command line
-%      arguments.
+%    o set_option: is the option being set, or reset to some default
+%
+%    o arg: the single argument (if needed) to set this option.
 %
 %    o exception: return any errors or warnings in this structure.
 %
+%
+% Example usage (FUTURE)
+%
+%    argc,argv
+%    i=index in argv
+%
+%    count=ParseCommandOption(MagickCommandOptions,MagickFalse,argv[i]);
+%    flags=GetCommandOptionFlags(MagickCommandOptions,MagickFalse,argv[i]);
+%    if ( flags == MagickCommandOptions )
+%      ApplySettingsOption(wand, argv[i]+1,
+%          (*argv[i])=='-' ? MagickTrue : MagickFalse,
+%          (count>0)? argv[i+1]:(char *)NULL,
+%          exception);
+%    i += count+1;
+%
 */
-WandExport MagickBooleanType ApplySettingsOption(ImageInfo *image_info,
-  const int argc,const char **argv,ExceptionInfo *exception)
+WandExport MagickBooleanType ApplySettingsOption(MagickWand *wand,
+  const char *option, const MagickBooleanType set_option, const char *arg,
+  ExceptionInfo *exception)
 {
-  GeometryInfo
-    geometry_info;
-
-  ImageInfo
-    *image_info;
-
-  DrawInfo
-    *draw_info;
-
-  const char
-    *option;
-
   assert(wand != (MagickWand *) NULL);
   assert(wand->signature == WandSignature);
   assert(wand->draw_info != (DrawInfo *) NULL); /* ensure it is a CLI wand */
-  assert(wand->quantize_info == (QuantizeInfo *) NULL);
   if (wand->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
-  if (argc < 0)
-    return(MagickTrue);
 
-  option=argv[0]+1;
-  image_info=wand->image_info;
-  draw_info=wand->_info;
-
-#define IfSetOption ((*argv[0])=='-')
+#define image_info    (wand->image_info)
+#define draw_info     (wand->draw_info)
+#define quantize_info (wand->quantize_info)
+#define IfSetOption   (set_option != MagickFalse)
+#define IfArgOption   (IfSetOption?arg:(char *)NULL)
 
   switch (*option)
   {
@@ -441,15 +444,14 @@
     {
       if (LocaleCompare("adjoin",option) == 0)
         {
-          image_info->adjoin = IfSetOption ? MagickTrue : MagickFalse;
+          image_info->adjoin = set_option;
           break;
         }
       if (LocaleCompare("affine",option) == 0)
         {
           /* draw_info setting only */
           if (IfSetOption)
-            (void) ParseAffineGeometry(argv[1],draw_info->affine,
-               exception);
+            (void) ParseAffineGeometry(arg,draw_info->affine,exception);
           else
             GetAffineMatrix(draw_info->affine);
           break;
@@ -458,14 +460,12 @@
         {
           image_info->antialias =
           draw_info->stroke_antialias =
-          draw_info->text_antialias =
-               IfSetOption ? MagickTrue : MagickFalse;
+          draw_info->text_antialias = set_option;
           break;
         }
       if (LocaleCompare("authenticate",option) == 0)
-      {
-          (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : (char*) NULL);
+        {
+          (void) SetImageOption(image_info,option,IfArgOption);
           break;
         }
       break;
@@ -481,8 +481,8 @@
           */
           if (IfSetOption)
             {
-              (void) SetImageOption(image_info,option,argv[1]);
-              (void) QueryColorCompliance(argv[1],AllCompliance,
+              (void) SetImageOption(image_info,option,arg);
+              (void) QueryColorCompliance(arg,AllCompliance,
                    image_info->background_color,exception);
               break;
             }
@@ -498,7 +498,7 @@
              Usage outside direct convolve is actally non-sensible!
           */
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : "0");
+               IfSetOption ? arg : "0");
           break;
         }
       if (LocaleCompare("black-point-compensation",option) == 0)
@@ -514,7 +514,7 @@
              Used by many coders including PNG
           */
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : "0" );
+               IfSetOption ? arg : "0" );
           break;
         }
       if (LocaleCompare("bordercolor",option) == 0)
@@ -522,10 +522,10 @@
           /* FUTURE: both image_info attribute & ImageOption in use! */
           if (IfSetOption)
             {
-              (void) SetImageOption(image_info,option,argv[1]);
-              (void) QueryColorCompliance(argv[1],AllCompliece,
+              (void) SetImageOption(image_info,option,arg);
+              (void) QueryColorCompliance(arg,AllCompliece,
                   &image_info->border_color,exception);
-              (void) QueryColorCompliance(argv[1],AllCompliance,
+              (void) QueryColorCompliance(arg,AllCompliance,
                   &draw_info->border_color,exception);
               break;
             }
@@ -540,7 +540,7 @@
         {
           /* Only used to set draw_info for text drawing */
           const char
-            *value = IfSetOption ? argv[1] : "none";
+            *value = IfSetOption ? arg : "none";
           (void) SetImageOption(image_info,option,value);
           (void) QueryColorCompliance(value,AllCompliance,
                &draw_info->undercolor,exception);
@@ -556,8 +556,8 @@
             limit;
 
           limit=MagickResourceInfinity;
-          if (LocaleCompare("unlimited",argv[1]) != 0)
-            limit=(MagickSizeType) SiPrefixToDouble(argv[1],100.0);
+          if (LocaleCompare("unlimited",arg) != 0)
+            limit=(MagickSizeType) SiPrefixToDouble(arg,100.0);
           (void) SetMagickResourceLimit(MemoryResource,limit);
           (void) SetMagickResourceLimit(MapResource,2*limit);
           break;
@@ -565,14 +565,14 @@
       if (LocaleCompare("caption",option) == 0)
         {
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : (const char*)NULL);
+               IfSetOption ? arg : (const char*)NULL);
           break;
         }
       if (LocaleCompare("channel",option) == 0)
         {
           /* FUTURE: This is also a SimpleImageOperator!!! */
           image_info->channel=(ChannelType) (
-               IfSetOption ? ParseChannelOption(argv[1]) : DefaultChannels );
+               IfSetOption ? ParseChannelOption(arg) : DefaultChannels );
           /* This is also a SimpleImageOperator */
           break;
         }
@@ -585,13 +585,13 @@
           image_info->colorspace=UndefinedColorspace;
           if (IfSetOption)
             image_info->colorspace=(ColorspaceType) ParseCommandOption(
-                 MagickColorspaceOptions,MagickFalse,argv[1])
+                 MagickColorspaceOptions,MagickFalse,arg)
           break;
         }
       if (LocaleCompare("comment",option) == 0)
         {
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : (const char*)NULL);
+               IfSetOption ? arg : (const char*)NULL);
           break;
         }
       if (LocaleCompare("compose",option) == 0)
@@ -601,10 +601,10 @@
              which is used by "-layer" operators is image_info is undefined
           */
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : (const char*)NULL);
+               IfSetOption ? arg : (const char*)NULL);
           image_info->compose=(CompositeOperator) ParseCommandOption(
                MagickComposeOptions,MagickFalse,
-               IfSetOption ? argv[1] : "undefined");
+               IfSetOption ? arg : "undefined");
           break;
         }
       if (LocaleCompare("compress",option) == 0)
@@ -619,8 +619,8 @@
           if (IfSetOption)
             {
               image_info->compression=(CompressionType) ParseCommandOption(
-                MagickCompressOptions,MagickFalse,argv[1]);
-              (void) SetImageOption(image_info,option,argv[1]);
+                MagickCompressOptions,MagickFalse,arg);
+              (void) SetImageOption(image_info,option,arg);
               break;
             }
           image_info->compression=UndefinedCompression;
@@ -634,7 +634,7 @@
       if (LocaleCompare("debug",option) == 0)
         {
           if (IfSetOption)
-          (void) SetLogEventMask(IfSetOption?argv[1]:"none");
+          (void) SetLogEventMask(IfSetOption?arg:"none");
           image_info->debug=IsEventLogging(); /* extract logging*/
           wand->debug=IsEventLogging();
           break;
@@ -644,19 +644,19 @@
           /* FUTURE both -set and -define sets ImageOption
              But differs in that -set tries to set image properity (attributes)
           */
-          if (LocaleNCompare(argv[1],"registry:",9) == 0)
+          if (LocaleNCompare(arg,"registry:",9) == 0)
             {
               if (IfSetOption)
-                (void) DefineImageRegistry(StringRegistryType,argv[1]+9,
+                (void) DefineImageRegistry(StringRegistryType,arg+9,
                     exception);
               else
-                (void) DefineImageOption(image_info,argv[1],exception);
+                (void) DefineImageOption(image_info,arg,exception);
               break;
             }
           if (IfSetOption)
-            (void) DefineImageOption(image_info,argv[1],exception);
+            (void) DefineImageOption(image_info,arg,exception);
           else
-            (void) DeleteImageOption(image_info,argv[1],exception);
+            (void) DeleteImageOption(image_info,arg,exception);
           break;
         }
       if (LocaleCompare("delay",option) == 0)
@@ -665,7 +665,7 @@
              FUTURE: Option should also be used for "-morph" (color morphing)
           */
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : "0");
+               IfSetOption ? arg : "0");
           break;
         }
       if (LocaleCompare("density",option) == 0)
@@ -674,9 +674,9 @@
           /* Used by both draw_info and in images via SyncImageSettings() */
           if (IfSetOption)
             {
-              (void) CloneString(&image_info->density,argv[1]);
-              (void) CloneString(&draw_info->density,argv[1]);
-              (void) SetImageOption(image_info,option,argv[1]);
+              (void) CloneString(&image_info->density,arg);
+              (void) CloneString(&draw_info->density,arg);
+              (void) SetImageOption(image_info,option,arg);
               break;
             }
           if (image_info->density != (char *) NULL)
@@ -688,8 +688,8 @@
         }
       if (LocaleCompare("depth",option) == 0)
         {
-          /* This is also a SimpleImageOperator! */
-          image_info->depth=IsSetOption?StringToUnsignedLong(argv[1])
+          /* This is also a SimpleImageOperator! to set depth across images */
+          image_info->depth=IfSetOption?StringToUnsignedLong(arg)
                                        :MAGICKCORE_QUANTUM_DEPTH;
           break;
         }
@@ -697,35 +697,35 @@
         {
           /* Image Option is only used to set draw_info */
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : "undefined");
+               IfSetOption ? arg : "undefined");
           draw_info->direction=(DirectionType) ParseCommandOption(
                          MagickDirectionOptions,MagickFalse,
-                         IfSetOption ? argv[1] : "undefined");
+                         IfSetOption ? arg : "undefined");
           break;
         }
       if (LocaleCompare("display",option) == 0)
         {
           /* FUTURE: string in image_info - moved into Option ??? */
           (void) CloneString(&image_info->server_name,
-               IfSetOption ? argv[1] :(char *) NULL);
+               IfSetOption ? arg :(char *) NULL);
           break;
         }
       if (LocaleCompare("dispose",option) == 0)
         {
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : "undefined");
+               IfSetOption ? arg : "undefined");
           break;
         }
       if (LocaleCompare("dither",option) == 0)
         {
           /* FUTURE: merge all options to just Option and quantize_info! */
           (void) SetImageOption(image_info,option,
-                       IfSetOption ? argv[1] : "none");
+                       IfSetOption ? arg : "none");
           image_info->dither = quantize_info->dither =
                     IfSetOption ? MagickTrue : MagickFalse;
           quantize_info->dither_method=(DitherMethod) ParseCommandOption(
                     MagickDitherOptions,MagickFalse,
-                    IfSetOption ? argv[1] : "none");
+                    IfSetOption ? arg : "none");
           if (quantize_info->dither_method == NoDitherMethod)
                 image_info->dither = quantize_info->dither = MagickFalse;
           break;
@@ -737,7 +737,7 @@
       if (LocaleCompare("encoding",option) == 0)
         {
           (void) CloneString(&draw_info->encoding,
-                       IfSetOption ? argv[1] : "undefined");
+                       IfSetOption ? arg : "undefined");
           (void) SetImageOption(image_info,option,&draw_info->encoding);
           break;
         }
@@ -746,7 +746,7 @@
           const char
             value;
 
-          value=IfSetOption?argv[1]:"undefined";
+          value=IfSetOption?arg:"undefined";
           (void) SetImageOption(image_info,option,value);
           image_info->endian=(EndianType) ParseCommandOption(
               MagickEndianOptions,MagickFalse,value);
@@ -755,7 +755,7 @@
       if (LocaleCompare("extract",option) == 0)
         {
           (void) CloneString(&image_info->extract,
-               IfSetOption?argv[1]:(const char *) NULL);
+               IfSetOption?arg:(const char *) NULL);
           break;
         }
       break;
@@ -765,7 +765,7 @@
       if (LocaleCompare("family",argv[0]+1) == 0)
         {
           (void) CloneString(&draw_info->family,
-               IfSetOption ? argv[1] : (const char *) NULL);
+               IfSetOption ? arg : (const char *) NULL);
           break;
         }
       if (LocaleCompare("fill",option) == 0)
@@ -780,7 +780,7 @@
           ExceptionInfo
             *sans;
 
-          value = IfSetOption ? argv[1] : "none";
+          value = IfSetOption ? arg : "none";
           (void) SetImageOption(image_info,option,value);
 
           sans=AcquireExceptionInfo();
@@ -797,39 +797,43 @@
       if (LocaleCompare("filter",option) == 0)
         {
           (void) SetImageOption(image_info,option,
-                IfSetOption ? argv[1] : "undefined");
+                IfSetOption ? arg : "undefined");
           break;
         }
-      if (LocaleCompare("font",argv[0]+1) == 0)
+      if (LocaleCompare("font",option) == 0)
         {
           (void) CloneString(&draw_info->font,
-               IfSetOption ? argv[1] : (const char *) NULL);
+               IfSetOption ? arg : (const char *) NULL);
           (void) CloneString(&image_info->font,draw_info->font);
           break;
         }
       if (LocaleCompare("format",option) == 0)
         {
-          /* FUTURE: why the ping test, the user could set ping after this! */
+          /* FUTURE: why the ping test, you could set ping after this! */
+          /*
           register const char
             *q;
 
-          for (q=strchr(argv[1],'%'); q != (char *) NULL; q=strchr(q+1,'%'))
+          for (q=strchr(arg,'%'); q != (char *) NULL; q=strchr(q+1,'%'))
             if (strchr("Agkrz@[#",*(q+1)) != (char *) NULL)
               image_info->ping=MagickFalse;
-          (void) SetImageOption(image_info,option,argv[1]);
+          */
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? arg : (const char *) NULL);
           break;
         }
       if (LocaleCompare("fuzz",option) == 0)
         {
           /* FUTURE: image_info and ImageOption!
              Option used to set image fuzz! unless blank canvas (from color)
-             image attribute used for color compare operations
+             Image attribute used for color compare operations
+             image->fuzz is being set by SyncImageSettings()
              Can't find anything using image_info->fuzz (except cloning)!
           */
           if (IfSetOption)
             {
-              image_info->fuzz=SiPrefixToDouble(argv[1],(double) QuantumRange+1.0);
-              (void) SetImageOption(image_info,option,argv[1]);
+              image_info->fuzz=SiPrefixToDouble(arg,(double) QuantumRange+1.0);
+              (void) SetImageOption(image_info,option,arg);
               break;
             }
           image_info->fuzz=0.0;
@@ -842,25 +846,23 @@
     {
       if (LocaleCompare("gravity",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"undefined");
-              draw_info->gravity=UndefinedGravity;
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* FUTURE gravity also set in image via SyncImageSettings() */
+          const char
+            value;
+
+          value = IfSetOption ? arg : "none";
+          (void) SetImageOption(image_info,option,value);
           draw_info->gravity=(GravityType) ParseCommandOption(
-            MagickGravityOptions,MagickFalse,argv[1]);
+                           MagickGravityOptions,MagickFalse,value);
           break;
         }
       if (LocaleCompare("green-primary",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"0.0");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* Image chromaticity X,Y  NB: Y=X if Y not defined
+             Used by many coders
+          */
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? arg : "0.0");
           break;
         }
       break;
@@ -869,55 +871,59 @@
     {
       if (LocaleCompare("intent",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"undefined");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* FUTURE: sets image->rendering_intent in SyncImagesSettings
+             Which is only used by coders: MIFF, MPC, BMP, PNG
+             and for image profile call to AcquireTransformThreadSet()
+          */
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? arg : "undefined");
           break;
         }
       if (LocaleCompare("interlace",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              image_info->interlace=UndefinedInterlace;
-              (void) SetImageOption(image_info,option,"undefined");
-              break;
-            }
+          /* sets image attibute interlace via SyncImageSettings()
+             Also image_info is directly used by coders
+          */
+          const char
+            value;
+
+          value = IfSetOption ? arg : "undefined";
+          (void) SetImageOption(image_info,option, value);
           image_info->interlace=(InterlaceType) ParseCommandOption(
-            MagickInterlaceOptions,MagickFalse,argv[1]);
-          (void) SetImageOption(image_info,option,argv[1]);
+            MagickInterlaceOptions,MagickFalse,arg);
+          (void) SetImageOption(image_info,option,arg);
           break;
         }
       if (LocaleCompare("interline-spacing",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"undefined");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          const char
+            value;
+
+          value = IfSetOption ? arg : "0"; /* undefined? */
+          (void) SetImageOption(image_info,option, value);
+          draw_info->interline_spacing=InterpretLocaleValue(value,
+               (char **) NULL);
           break;
         }
       if (LocaleCompare("interpolate",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"undefined");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* FUTURE: sets image interpolate value via SyncImageSettings()
+             It is NOT used by coders, only in image processing,
+             so shoud really be a image_info attribute.
+          */
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? arg : "undefined");
           break;
         }
       if (LocaleCompare("interword-spacing",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"undefined");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          const char
+            value;
+
+          value = IfSetOption ? arg : "0"; /* undefined? */
+          (void) SetImageOption(image_info,option, value);
+          draw_info->interword_spacing=InterpretLocaleValue(value,
+               (char **) NULL);
           break;
         }
       break;
@@ -926,12 +932,12 @@
     {
       if (LocaleCompare("kerning",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"undefined");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          const char
+            value;
+
+          value = IfSetOption ? arg : "0"; /* undefined? */
+          (void) SetImageOption(image_info,option, value);
+          draw_info->kerning=InterpretLocaleValue(value,(char **) NULL);
           break;
         }
       break;
@@ -940,12 +946,9 @@
     {
       if (LocaleCompare("label",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) DeleteImageOption(image_info,option);
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* only used for new images */
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? arg : (char *)NULL);
           break;
         }
       if (LocaleCompare("limit",option) == 0)
@@ -956,10 +959,10 @@
           ResourceType
             type;
 
-          if (*argv[0] == '+')
+          if (!IfSetOption)
             break;
           type=(ResourceType) ParseCommandOption(MagickResourceOptions,
-            MagickFalse,argv[1]);
+            MagickFalse,arg);
           limit=MagickResourceInfinity;
           if (LocaleCompare("unlimited",argv[2]) != 0)
             limit=(MagickSizeType) SiPrefixToDouble(argv[2],100.0);
@@ -971,10 +974,7 @@
           ssize_t
             list;
 
-          /*
-            Display configuration list.
-          */
-          list=ParseCommandOption(MagickListOptions,MagickFalse,argv[1]);
+          list=ParseCommandOption(MagickListOptions,MagickFalse,arg);
           switch (list)
           {
             case MagickCoderOptions:
@@ -1058,19 +1058,15 @@
         }
       if (LocaleCompare("log",option) == 0)
         {
-          if (*argv[0] == '+')
-            break;
-          (void) SetLogFormat(argv[1]);
+          if (IfSetOption)
+            (void) SetLogFormat(arg);
           break;
         }
       if (LocaleCompare("loop",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"0");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* Sets image attibutes iterations via SyncImageSettings() */
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? arg : "0");
           break;
         }
       break;
@@ -1091,13 +1087,13 @@
         {
           if (*argv[0] == '+')
             {
-              (void) SetImageOption(image_info,option,argv[1]);
+              (void) SetImageOption(image_info,option,arg);
               (void) QueryColorCompliance(MatteColor,AllCompliance,
                 &image_info->matte_color,exception);
               break;
             }
-          (void) SetImageOption(image_info,option,argv[1]);
-          (void) QueryColorCompliance(argv[1],AllCompliance,&image_info->matte_color,
+          (void) SetImageOption(image_info,option,arg);
+          (void) QueryColorCompliance(arg,AllCompliance,&image_info->matte_color,
             exception);
           break;
         }
@@ -1109,7 +1105,8 @@
         }
       if (LocaleCompare("monochrome",option) == 0)
         {
-          image_info->monochrome=(*argv[0] == '-') ? MagickTrue : MagickFalse;
+          /* Setting (for input coders) and a 'type' operation */
+          image_info->monochrome=IfSetOption ? MagickTrue : MagickFalse;
           break;
         }
       break;
@@ -1118,15 +1115,17 @@
     {
       if (LocaleCompare("orient",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              image_info->orientation=UndefinedOrientation;
-              (void) SetImageOption(image_info,option,"undefined");
-              break;
-            }
-          image_info->orientation=(OrientationType) ParseCommandOption(
-            MagickOrientationOptions,MagickFalse,argv[1]);
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* Sets image attribute orientation via SyncImageSettings()
+             Is not used when defining for new images.
+             This makes it more of a 'operation' than a setting
+          */
+          const char
+            value;
+
+          value = IfSetOption ? arg : "undefined";
+          (void) SetImageOption(image_info,option, value);
+          image_info->orientation=(InterlaceType) ParseCommandOption(
+            MagickOrientationOptions,MagickFalse,value);
           break;
         }
     }
@@ -1134,6 +1133,7 @@
     {
       if (LocaleCompare("page",option) == 0)
         {
+          /* Only used for new images and image generators */
           char
             *canonical_page,
             page[MaxTextExtent];
@@ -1147,7 +1147,7 @@
           RectangleInfo
             geometry;
 
-          if (*argv[0] == '+')
+          if (!IfSetOption)
             {
               (void) DeleteImageOption(image_info,option);
               (void) CloneString(&image_info->page,(char *) NULL);
@@ -1157,7 +1157,7 @@
           image_option=GetImageOption(image_info,"page");
           if (image_option != (const char *) NULL)
             flags=ParseAbsoluteGeometry(image_option,&geometry);
-          canonical_page=GetPageGeometry(argv[1]);
+          canonical_page=GetPageGeometry(arg);
           flags=ParseAbsoluteGeometry(canonical_page,&geometry);
           canonical_page=DestroyString(canonical_page);
           (void) FormatLocaleString(page,MaxTextExtent,"%lux%lu",
@@ -1170,66 +1170,51 @@
           (void) CloneString(&image_info->page,page);
           break;
         }
-      if (LocaleCompare("pen",option) == 0)
-        {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"none");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
-          break;
-        }
       if (LocaleCompare("ping",option) == 0)
         {
-          image_info->ping= IsSetOption ? MagickTrue : MagickFalse;
+          image_info->ping= IfSetOption ? MagickTrue : MagickFalse;
           break;
         }
       if (LocaleCompare("pointsize",option) == 0)
         {
-          if (*argv[0] == '+')
-            geometry_info.rho=0.0;
-          else
-            (void) ParseGeometry(argv[1],&geometry_info);
-          image_info->pointsize=geometry_info.rho;
+          double
+            value=12.0;
+
+          if (IfSetOption)
+            InterpretLocaleValue(arg,(char **) NULL);
+          image_info->pointsize=draw_info->pointsize=value;
           break;
         }
       if (LocaleCompare("precision",option) == 0)
         {
-          (void) SetMagickPrecision(StringToInteger(argv[1]));
+          (void) SetMagickPrecision(StringToInteger(arg));
           break;
         }
+      /* FUTURE: Only the 'preview' coder appears to use this
+       * Depreciate the coder?  Leaving only the 'preview' operator.
       if (LocaleCompare("preview",option) == 0)
         {
-          /*
-            Preview image.
-          */
-          if (*argv[0] == '+')
-            {
-              image_info->preview_type=UndefinedPreview;
-              break;
-            }
-          image_info->preview_type=(PreviewType) ParseCommandOption(
-            MagickPreviewOptions,MagickFalse,argv[1]);
+          image_info->preview_type=UndefinedPreview;
+          if (IfSetOption)
+            image_info->preview_type=(PreviewType) ParseCommandOption(
+                MagickPreviewOptions,MagickFalse,arg);
           break;
         }
+      */
       break;
     }
     case 'q':
     {
       if (LocaleCompare("quality",option) == 0)
         {
-          /*
-            Set image compression quality.
-          */
-          if (*argv[0] == '+')
+          if (IfSetOption)
             {
-              image_info->quality=UndefinedCompressionQuality;
-              (void) SetImageOption(image_info,option,"0");
+              image_info->quality=StringToUnsignedLong(arg);
+              (void) SetImageOption(image_info,option,arg);
               break;
             }
-          image_info->quality=StringToUnsignedLong(argv[1]);
-          (void) SetImageOption(image_info,option,argv[1]);
+          image_info->quality=UndefinedCompressionQuality;
+          (void) SetImageOption(image_info,option,"0");
           break;
         }
       if (LocaleCompare("quantize",option) == 0)
@@ -1238,11 +1223,12 @@
           quantize_info->colorspace=UndefinedColorspace;
           if (IfSetOption)
             quantize_info->colorspace=(ColorspaceType) ParseCommandOption(
-                 MagickColorspaceOptions,MagickFalse,argv[1]);
+                 MagickColorspaceOptions,MagickFalse,arg);
           break;
         }
       if (LocaleCompare("quiet",option) == 0)
         {
+          /* FUTURE: if two -quiet is performed you can not do +quiet! */
           static WarningHandler
             warning_handler = (WarningHandler) NULL;
           WarningHandler
@@ -1260,12 +1246,11 @@
     {
       if (LocaleCompare("red-primary",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"0.0");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* Image chromaticity X,Y  NB: Y=X if Y not defined
+             Used by many coders
+          */
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? arg : "0" );
           break;
         }
       if (LocaleCompare("render",option) == 0)
@@ -1282,13 +1267,13 @@
         {
           /* FUTURE: should be converted to jpeg:sampling_factor */
           (void) CloneString(&image_info->sampling_factor,
-               IfSetOption ? argv[1] : (char *) NULL);
+               IfSetOption ? arg : (char *) NULL);
           break;
         }
       if (LocaleCompare("scene",option) == 0)
         {
           char
-            *value = IfSetOption ? argv[1] : "0";
+            *value = IfSetOption ? arg : "0";
 
           (void) SetImageOption(image_info,option,value);
           image_info->scene=StringToUnsignedLong(value);
@@ -1297,7 +1282,7 @@
       if (LocaleCompare("seed",option) == 0)
         {
           SeedPseudoRandomGenerator(
-               IfSetOption ? (size_t) StringToUnsignedLong(argv[1])
+               IfSetOption ? (size_t) StringToUnsignedLong(arg)
                            : (size_t) time((time_t *) NULL) );
           break;
         }
@@ -1307,7 +1292,7 @@
              Look at the special handling for "size" in SetImageOption()
            */
           (void) CloneString(&image_info->size,
-               IfSetOption ? argv[1] : (char *) NULL);
+               IfSetOption ? arg : (char *) NULL);
           break;
         }
       if (LocaleCompare("stretch",option) == 0)
@@ -1315,7 +1300,7 @@
           draw_info->stretch=UndefinedStretch;
           if (IfSetOption)
             draw_info->stretch=(StretchType) ParseCommandOption(
-              MagickStretchOptions,MagickFalse,argv[1]);
+              MagickStretchOptions,MagickFalse,arg);
           break;
         }
       if (LocaleCompare("stroke",option) == 0)
@@ -1325,7 +1310,7 @@
              but draw_info is only initialsed using the color not the pattern
            */
           const char
-            *value = IfSetOption ? argv[1] : "none";
+            *value = IfSetOption ? arg : "none";
 
           ExceptionInfo
             *sans;
@@ -1347,7 +1332,7 @@
       if (LocaleCompare("strokewidth",option) == 0)
         {
           const char
-            *value = IfSetOption ? argv[1] : "1.0";
+            *value = IfSetOption ? arg : "1.0";
           (void) SetImageOption(image_info,option,value);
           draw_info->stroke_width=InterpretLocaleValue(value,(char **) NULL);
           break;
@@ -1357,7 +1342,7 @@
           draw_info->style=UndefinedStyle;
           if (IfSetOption)
             draw_info->style=(StyleType) ParseCommandOption(MagickStyleOptions,
-                 MagickFalse,argv[1]);
+                 MagickFalse,arg);
           break;
         }
       if (LocaleCompare("synchronize",option) == 0)
@@ -1379,20 +1364,20 @@
         {
           /* FUTURE: move image_info string to option splay-tree */
           (void) CloneString(&image_info->texture,
-               IfSetOption ? argv[1] : (char *) NULL);
+               IfSetOption ? arg : (char *) NULL);
           break;
         }
       if (LocaleCompare("tile",option) == 0)
         {
           draw_info->fill_pattern=DestroyImage(draw_info->fill_pattern);
           if (IfSetOption)
-            draw_info->fill_pattern=GetImageCache(image_info,argv[1],exception);
+            draw_info->fill_pattern=GetImageCache(image_info,arg,exception);
           break;
         }
       if (LocaleCompare("tile-offset",option) == 0)
         {
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : "0");
+               IfSetOption ? arg : "0");
           break;
         }
       if (LocaleCompare("transparent-color",option) == 0)
@@ -1404,8 +1389,8 @@
           */
           if (IfSetOption)
             {
-              (void) SetImageOption(image_info,option,argv[1]);
-              (void) QueryColorCompliance(argv[1],AllCompliance,
+              (void) SetImageOption(image_info,option,arg);
+              (void) QueryColorCompliance(arg,AllCompliance,
                    image_info->transparent_color,exception);
               break;
             }
@@ -1417,11 +1402,11 @@
       if (LocaleCompare("type",option) == 0)
         {
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : (char) NULL);
+               IfSetOption ? arg : (char) NULL);
           image_info->type=UndefinedType;
           if (IfSetOption)
             image_info->type=(ImageType) ParseCommandOption(MagickTypeOptions,
-                 MagickFalse,argv[1]);
+                 MagickFalse,arg);
           break;
         }
       break;
@@ -1431,8 +1416,8 @@
       if (LocaleCompare("undercolor",option) == 0)
         {
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : (char) NULL);
-          (void) QueryColorCompliance(argv[1],AllCompliance,
+               IfSetOption ? arg : (char) NULL);
+          (void) QueryColorCompliance(arg,AllCompliance,
                draw_info->undercolor,exception);
           break;
         }
@@ -1442,11 +1427,11 @@
           /* Should this effect draw_info X and Y resolution? */
           /* FUTURE: this probably should be part of the density setting */
           (void) SetImageOption(image_info,option,
-               IfSetOption ? argv[1] : (char) NULL);
+               IfSetOption ? arg : (char) NULL);
           image_info->units=UndefinedResolution;
           if (IfSetOption)
              image_info->units=(ResolutionType) ParseCommandOption(
-                  MagickResolutionOptions,MagickFalse,argv[1]);
+                  MagickResolutionOptions,MagickFalse,arg);
           break;
         }
       break;
@@ -1468,14 +1453,14 @@
              Only used by coder FPX
           */
           (void) CloneString(&image_info->view,
-               IfSetOption ? argv[1] : (char) NULL);
+               IfSetOption ? arg : (char) NULL);
           break;
         }
       if (LocaleCompare("virtual-pixel",option) == 0)
         {
           /* Also used as a 'image' option deep in image structure */
           const char
-            *value = IfSetOption ? argv[1] : "undefined";
+            *value = IfSetOption ? arg : "undefined";
 
           (void) SetImageOption(image_info,option,value);
           image_info->virtual_pixel_method=(VirtualPixelMethod)
@@ -1486,34 +1471,32 @@
     }
     case 'w':
     {
-      if (LocaleCompare("weight",argv[0]+1) == 0)
+      if (LocaleCompare("weight",option) == 0)
         {
           /* FUTURE: relative weights not sensical due to first assignment!
              Also just what is actually using font 'weight' ???
+             There is no "-list weight" output (reference manual says there is)
           */
-          draw_info->weight=StringToUnsignedLong(argv[1]);
-          if (LocaleCompare(argv[1],"all") == 0)
+          draw_info->weight=StringToUnsignedLong(arg);
+          if (LocaleCompare(arg,"all") == 0)
             draw_info->weight=0;
-          if (LocaleCompare(argv[1],"bold") == 0)
+          if (LocaleCompare(arg,"bold") == 0)
             draw_info->weight=700;
-          if (LocaleCompare(argv[1],"bolder") == 0)
+          if (LocaleCompare(arg,"bolder") == 0)
             if (draw_info->weight <= 800)
               draw_info->weight+=100;
-          if (LocaleCompare(argv[1],"lighter") == 0)
+          if (LocaleCompare(arg,"lighter") == 0)
             if (draw_info->weight >= 100)
               draw_info->weight-=100;
-          if (LocaleCompare(argv[1],"normal") == 0)
+          if (LocaleCompare(arg,"normal") == 0)
             draw_info->weight=400;
           break;
         }
       if (LocaleCompare("white-point",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"0.0");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* Used as a image chromaticity setting */
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? arg : "0.0" );
           break;
         }
       break;
@@ -1535,8 +1518,9 @@
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  ApplyImageOperator() apply one simple image operation to just the current
-%  image.
+%  ApplyImageOperator() apply one simple image operation to the current
+%  image pointed to by the CLI wand, with the settings that are saved in the
+%  CLI wand.
 %
 %  The image in the list may be modified in three different ways...
 %
@@ -1544,48 +1528,55 @@
 %    * replaced by a new image (EG: -spread, -resize, -rotate, -morphology)
 %    * replace by a list of images (-separate and -crop only!)
 %
-%  In each case the result is returned into the list, and the pointer to the
-%  modified image (last image added if replaced by a list of images) is
-%  returned.  As the image pointed to may be replaced, the first image in the
-%  list may also change.  GetFirstImageInList() should be used by caller if
-%  they wish return the Image pointer to the first image in list.
+%  In each case the result replaces the original image in the list, as well as
+%  the pointer to the modified image (last image added if replaced by a list
+%  of images) is returned.  As the image pointed to may be replaced, the first
+%  image in the list may also change.  GetFirstImageInList() should be used by
+%  caller if they wish return the Image pointer to the first image in list.
+%
+%  It is assumed that any per-image settings are up-to-date with respect to
+%  extra settings that have been saved in the wand.
 %
 %  The format of the ApplyImageOperator method is:
 %
 %    MagickBooleanType ApplyImageOperator(MagickWand *wand,
-%        const int argc,const char **argv)
+%        const char *option, const MagickBooleanType set_option, const char
+%        **args, ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
-%    o wand: The CLI wand holding all the settings and pointer to image
+%    o wand: structure holding settings to be applied
 %
-%    o argc: Specifies a pointer to an integer describing the number of
-%      elements in the argument vector.
+%    o option: The option string to be set
 %
-%    o argv: Specifies a pointer to a text array containing the command line
-%      arguments.
+%    o set_option: is the option being set, or reset to some default
+%
+%    o arg: the single argument (if needed) to set this option.
 %
 %    o exception: return any errors or warnings in this structure.
 %
+%
+% Example usage (FUTURE)
+%
+%    argc,argv
+%    i=index in argv
+%
+%    count=ParseCommandOption(MagickCommandOptions,MagickFalse,argv[i]);
+%    flags=GetCommandOptionFlags(MagickCommandOptions,MagickFalse,argv[i]);
+%    if ( flags == MagickCommandOptions )
+%      ApplySettingsOption(wand, argv[i]+1,
+%          (*argv[i])=='-' ? MagickTrue : MagickFalse,
+%          argv+i+1, exception);
+%    i += count+1;
+%
 */
-MagickExport MagickBooleanType ApplyImageOperator(MagickWand *wand,
-     const int wand_unused(argc), const char **argv, ExceptionInfo *exception)
+WandExport MagickBooleanType ApplySettingsOption(MagickWand *wand,
+  const char *option, const MagickBooleanType set_option, const char **args,
+  ExceptionInfo *exception)
 {
   Image *
     new_image;
 
-  ChannelType
-    channel;
-
-  ComposeOperation
-     compose;
-
-  const char
-    *format;
-
-  DrawInfo
-    *draw_info;
-
   GeometryInfo
     geometry_info;
 
@@ -1595,41 +1586,32 @@
   MagickStatusType
     status;
 
-  PixelInfo
-    fill;
-
   MagickStatusType
     flags;
 
-  QuantizeInfo
-    *quantize_info;
-
   assert(image_info != (const ImageInfo *) NULL);
   assert(image_info->signature == MagickSignature);
-  assert(image != (Image **) NULL);
+  assert(wand->draw_info != (DrawInfo *) NULL); /* ensure it is a CLI wand */
+  assert(image != (Image **) NULL);             /* there is an image */
   assert((*image)->signature == MagickSignature);
-  if ((*image)->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",(*image)->filename);
-  if (argc < 0)
-    return(MagickTrue);
-  draw_info=CloneDrawInfo(image_info,(DrawInfo *) NULL);
-  quantize_info=AcquireQuantizeInfo(image_info);
+
+  if (wand->debug != MagickFalse)
+    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+
   SetGeometryInfo(&geometry_info);
-  GetPixelInfo(*image,&fill);
-  fill=(*image)->background_color;
-  channel=image_info->channel;
-  format=GetImageOption(image_info,"format");
 
-  new_image = (Image *)NULL;
+  new_image = (Image *)NULL; /* the replacement image, if not null at end */
 
-  switch (*(argv[0]+1))
+  /* We need somthing more optimized than this! */
+  (void) SyncImageSettings(image_info,*image,exception);
+
+  switch (*option)
   {
     case 'a':
     {
-      if (LocaleCompare("adaptive-blur",argv[0]+1) == 0)
+      if (LocaleCompare("adaptive-blur",option) == 0)
         {
-          (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -1638,24 +1620,23 @@
             geometry_info.sigma,geometry_info.xi,exception);
           break;
         }
-      if (LocaleCompare("adaptive-resize",argv[0]+1) == 0)
+      if (LocaleCompare("adaptive-resize",option) == 0)
         {
           /* FUTURE: this is really a "interpolate-resize" operator
              "adaptive-resize" uses a fixed "Mesh" interpolation
           */
-          (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseRegionGeometry(*image,argv[1],&geometry,exception);
+          (void) ParseRegionGeometry(*image,args[0],&geometry,exception);
           new_image=AdaptiveResizeImage(*image,geometry.width,
             geometry.height,interpolate_method,exception);
           break;
         }
-      if (LocaleCompare("adaptive-sharpen",argv[0]+1) == 0)
+      if (LocaleCompare("adaptive-sharpen",option) == 0)
         {
           /*
             Adaptive sharpen image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -1664,18 +1645,18 @@
             geometry_info.sigma,geometry_info.xi,exception);
           break;
         }
-      if (LocaleCompare("alpha",argv[0]+1) == 0)
+      if (LocaleCompare("alpha",option) == 0)
         {
           AlphaChannelType
             alpha_type;
 
           (void) SyncImageSettings(image_info,*image,exception);
           alpha_type=(AlphaChannelType) ParseCommandOption(MagickAlphaOptions,
-            MagickFalse,argv[1]);
+            MagickFalse,args[0]);
           (void) SetImageAlphaChannel(*image,alpha_type,exception);
           break;
         }
-      if (LocaleCompare("annotate",argv[0]+1) == 0)
+      if (LocaleCompare("annotate",option) == 0)
         {
           char
             *text,
@@ -1683,7 +1664,7 @@
 
           (void) SyncImageSettings(image_info,*image,exception);
           SetGeometryInfo(&geometry_info);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=geometry_info.rho;
           text=InterpretImageProperties(image_info,*image,argv[2],
@@ -1706,7 +1687,7 @@
           (void) AnnotateImage(*image,draw_info,exception);
           break;
         }
-      if (LocaleCompare("auto-gamma",argv[0]+1) == 0)
+      if (LocaleCompare("auto-gamma",option) == 0)
         {
           /*
             Auto Adjust Gamma of image based on its mean
@@ -1715,7 +1696,7 @@
           (void) AutoGammaImage(*image,exception);
           break;
         }
-      if (LocaleCompare("auto-level",argv[0]+1) == 0)
+      if (LocaleCompare("auto-level",option) == 0)
         {
           /*
             Perfectly Normalize (max/min stretch) the image
@@ -1724,7 +1705,7 @@
           (void) AutoLevelImage(*image,exception);
           break;
         }
-      if (LocaleCompare("auto-orient",argv[0]+1) == 0)
+      if (LocaleCompare("auto-orient",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           switch ((*image)->orientation)
@@ -1775,26 +1756,26 @@
     }
     case 'b':
     {
-      if (LocaleCompare("black-threshold",argv[0]+1) == 0)
+      if (LocaleCompare("black-threshold",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) BlackThresholdImage(*image,argv[1],exception);
+          (void) BlackThresholdImage(*image,args[0],exception);
           break;
         }
-      if (LocaleCompare("blue-shift",argv[0]+1) == 0)
+      if (LocaleCompare("blue-shift",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           geometry_info.rho=1.5;
           if (*argv[0] == '-')
-            flags=ParseGeometry(argv[1],&geometry_info);
+            flags=ParseGeometry(args[0],&geometry_info);
           new_image=BlueShiftImage(*image,geometry_info.rho,exception);
           break;
         }
-      if (LocaleCompare("blur",argv[0]+1) == 0)
+      if (LocaleCompare("blur",option) == 0)
         {
           /* FUTURE: use of "bias" in a blur is non-sensible */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -1803,7 +1784,7 @@
             geometry_info.sigma,geometry_info.xi,exception);
           break;
         }
-      if (LocaleCompare("border",argv[0]+1) == 0)
+      if (LocaleCompare("border",option) == 0)
         {
           ComposeOperator
             compose;
@@ -1820,13 +1801,13 @@
             compose=OverCompositeOp;  /* use Over not image->compose */
 
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParsePageGeometry(*image,argv[1],&geometry,exception);
+          flags=ParsePageGeometry(*image,args[0],&geometry,exception);
           if ((flags & SigmaValue) == 0)
             geometry.height=geometry.width;
           new_image=BorderImage(*image,&geometry,compose,exception);
           break;
         }
-      if (LocaleCompare("brightness-contrast",argv[0]+1) == 0)
+      if (LocaleCompare("brightness-contrast",option) == 0)
         {
           double
             brightness,
@@ -1839,7 +1820,7 @@
             flags;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           brightness=geometry_info.rho;
           contrast=0.0;
           if ((flags & SigmaValue) != 0)
@@ -1852,7 +1833,7 @@
     }
     case 'c':
     {
-      if (LocaleCompare("cdl",argv[0]+1) == 0)
+      if (LocaleCompare("cdl",option) == 0)
         {
           char
             *color_correction_collection;
@@ -1861,23 +1842,23 @@
             Color correct with a color decision list.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          color_correction_collection=FileToString(argv[1],~0,exception);
+          color_correction_collection=FileToString(args[0],~0,exception);
           if (color_correction_collection == (char *) NULL)
             break;
           (void) ColorDecisionListImage(*image,color_correction_collection,
             exception);
           break;
         }
-      if (LocaleCompare("channel",argv[0]+1) == 0)
+      if (LocaleCompare("channel",option) == 0)
         {
           /* The "channel" setting has already been set */
           SetPixelChannelMap(*image,image_info->channel);
           break;
         }
-      if (LocaleCompare("charcoal",argv[0]+1) == 0)
+      if (LocaleCompare("charcoal",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -1886,20 +1867,20 @@
             geometry_info.sigma,geometry_info.xi,exception);
           break;
         }
-      if (LocaleCompare("chop",argv[0]+1) == 0)
+      if (LocaleCompare("chop",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseGravityGeometry(*image,argv[1],&geometry,exception);
+          (void) ParseGravityGeometry(*image,args[0],&geometry,exception);
           new_image=ChopImage(*image,&geometry,exception);
           break;
         }
-      if (LocaleCompare("clamp",argv[0]+1) == 0)
+      if (LocaleCompare("clamp",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           (void) ClampImage(*image,exception);
           break;
         }
-      if (LocaleCompare("clip",argv[0]+1) == 0)
+      if (LocaleCompare("clip",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           if (*argv[0] == '+')
@@ -1910,7 +1891,7 @@
           (void) ClipImage(*image,exception);
           break;
         }
-      if (LocaleCompare("clip-mask",argv[0]+1) == 0)
+      if (LocaleCompare("clip-mask",option) == 0)
         {
           CacheView
             *mask_view;
@@ -1934,7 +1915,7 @@
               (void) SetImageMask(*image,(Image *) NULL,exception);
               break;
             }
-          mask_image=GetImageCache(image_info,argv[1],exception);
+          mask_image=GetImageCache(image_info,args[0],exception);
           if (mask_image == (Image *) NULL)
             break;
           if (SetImageStorageClass(mask_image,DirectClass,exception) == MagickFalse)
@@ -1967,38 +1948,38 @@
           mask_image=DestroyImage(mask_image);
           break;
         }
-      if (LocaleCompare("clip-path",argv[0]+1) == 0)
+      if (LocaleCompare("clip-path",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ClipImagePath(*image,argv[1],*argv[0] == '-' ? MagickTrue :
+          (void) ClipImagePath(*image,args[0],*argv[0] == '-' ? MagickTrue :
             MagickFalse,exception);
           break;
         }
-      if (LocaleCompare("colorize",argv[0]+1) == 0)
+      if (LocaleCompare("colorize",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          new_image=ColorizeImage(*image,argv[1],draw_info->fill,
+          new_image=ColorizeImage(*image,args[0],draw_info->fill,
             exception);
           break;
         }
-      if (LocaleCompare("color-matrix",argv[0]+1) == 0)
+      if (LocaleCompare("color-matrix",option) == 0)
         {
           KernelInfo
             *kernel;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          kernel=AcquireKernelInfo(argv[1]);
+          kernel=AcquireKernelInfo(args[0]);
           if (kernel == (KernelInfo *) NULL)
             break;
           new_image=ColorMatrixImage(*image,kernel,exception);
           kernel=DestroyKernelInfo(kernel);
           break;
         }
-      if (LocaleCompare("colors",argv[0]+1) == 0)
+      if (LocaleCompare("colors",option) == 0)
         {
           /* Reduce the number of colors in the image.  */
           (void) SyncImageSettings(image_info,*image,exception);
-          quantize_info->number_colors=StringToUnsignedLong(argv[1]);
+          quantize_info->number_colors=StringToUnsignedLong(args[0]);
           if (quantize_info->number_colors == 0)
             break;
           if (((*image)->storage_class == DirectClass) ||
@@ -2008,7 +1989,7 @@
             (void) CompressImageColormap(*image,exception);
           break;
         }
-      if (LocaleCompare("colorspace",argv[0]+1) == 0)
+      if (LocaleCompare("colorspace",option) == 0)
         {
           /* This is a Image Setting, which should already been set */
           /* FUTURE: default colorspace should be sRGB!
@@ -2022,14 +2003,14 @@
                     exception);
           break;
         }
-      if (LocaleCompare("contrast",argv[0]+1) == 0)
+      if (LocaleCompare("contrast",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           (void) ContrastImage(*image,(*argv[0] == '-') ? MagickTrue :
             MagickFalse,exception);
           break;
         }
-      if (LocaleCompare("contrast-stretch",argv[0]+1) == 0)
+      if (LocaleCompare("contrast-stretch",option) == 0)
         {
           double
             black_point,
@@ -2042,7 +2023,7 @@
             Contrast stretch image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           black_point=geometry_info.rho;
           white_point=(flags & SigmaValue) != 0 ? geometry_info.sigma :
             black_point;
@@ -2057,13 +2038,13 @@
             exception);
           break;
         }
-      if (LocaleCompare("convolve",argv[0]+1) == 0)
+      if (LocaleCompare("convolve",option) == 0)
         {
           KernelInfo
             *kernel_info;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          kernel_info=AcquireKernelInfo(argv[1]);
+          kernel_info=AcquireKernelInfo(args[0]);
           if (kernel_info == (KernelInfo *) NULL)
             break;
           kernel_info->bias=(*image)->bias;
@@ -2071,22 +2052,22 @@
           kernel_info=DestroyKernelInfo(kernel_info);
           break;
         }
-      if (LocaleCompare("crop",argv[0]+1) == 0)
+      if (LocaleCompare("crop",option) == 0)
         {
           /*
             Crop a image to a smaller size
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          new_image=CropImageToTiles(*image,argv[1],exception);
+          new_image=CropImageToTiles(*image,args[0],exception);
           break;
         }
-      if (LocaleCompare("cycle",argv[0]+1) == 0)
+      if (LocaleCompare("cycle",option) == 0)
         {
           /*
             Cycle an image colormap.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) CycleColormapImage(*image,(ssize_t) StringToLong(argv[1]),
+          (void) CycleColormapImage(*image,(ssize_t) StringToLong(args[0]),
             exception);
           break;
         }
@@ -2094,7 +2075,7 @@
     }
     case 'd':
     {
-      if (LocaleCompare("decipher",argv[0]+1) == 0)
+      if (LocaleCompare("decipher",option) == 0)
         {
           StringInfo
             *passkey;
@@ -2103,7 +2084,7 @@
             Decipher pixels.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          passkey=FileToStringInfo(argv[1],~0,exception);
+          passkey=FileToStringInfo(args[0],~0,exception);
           if (passkey != (StringInfo *) NULL)
             {
               (void) PasskeyDecipherImage(*image,passkey,exception);
@@ -2111,15 +2092,18 @@
             }
           break;
         }
-      if (LocaleCompare("depth",argv[0]+1) == 0)
+      if (LocaleCompare("depth",option) == 0)
         {
-          /* the image_info->depth setting has already bee set
-           * We just need to apply it to all images in current sequence */
+          /* The image_info->depth setting has already been set
+             We just need to apply it to all images in current sequence
+             WARNING: Depth from 8 to 16 causes 'quantum rounding to images!
+             That is it really is an operation, not a setting! Arrgghhh
+          */
           (void) SyncImageSettings(image_info,*image,exception);
           (void) SetImageDepth(*image,image_info->depth);
           break;
         }
-      if (LocaleCompare("deskew",argv[0]+1) == 0)
+      if (LocaleCompare("deskew",option) == 0)
         {
           double
             threshold;
@@ -2131,11 +2115,11 @@
           if (*argv[0] == '+')
             threshold=40.0*QuantumRange/100.0;
           else
-            threshold=SiPrefixToDouble(argv[1],QuantumRange);
+            threshold=SiPrefixToDouble(args[0],QuantumRange);
           new_image=DeskewImage(*image,threshold,exception);
           break;
         }
-      if (LocaleCompare("despeckle",argv[0]+1) == 0)
+      if (LocaleCompare("despeckle",option) == 0)
         {
           /*
             Reduce the speckles within an image.
@@ -2144,12 +2128,12 @@
           new_image=DespeckleImage(*image,exception);
           break;
         }
-      if (LocaleCompare("display",argv[0]+1) == 0)
+      if (LocaleCompare("display",option) == 0)
         {
-          (void) CloneString(&draw_info->server_name,argv[1]);
+          (void) CloneString(&draw_info->server_name,args[0]);
           break;
         }
-      if (LocaleCompare("distort",argv[0]+1) == 0)
+      if (LocaleCompare("distort",option) == 0)
         {
           char
             *args,
@@ -2175,7 +2159,7 @@
           */
           (void) SyncImageSettings(image_info,*image,exception);
           method=(DistortImageMethod) ParseCommandOption(MagickDistortOptions,
-            MagickFalse,argv[1]);
+            MagickFalse,args[0]);
           if ( method == ResizeDistortion )
             {
                /* Special Case - Argument is actually a resize geometry!
@@ -2224,10 +2208,10 @@
           arguments=(double *) RelinquishMagickMemory(arguments);
           break;
         }
-      if (LocaleCompare("draw",argv[0]+1) == 0)
+      if (LocaleCompare("draw",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) CloneString(&draw_info->primitive,argv[1]);
+          (void) CloneString(&draw_info->primitive,args[0]);
           (void) DrawImage(*image,draw_info,exception);
           break;
         }
@@ -2235,33 +2219,33 @@
     }
     case 'e':
     {
-      if (LocaleCompare("edge",argv[0]+1) == 0)
+      if (LocaleCompare("edge",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           new_image=EdgeImage(*image,geometry_info.rho,
             geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("emboss",argv[0]+1) == 0)
+      if (LocaleCompare("emboss",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           new_image=EmbossImage(*image,geometry_info.rho,
             geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("encipher",argv[0]+1) == 0)
+      if (LocaleCompare("encipher",option) == 0)
         {
           StringInfo
             *passkey;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          passkey=FileToStringInfo(argv[1],~0,exception);
+          passkey=FileToStringInfo(args[0],~0,exception);
           if (passkey != (StringInfo *) NULL)
             {
               (void) PasskeyEncipherImage(*image,passkey,exception);
@@ -2269,19 +2253,19 @@
             }
           break;
         }
-      if (LocaleCompare("enhance",argv[0]+1) == 0)
+      if (LocaleCompare("enhance",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           new_image=EnhanceImage(*image,exception);
           break;
         }
-      if (LocaleCompare("equalize",argv[0]+1) == 0)
+      if (LocaleCompare("equalize",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           (void) EqualizeImage(*image,exception);
           break;
         }
-      if (LocaleCompare("evaluate",argv[0]+1) == 0)
+      if (LocaleCompare("evaluate",option) == 0)
         {
           double
             constant;
@@ -2291,15 +2275,15 @@
 
           (void) SyncImageSettings(image_info,*image,exception);
           op=(MagickEvaluateOperator) ParseCommandOption(
-            MagickEvaluateOptions,MagickFalse,argv[1]);
+            MagickEvaluateOptions,MagickFalse,args[0]);
           constant=SiPrefixToDouble(argv[2],QuantumRange);
           (void) EvaluateImage(*image,op,constant,exception);
           break;
         }
-      if (LocaleCompare("extent",argv[0]+1) == 0)
+      if (LocaleCompare("extent",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGravityGeometry(*image,argv[1],&geometry,exception);
+          flags=ParseGravityGeometry(*image,args[0],&geometry,exception);
           if (geometry.width == 0)
             geometry.width=(*image)->columns;
           if (geometry.height == 0)
@@ -2311,14 +2295,14 @@
     }
     case 'f':
     {
-      if (LocaleCompare("features",argv[0]+1) == 0)
+      if (LocaleCompare("features",option) == 0)
         {
           /* FUTURE: Assign Artifact to all images -- per image setting */
           (void) SetImageArtifact(*image,"identify:features",
-              IfSetOption ? argv[1] : (const char *) NULL);
+              IfSetOption ? args[0] : (const char *) NULL);
           break;
         }
-      if (LocaleCompare("flip",argv[0]+1) == 0)
+      if (LocaleCompare("flip",option) == 0)
         {
           /*
             Flip image scanlines.
@@ -2327,7 +2311,7 @@
           new_image=FlipImage(*image,exception);
           break;
         }
-      if (LocaleCompare("flop",argv[0]+1) == 0)
+      if (LocaleCompare("flop",option) == 0)
         {
           /*
             Flop image scanlines.
@@ -2336,7 +2320,7 @@
           new_image=FlopImage(*image,exception);
           break;
         }
-      if (LocaleCompare("floodfill",argv[0]+1) == 0)
+      if (LocaleCompare("floodfill",option) == 0)
         {
           PixelInfo
             target;
@@ -2345,7 +2329,7 @@
             Floodfill image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParsePageGeometry(*image,argv[1],&geometry,exception);
+          (void) ParsePageGeometry(*image,args[0],&geometry,exception);
           (void) QueryColorCompliance(argv[2],AllCompliance,&target,
                         exception);
           (void) FloodfillPaintImage(*image,draw_info,&target,geometry.x,
@@ -2353,13 +2337,13 @@
           break;
         }
       /* FUTURE: should be from  ImageOption "format"
-      if (LocaleCompare("format",argv[0]+1) == 0)
+      if (LocaleCompare("format",option) == 0)
         {
-          format=argv[1];
+          format=args[0];
           break;
         }
       */
-      if (LocaleCompare("frame",argv[0]+1) == 0)
+      if (LocaleCompare("frame",option) == 0)
         {
           FrameInfo
             frame_info;
@@ -2368,7 +2352,7 @@
             Surround image with an ornamental border.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParsePageGeometry(*image,argv[1],&geometry,exception);
+          flags=ParsePageGeometry(*image,args[0],&geometry,exception);
           frame_info.width=geometry.width;
           frame_info.height=geometry.height;
           if ((flags & HeightValue) == 0)
@@ -2382,7 +2366,7 @@
           new_image=FrameImage(*image,&frame_info,COMPOSE,exception);
           break;
         }
-      if (LocaleCompare("function",argv[0]+1) == 0)
+      if (LocaleCompare("function",option) == 0)
         {
           char
             *arguments,
@@ -2408,7 +2392,7 @@
           */
           (void) SyncImageSettings(image_info,*image,exception);
           function=(MagickFunction) ParseCommandOption(MagickFunctionOptions,
-            MagickFalse,argv[1]);
+            MagickFalse,args[0]);
           arguments=InterpretImageProperties(image_info,*image,argv[2],
             exception);
           if (arguments == (char *) NULL)
@@ -2446,21 +2430,21 @@
     }
     case 'g':
     {
-      if (LocaleCompare("gamma",argv[0]+1) == 0)
+      if (LocaleCompare("gamma",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           if (*argv[0] == '+')
-            (*image)->gamma=InterpretLocaleValue(argv[1],(char **) NULL);
+            (*image)->gamma=InterpretLocaleValue(args[0],(char **) NULL);
           else
-            (void) GammaImage(*image,InterpretLocaleValue(argv[1],
+            (void) GammaImage(*image,InterpretLocaleValue(args[0],
               (char **) NULL),exception);
           break;
         }
-      if ((LocaleCompare("gaussian-blur",argv[0]+1) == 0) ||
-          (LocaleCompare("gaussian",argv[0]+1) == 0))
+      if ((LocaleCompare("gaussian-blur",option) == 0) ||
+          (LocaleCompare("gaussian",option) == 0))
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -2469,7 +2453,7 @@
             geometry_info.sigma,geometry_info.xi,exception);
           break;
         }
-      if (LocaleCompare("geometry",argv[0]+1) == 0)
+      if (LocaleCompare("geometry",option) == 0)
         {
             /*
               Record Image offset for composition,
@@ -2482,9 +2466,9 @@
                 (*image)->geometry=DestroyString((*image)->geometry);
               break;
             }
-          flags=ParseRegionGeometry(*image,argv[1],&geometry,exception);
+          flags=ParseRegionGeometry(*image,args[0],&geometry,exception);
           if (((flags & XValue) != 0) || ((flags & YValue) != 0))
-            (void) CloneString(&(*image)->geometry,argv[1]);
+            (void) CloneString(&(*image)->geometry,args[0]);
           else
             new_image=ResizeImage(*image,geometry.width,geometry.height,
               (*image)->filter,(*image)->blur,exception);
@@ -2494,16 +2478,16 @@
     }
     case 'h':
     {
-      if (LocaleCompare("highlight-color",argv[0]+1) == 0)
+      if (LocaleCompare("highlight-color",option) == 0)
         {
-          (void) SetImageArtifact(*image,argv[0]+1,argv[1]);
+          (void) SetImageArtifact(*image,option,args[0]);
           break;
         }
       break;
     }
     case 'i':
     {
-      if (LocaleCompare("identify",argv[0]+1) == 0)
+      if (LocaleCompare("identify",option) == 0)
         {
           char
             *text;
@@ -2524,38 +2508,38 @@
           text=DestroyString(text);
           break;
         }
-      if (LocaleCompare("implode",argv[0]+1) == 0)
+      if (LocaleCompare("implode",option) == 0)
         {
           /*
             Implode image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseGeometry(argv[1],&geometry_info);
+          (void) ParseGeometry(args[0],&geometry_info);
           new_image=ImplodeImage(*image,geometry_info.rho,
             interpolate_method,exception);
           break;
         }
-      if (LocaleCompare("interline-spacing",argv[0]+1) == 0)
+      if (LocaleCompare("interline-spacing",option) == 0)
         {
           if (*argv[0] == '+')
             (void) ParseGeometry("0",&geometry_info);
           else
-            (void) ParseGeometry(argv[1],&geometry_info);
+            (void) ParseGeometry(args[0],&geometry_info);
           draw_info->interline_spacing=geometry_info.rho;
           break;
         }
-      if (LocaleCompare("interpolate",argv[0]+1) == 0)
+      if (LocaleCompare("interpolate",option) == 0)
         {
           interpolate_method=(PixelInterpolateMethod) ParseCommandOption(
-            MagickInterpolateOptions,MagickFalse,argv[1]);
+            MagickInterpolateOptions,MagickFalse,args[0]);
           break;
         }
-      if (LocaleCompare("interword-spacing",argv[0]+1) == 0)
+      if (LocaleCompare("interword-spacing",option) == 0)
         {
           if (*argv[0] == '+')
             (void) ParseGeometry("0",&geometry_info);
           else
-            (void) ParseGeometry(argv[1],&geometry_info);
+            (void) ParseGeometry(args[0],&geometry_info);
           draw_info->interword_spacing=geometry_info.rho;
           break;
         }
@@ -2563,12 +2547,12 @@
     }
     case 'k':
     {
-      if (LocaleCompare("kerning",argv[0]+1) == 0)
+      if (LocaleCompare("kerning",option) == 0)
         {
           if (*argv[0] == '+')
             (void) ParseGeometry("0",&geometry_info);
           else
-            (void) ParseGeometry(argv[1],&geometry_info);
+            (void) ParseGeometry(args[0],&geometry_info);
           draw_info->kerning=geometry_info.rho;
           break;
         }
@@ -2576,13 +2560,13 @@
     }
     case 'l':
     {
-      if (LocaleCompare("lat",argv[0]+1) == 0)
+      if (LocaleCompare("lat",option) == 0)
         {
           /*
             Local adaptive threshold image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & PercentValue) != 0)
             geometry_info.xi=(double) QuantumRange*geometry_info.xi/100.0;
           new_image=AdaptiveThresholdImage(*image,(size_t)
@@ -2590,7 +2574,7 @@
             geometry_info.xi,exception);
           break;
         }
-      if (LocaleCompare("level",argv[0]+1) == 0)
+      if (LocaleCompare("level",option) == 0)
         {
           MagickRealType
             black_point,
@@ -2604,7 +2588,7 @@
             Parse levels.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           black_point=geometry_info.rho;
           white_point=(MagickRealType) QuantumRange;
           if ((flags & SigmaValue) != 0)
@@ -2627,7 +2611,7 @@
               exception);
           break;
         }
-      if (LocaleCompare("level-colors",argv[0]+1) == 0)
+      if (LocaleCompare("level-colors",option) == 0)
         {
           char
             token[MaxTextExtent];
@@ -2639,7 +2623,7 @@
             black_point,
             white_point;
 
-          p=(const char *) argv[1];
+          p=(const char *) args[0];
           GetMagickToken(p,&p,token);  /* get black point color */
           if ((isalpha((int) *token) != 0) || ((*token == '#') != 0))
             (void) QueryColorCompliance(token,AllCompliance,
@@ -2666,7 +2650,7 @@
             *argv[0] == '+' ? MagickTrue : MagickFalse,exception);
           break;
         }
-      if (LocaleCompare("linear-stretch",argv[0]+1) == 0)
+      if (LocaleCompare("linear-stretch",option) == 0)
         {
           double
             black_point,
@@ -2676,7 +2660,7 @@
             flags;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           black_point=geometry_info.rho;
           white_point=(MagickRealType) (*image)->columns*(*image)->rows;
           if ((flags & SigmaValue) != 0)
@@ -2692,19 +2676,19 @@
           (void) LinearStretchImage(*image,black_point,white_point,exception);
           break;
         }
-      if (LocaleCompare("linewidth",argv[0]+1) == 0)
+      if (LocaleCompare("linewidth",option) == 0)
         {
-          draw_info->stroke_width=InterpretLocaleValue(argv[1],
+          draw_info->stroke_width=InterpretLocaleValue(args[0],
             (char **) NULL);
           break;
         }
-      if (LocaleCompare("liquid-rescale",argv[0]+1) == 0)
+      if (LocaleCompare("liquid-rescale",option) == 0)
         {
           /*
             Liquid rescale image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseRegionGeometry(*image,argv[1],&geometry,exception);
+          flags=ParseRegionGeometry(*image,args[0],&geometry,exception);
           if ((flags & XValue) == 0)
             geometry.x=1;
           if ((flags & YValue) == 0)
@@ -2713,16 +2697,16 @@
             geometry.height,1.0*geometry.x,1.0*geometry.y,exception);
           break;
         }
-      if (LocaleCompare("lowlight-color",argv[0]+1) == 0)
+      if (LocaleCompare("lowlight-color",option) == 0)
         {
-          (void) SetImageArtifact(*image,argv[0]+1,argv[1]);
+          (void) SetImageArtifact(*image,option,args[0]);
           break;
         }
       break;
     }
     case 'm':
     {
-      if (LocaleCompare("map",argv[0]+1) == 0)
+      if (LocaleCompare("map",option) == 0)
         {
           Image
             *remap_image;
@@ -2733,14 +2717,14 @@
           (void) SyncImageSettings(image_info,*image,exception);
           if (*argv[0] == '+')
             break;
-          remap_image=GetImageCache(image_info,argv[1],exception);
+          remap_image=GetImageCache(image_info,args[0],exception);
           if (remap_image == (Image *) NULL)
             break;
           (void) RemapImage(quantize_info,*image,remap_image,exception);
           remap_image=DestroyImage(remap_image);
           break;
         }
-      if (LocaleCompare("mask",argv[0]+1) == 0)
+      if (LocaleCompare("mask",option) == 0)
         {
           Image
             *mask;
@@ -2757,52 +2741,52 @@
           /*
             Set the image mask.
           */
-          mask=GetImageCache(image_info,argv[1],exception);
+          mask=GetImageCache(image_info,args[0],exception);
           if (mask == (Image *) NULL)
             break;
           (void) SetImageMask(*image,mask,exception);
           mask=DestroyImage(mask);
           break;
         }
-      if (LocaleCompare("matte",argv[0]+1) == 0)
+      if (LocaleCompare("matte",option) == 0)
         {
           (void) SetImageAlphaChannel(*image,(*argv[0] == '-') ?
             SetAlphaChannel : DeactivateAlphaChannel,exception);
           break;
         }
-      if (LocaleCompare("median",argv[0]+1) == 0)
+      if (LocaleCompare("median",option) == 0)
         {
           /*
             Median filter image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=geometry_info.rho;
           new_image=StatisticImage(*image,MedianStatistic,(size_t)
             geometry_info.rho,(size_t) geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("mode",argv[0]+1) == 0)
+      if (LocaleCompare("mode",option) == 0)
         {
           /*
             Mode image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=geometry_info.rho;
           new_image=StatisticImage(*image,ModeStatistic,(size_t)
             geometry_info.rho,(size_t) geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("modulate",argv[0]+1) == 0)
+      if (LocaleCompare("modulate",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ModulateImage(*image,argv[1],exception);
+          (void) ModulateImage(*image,args[0],exception);
           break;
         }
-      if (LocaleCompare("monitor",argv[0]+1) == 0)
+      if (LocaleCompare("monitor",option) == 0)
         {
           /* FUTURE: Why is this a per-image setting? */
           if (*argv[0] == '+')
@@ -2815,13 +2799,13 @@
             (void *) NULL);
           break;
         }
-      if (LocaleCompare("monochrome",argv[0]+1) == 0)
+      if (LocaleCompare("monochrome",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           (void) SetImageType(*image,BilevelType,exception);
           break;
         }
-      if (LocaleCompare("morphology",argv[0]+1) == 0)
+      if (LocaleCompare("morphology",option) == 0)
         {
           char
             token[MaxTextExtent];
@@ -2839,7 +2823,7 @@
             iterations;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          p=argv[1];
+          p=args[0];
           GetMagickToken(p,&p,token);
           method=(MorphologyMethod) ParseCommandOption(
             MagickMorphologyOptions,MagickFalse,token);
@@ -2862,13 +2846,13 @@
           kernel=DestroyKernelInfo(kernel);
           break;
         }
-      if (LocaleCompare("motion-blur",argv[0]+1) == 0)
+      if (LocaleCompare("motion-blur",option) == 0)
         {
           /*
             Motion blur image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           new_image=MotionBlurImage(*image,geometry_info.rho,
@@ -2880,19 +2864,19 @@
     }
     case 'n':
     {
-      if (LocaleCompare("negate",argv[0]+1) == 0)
+      if (LocaleCompare("negate",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           (void) NegateImage(*image,*argv[0] == '+' ? MagickTrue :
             MagickFalse,exception);
           break;
         }
-      if (LocaleCompare("noise",argv[0]+1) == 0)
+      if (LocaleCompare("noise",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           if (*argv[0] == '-')
             {
-              flags=ParseGeometry(argv[1],&geometry_info);
+              flags=ParseGeometry(args[0],&geometry_info);
               if ((flags & SigmaValue) == 0)
                 geometry_info.sigma=geometry_info.rho;
               new_image=StatisticImage(*image,NonpeakStatistic,(size_t)
@@ -2904,12 +2888,12 @@
                 noise;
 
               noise=(NoiseType) ParseCommandOption(MagickNoiseOptions,
-                MagickFalse,argv[1]);
+                MagickFalse,args[0]);
               new_image=AddNoiseImage(*image,noise,exception);
             }
           break;
         }
-      if (LocaleCompare("normalize",argv[0]+1) == 0)
+      if (LocaleCompare("normalize",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           (void) NormalizeImage(*image,exception);
@@ -2919,58 +2903,37 @@
     }
     case 'o':
     {
-      if (LocaleCompare("opaque",argv[0]+1) == 0)
+      if (LocaleCompare("opaque",option) == 0)
         {
           PixelInfo
             target;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) QueryColorCompliance(argv[1],AllCompliance,&target,
+          (void) QueryColorCompliance(args[0],AllCompliance,&target,
                        exception);
           (void) OpaquePaintImage(*image,&target,&fill,*argv[0] == '-' ?
             MagickFalse : MagickTrue,exception);
           break;
         }
-      if (LocaleCompare("ordered-dither",argv[0]+1) == 0)
+      if (LocaleCompare("ordered-dither",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) OrderedPosterizeImage(*image,argv[1],exception);
+          (void) OrderedPosterizeImage(*image,args[0],exception);
           break;
         }
       break;
     }
     case 'p':
     {
-      if (LocaleCompare("paint",argv[0]+1) == 0)
+      if (LocaleCompare("paint",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseGeometry(argv[1],&geometry_info);
+          (void) ParseGeometry(args[0],&geometry_info);
           new_image=OilPaintImage(*image,geometry_info.rho,
             geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("pen",argv[0]+1) == 0)
-        {
-          if (*argv[0] == '+')
-            {
-              (void) QueryColorCompliance("none",AllCompliance,&draw_info->fill,
-                 exception);
-              break;
-            }
-          (void) QueryColorCompliance(argv[1],AllCompliance,&draw_info->fill,
-                 exception);
-          break;
-        }
-      if (LocaleCompare("pointsize",argv[0]+1) == 0)
-        {
-          if (*argv[0] == '+')
-            (void) ParseGeometry("12",&geometry_info);
-          else
-            (void) ParseGeometry(argv[1],&geometry_info);
-          draw_info->pointsize=geometry_info.rho;
-          break;
-        }
-      if (LocaleCompare("polaroid",argv[0]+1) == 0)
+      if (LocaleCompare("polaroid",option) == 0)
         {
           double
             angle;
@@ -2988,24 +2951,24 @@
           if (*argv[0] == '-')
             {
               SetGeometryInfo(&geometry_info);
-              flags=ParseGeometry(argv[1],&geometry_info);
+              flags=ParseGeometry(args[0],&geometry_info);
               angle=geometry_info.rho;
             }
           new_image=PolaroidImage(*image,draw_info,angle,
             interpolate_method,exception);
           break;
         }
-      if (LocaleCompare("posterize",argv[0]+1) == 0)
+      if (LocaleCompare("posterize",option) == 0)
         {
           /*
             Posterize image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) PosterizeImage(*image,StringToUnsignedLong(argv[1]),
+          (void) PosterizeImage(*image,StringToUnsignedLong(args[0]),
             quantize_info->dither,exception);
           break;
         }
-      if (LocaleCompare("preview",argv[0]+1) == 0)
+      if (LocaleCompare("preview",option) == 0)
         {
           PreviewType
             preview_type;
@@ -3018,11 +2981,11 @@
             preview_type=UndefinedPreview;
           else
             preview_type=(PreviewType) ParseCommandOption(
-              MagickPreviewOptions,MagickFalse,argv[1]);
+              MagickPreviewOptions,MagickFalse,args[0]);
           new_image=PreviewImage(*image,preview_type,exception);
           break;
         }
-      if (LocaleCompare("profile",argv[0]+1) == 0)
+      if (LocaleCompare("profile",option) == 0)
         {
           const char
             *name;
@@ -3042,7 +3005,7 @@
               /*
                 Remove a profile from the image.
               */
-              (void) ProfileImage(*image,argv[1],(const unsigned char *)
+              (void) ProfileImage(*image,args[0],(const unsigned char *)
                 NULL,0,exception);
               break;
             }
@@ -3053,7 +3016,7 @@
           profile=GetImageProfile(*image,"iptc");
           if (profile != (StringInfo *) NULL)
             profile_info->profile=(void *) CloneStringInfo(profile);
-          profile_image=GetImageCache(profile_info,argv[1],exception);
+          profile_image=GetImageCache(profile_info,args[0],exception);
           profile_info=DestroyImageInfo(profile_info);
           if (profile_image == (Image *) NULL)
             {
@@ -3061,7 +3024,7 @@
                 *profile;
 
               profile_info=CloneImageInfo(image_info);
-              (void) CopyMagickString(profile_info->filename,argv[1],
+              (void) CopyMagickString(profile_info->filename,args[0],
                 MaxTextExtent);
               profile=FileToStringInfo(profile_info->filename,~0UL,exception);
               if (profile != (StringInfo *) NULL)
@@ -3091,7 +3054,7 @@
     }
     case 'q':
     {
-      if (LocaleCompare("quantize",argv[0]+1) == 0)
+      if (LocaleCompare("quantize",option) == 0)
         {
           if (*argv[0] == '+')
             {
@@ -3099,50 +3062,50 @@
               break;
             }
           quantize_info->colorspace=(ColorspaceType) ParseCommandOption(
-            MagickColorspaceOptions,MagickFalse,argv[1]);
+            MagickColorspaceOptions,MagickFalse,args[0]);
           break;
         }
       break;
     }
     case 'r':
     {
-      if (LocaleCompare("radial-blur",argv[0]+1) == 0)
+      if (LocaleCompare("radial-blur",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           new_image=RadialBlurImage(*image,geometry_info.rho,
             geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("raise",argv[0]+1) == 0)
+      if (LocaleCompare("raise",option) == 0)
         {
-          flags=ParsePageGeometry(*image,argv[1],&geometry,exception);
+          flags=ParsePageGeometry(*image,args[0],&geometry,exception);
           if ((flags & SigmaValue) == 0)
             geometry.height=geometry.width;
           (void) RaiseImage(*image,&geometry,*argv[0] == '-' ? MagickTrue :
             MagickFalse,exception);
           break;
         }
-      if (LocaleCompare("random-threshold",argv[0]+1) == 0)
+      if (LocaleCompare("random-threshold",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) RandomThresholdImage(*image,argv[1],exception);
+          (void) RandomThresholdImage(*image,args[0],exception);
           break;
         }
-      if (LocaleCompare("recolor",argv[0]+1) == 0)
+      if (LocaleCompare("recolor",option) == 0)
         {
           KernelInfo
             *kernel;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          kernel=AcquireKernelInfo(argv[1]);
+          kernel=AcquireKernelInfo(args[0]);
           if (kernel == (KernelInfo *) NULL)
             break;
           new_image=ColorMatrixImage(*image,kernel,exception);
           kernel=DestroyKernelInfo(kernel);
           break;
         }
-      if (LocaleCompare("remap",argv[0]+1) == 0)
+      if (LocaleCompare("remap",option) == 0)
         {
           Image
             *remap_image;
@@ -3150,62 +3113,62 @@
           (void) SyncImageSettings(image_info,*image,exception);
           if (*argv[0] == '+')
             break;
-          remap_image=GetImageCache(image_info,argv[1],exception);
+          remap_image=GetImageCache(image_info,args[0],exception);
           if (remap_image == (Image *) NULL)
             break;
           (void) RemapImage(quantize_info,*image,remap_image,exception);
           remap_image=DestroyImage(remap_image);
           break;
         }
-      if (LocaleCompare("repage",argv[0]+1) == 0)
+      if (LocaleCompare("repage",option) == 0)
         {
           if (*argv[0] == '+')
             {
               (void) ParseAbsoluteGeometry("0x0+0+0",&(*image)->page);
               break;
             }
-          (void) ResetImagePage(*image,argv[1]);
+          (void) ResetImagePage(*image,args[0]);
           break;
         }
-      if (LocaleCompare("resample",argv[0]+1) == 0)
+      if (LocaleCompare("resample",option) == 0)
         {
           /* FUTURE: remove blur - no longer used */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=geometry_info.rho;
           new_image=ResampleImage(*image,geometry_info.rho,
             geometry_info.sigma,(*image)->filter,(*image)->blur,exception);
           break;
         }
-      if (LocaleCompare("resize",argv[0]+1) == 0)
+      if (LocaleCompare("resize",option) == 0)
         {
           /* FUTURE: remove blur argument - no longer used */
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseRegionGeometry(*image,argv[1],&geometry,exception);
+          (void) ParseRegionGeometry(*image,args[0],&geometry,exception);
           new_image=ResizeImage(*image,geometry.width,geometry.height,
             (*image)->filter,(*image)->blur,exception);
           break;
         }
-      if (LocaleCompare("roll",argv[0]+1) == 0)
+      if (LocaleCompare("roll",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParsePageGeometry(*image,argv[1],&geometry,exception);
+          (void) ParsePageGeometry(*image,args[0],&geometry,exception);
           new_image=RollImage(*image,geometry.x,geometry.y,exception);
           break;
         }
-      if (LocaleCompare("rotate",argv[0]+1) == 0)
+      if (LocaleCompare("rotate",option) == 0)
         {
           /* special case rotation flags */
           (void) SyncImageSettings(image_info,*image,exception);
-          if (strchr(argv[1],'>') != (char *) NULL)
+          if (strchr(args[0],'>') != (char *) NULL)
             if ((*image)->columns <= (*image)->rows)
               break;
-          if (strchr(argv[1],'<') != (char *) NULL)
+          if (strchr(args[0],'<') != (char *) NULL)
             if ((*image)->columns >= (*image)->rows)
               break;
 
-          (void) ParseGeometry(argv[1],&geometry_info);
+          (void) ParseGeometry(args[0],&geometry_info);
           new_image=RotateImage(*image,geometry_info.rho,exception);
           break;
         }
@@ -3213,33 +3176,33 @@
     }
     case 's':
     {
-      if (LocaleCompare("sample",argv[0]+1) == 0)
+      if (LocaleCompare("sample",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseRegionGeometry(*image,argv[1],&geometry,exception);
+          (void) ParseRegionGeometry(*image,args[0],&geometry,exception);
           new_image=SampleImage(*image,geometry.width,geometry.height,
             exception);
           break;
         }
-      if (LocaleCompare("scale",argv[0]+1) == 0)
+      if (LocaleCompare("scale",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseRegionGeometry(*image,argv[1],&geometry,exception);
+          (void) ParseRegionGeometry(*image,args[0],&geometry,exception);
           new_image=ScaleImage(*image,geometry.width,geometry.height,
             exception);
           break;
         }
-      if (LocaleCompare("selective-blur",argv[0]+1) == 0)
+      if (LocaleCompare("selective-blur",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & PercentValue) != 0)
             geometry_info.xi=(double) QuantumRange*geometry_info.xi/100.0;
           new_image=SelectiveBlurImage(*image,geometry_info.rho,
             geometry_info.sigma,geometry_info.xi,geometry_info.psi,exception);
           break;
         }
-      if (LocaleCompare("separate",argv[0]+1) == 0)
+      if (LocaleCompare("separate",option) == 0)
         {
           /*
             Break channels into separate images.
@@ -3249,20 +3212,20 @@
           new_image=SeparateImages(*image,exception);
           break;
         }
-      if (LocaleCompare("sepia-tone",argv[0]+1) == 0)
+      if (LocaleCompare("sepia-tone",option) == 0)
         {
           double
             threshold;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          threshold=SiPrefixToDouble(argv[1],QuantumRange);
+          threshold=SiPrefixToDouble(args[0],QuantumRange);
           new_image=SepiaToneImage(*image,threshold,exception);
           break;
         }
-      if (LocaleCompare("segment",argv[0]+1) == 0)
+      if (LocaleCompare("segment",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           (void) SegmentImage(*image,(*image)->colorspace,
@@ -3270,57 +3233,57 @@
             exception);
           break;
         }
-      if (LocaleCompare("set",argv[0]+1) == 0)
+      if (LocaleCompare("set",option) == 0)
         {
           char
             *value;
 
           if (*argv[0] == '+')
             {
-              if (LocaleNCompare(argv[1],"registry:",9) == 0)
-                (void) DeleteImageRegistry(argv[1]+9);
+              if (LocaleNCompare(args[0],"registry:",9) == 0)
+                (void) DeleteImageRegistry(args[0]+9);
               else
-                if (LocaleNCompare(argv[1],"argv[0]:",7) == 0)
+                if (LocaleNCompare(args[0],"argv[0]:",7) == 0)
                   {
-                    (void) DeleteImageOption(image_info,argv[1]+7);
-                    (void) DeleteImageArtifact(*image,argv[1]+7);
+                    (void) DeleteImageOption(image_info,args[0]+7);
+                    (void) DeleteImageArtifact(*image,args[0]+7);
                   }
                 else
-                  (void) DeleteImageProperty(*image,argv[1]);
+                  (void) DeleteImageProperty(*image,args[0]);
               break;
             }
           value=InterpretImageProperties(image_info,*image,argv[2],
             exception);
           if (value == (char *) NULL)
             break;
-          if (LocaleNCompare(argv[1],"registry:",9) == 0)
-            (void) SetImageRegistry(StringRegistryType,argv[1]+9,value,
+          if (LocaleNCompare(args[0],"registry:",9) == 0)
+            (void) SetImageRegistry(StringRegistryType,args[0]+9,value,
               exception);
           else
-            if (LocaleNCompare(argv[1],"option:",7) == 0)
+            if (LocaleNCompare(args[0],"option:",7) == 0)
               {
-                (void) SetImageOption(image_info,argv[1]+7,value);
-                (void) SetImageArtifact(*image,argv[1]+7,value);
+                (void) SetImageOption(image_info,args[0]+7,value);
+                (void) SetImageArtifact(*image,args[0]+7,value);
               }
             else
-              (void) SetImageProperty(*image,argv[1],value,exception);
+              (void) SetImageProperty(*image,args[0],value,exception);
           value=DestroyString(value);
           break;
         }
-      if (LocaleCompare("shade",argv[0]+1) == 0)
+      if (LocaleCompare("shade",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           new_image=ShadeImage(*image,(*argv[0] == '-') ? MagickTrue :
             MagickFalse,geometry_info.rho,geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("shadow",argv[0]+1) == 0)
+      if (LocaleCompare("shadow",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -3332,10 +3295,10 @@
             ceil(geometry_info.psi-0.5),exception);
           break;
         }
-      if (LocaleCompare("sharpen",argv[0]+1) == 0)
+      if (LocaleCompare("sharpen",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -3344,27 +3307,27 @@
             geometry_info.sigma,geometry_info.xi,exception);
           break;
         }
-      if (LocaleCompare("shave",argv[0]+1) == 0)
+      if (LocaleCompare("shave",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParsePageGeometry(*image,argv[1],&geometry,exception);
+          flags=ParsePageGeometry(*image,args[0],&geometry,exception);
           new_image=ShaveImage(*image,&geometry,exception);
           break;
         }
-      if (LocaleCompare("shear",argv[0]+1) == 0)
+      if (LocaleCompare("shear",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=geometry_info.rho;
           new_image=ShearImage(*image,geometry_info.rho,
             geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("sigmoidal-contrast",argv[0]+1) == 0)
+      if (LocaleCompare("sigmoidal-contrast",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=(double) QuantumRange/2.0;
           if ((flags & PercentValue) != 0)
@@ -3375,27 +3338,27 @@
             exception);
           break;
         }
-      if (LocaleCompare("sketch",argv[0]+1) == 0)
+      if (LocaleCompare("sketch",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           new_image=SketchImage(*image,geometry_info.rho,
             geometry_info.sigma,geometry_info.xi,geometry_info.psi,exception);
           break;
         }
-      if (LocaleCompare("solarize",argv[0]+1) == 0)
+      if (LocaleCompare("solarize",option) == 0)
         {
           double
             threshold;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          threshold=SiPrefixToDouble(argv[1],QuantumRange);
+          threshold=SiPrefixToDouble(args[0],QuantumRange);
           (void) SolarizeImage(*image,threshold,exception);
           break;
         }
-      if (LocaleCompare("sparse-color",argv[0]+1) == 0)
+      if (LocaleCompare("sparse-color",option) == 0)
         {
           SparseColorMethod
             method;
@@ -3405,7 +3368,7 @@
 
           (void) SyncImageSettings(image_info,*image,exception);
           method=(SparseColorMethod) ParseCommandOption(
-            MagickSparseColorOptions,MagickFalse,argv[1]);
+            MagickSparseColorOptions,MagickFalse,args[0]);
           arguments=InterpretImageProperties(image_info,*image,argv[2],
             exception);
           if (arguments == (char *) NULL)
@@ -3415,44 +3378,44 @@
           arguments=DestroyString(arguments);
           break;
         }
-      if (LocaleCompare("splice",argv[0]+1) == 0)
+      if (LocaleCompare("splice",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseGravityGeometry(*image,argv[1],&geometry,exception);
+          (void) ParseGravityGeometry(*image,args[0],&geometry,exception);
           new_image=SpliceImage(*image,&geometry,exception);
           break;
         }
-      if (LocaleCompare("spread",argv[0]+1) == 0)
+      if (LocaleCompare("spread",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseGeometry(argv[1],&geometry_info);
+          (void) ParseGeometry(args[0],&geometry_info);
           new_image=SpreadImage(*image,geometry_info.rho,
             interpolate_method,exception);
           break;
         }
-      if (LocaleCompare("statistic",argv[0]+1) == 0)
+      if (LocaleCompare("statistic",option) == 0)
         {
           StatisticType
             type;
 
           (void) SyncImageSettings(image_info,*image,exception);
           type=(StatisticType) ParseCommandOption(MagickStatisticOptions,
-            MagickFalse,argv[1]);
+            MagickFalse,args[0]);
           (void) ParseGeometry(argv[2],&geometry_info);
           new_image=StatisticImage(*image,type,(size_t) geometry_info.rho,
             (size_t) geometry_info.sigma,exception);
           break;
         }
-      if (LocaleCompare("strip",argv[0]+1) == 0)
+      if (LocaleCompare("strip",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           (void) StripImage(*image,exception);
           break;
         }
-      if (LocaleCompare("swirl",argv[0]+1) == 0)
+      if (LocaleCompare("swirl",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseGeometry(argv[1],&geometry_info);
+          (void) ParseGeometry(args[0],&geometry_info);
           new_image=SwirlImage(*image,geometry_info.rho,
             interpolate_method,exception);
           break;
@@ -3461,7 +3424,7 @@
     }
     case 't':
     {
-      if (LocaleCompare("threshold",argv[0]+1) == 0)
+      if (LocaleCompare("threshold",option) == 0)
         {
           double
             threshold;
@@ -3470,71 +3433,71 @@
           if (*argv[0] == '+')
             threshold=(double) QuantumRange/2;
           else
-            threshold=SiPrefixToDouble(argv[1],QuantumRange);
+            threshold=SiPrefixToDouble(args[0],QuantumRange);
           (void) BilevelImage(*image,threshold,exception);
           break;
         }
-      if (LocaleCompare("thumbnail",argv[0]+1) == 0)
+      if (LocaleCompare("thumbnail",option) == 0)
         {
           /*
             Thumbnail image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) ParseRegionGeometry(*image,argv[1],&geometry,exception);
+          (void) ParseRegionGeometry(*image,args[0],&geometry,exception);
           new_image=ThumbnailImage(*image,geometry.width,geometry.height,
             exception);
           break;
         }
-      if (LocaleCompare("tint",argv[0]+1) == 0)
+      if (LocaleCompare("tint",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          new_image=TintImage(*image,argv[1],&fill,exception);
+          new_image=TintImage(*image,args[0],&fill,exception);
           break;
         }
-      if (LocaleCompare("transform",argv[0]+1) == 0)
+      if (LocaleCompare("transform",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           new_image=AffineTransformImage(*image,&draw_info->affine,
             exception);
           break;
         }
-      if (LocaleCompare("transparent",argv[0]+1) == 0)
+      if (LocaleCompare("transparent",option) == 0)
         {
           PixelInfo
             target;
 
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) QueryColorCompliance(argv[1],AllCompliance,&target,
+          (void) QueryColorCompliance(args[0],AllCompliance,&target,
                        exception);
           (void) TransparentPaintImage(*image,&target,(Quantum)
             TransparentAlpha,*argv[0] == '-' ? MagickFalse : MagickTrue,
             exception);
           break;
         }
-      if (LocaleCompare("transpose",argv[0]+1) == 0)
+      if (LocaleCompare("transpose",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           new_image=TransposeImage(*image,exception);
           break;
         }
-      if (LocaleCompare("transverse",argv[0]+1) == 0)
+      if (LocaleCompare("transverse",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           new_image=TransverseImage(*image,exception);
           break;
         }
-      if (LocaleCompare("treedepth",argv[0]+1) == 0)
+      if (LocaleCompare("treedepth",option) == 0)
         {
-          quantize_info->tree_depth=StringToUnsignedLong(argv[1]);
+          quantize_info->tree_depth=StringToUnsignedLong(args[0]);
           break;
         }
-      if (LocaleCompare("trim",argv[0]+1) == 0)
+      if (LocaleCompare("trim",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           new_image=TrimImage(*image,exception);
           break;
         }
-      if (LocaleCompare("type",argv[0]+1) == 0)
+      if (LocaleCompare("type",option) == 0)
         {
           /* Note that "type" setting should have already been defined */
           (void) SyncImageSettings(image_info,*image,exception);
@@ -3545,7 +3508,7 @@
     }
     case 'u':
     {
-      if (LocaleCompare("unique",argv[0]+1) == 0)
+      if (LocaleCompare("unique",option) == 0)
         {
           if (*argv[0] == '+')
             {
@@ -3556,16 +3519,16 @@
           (void) SetImageArtifact(*image,"verbose","true");
           break;
         }
-      if (LocaleCompare("unique-colors",argv[0]+1) == 0)
+      if (LocaleCompare("unique-colors",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
           new_image=UniqueImageColors(*image,exception);
           break;
         }
-      if (LocaleCompare("unsharp",argv[0]+1) == 0)
+      if (LocaleCompare("unsharp",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -3580,19 +3543,19 @@
     }
     case 'v':
     {
-      if (LocaleCompare("verbose",argv[0]+1) == 0)
+      if (LocaleCompare("verbose",option) == 0)
         {
-          (void) SetImageArtifact(*image,argv[0]+1,
+          (void) SetImageArtifact(*image,option,
                  *argv[0] == '+' ? "false" : "true");
           break;
         }
-      if (LocaleCompare("vignette",argv[0]+1) == 0)
+      if (LocaleCompare("vignette",option) == 0)
         {
           /*
             Vignette image.
           */
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           if ((flags & XiValue) == 0)
@@ -3604,7 +3567,7 @@
             ceil(geometry_info.psi-0.5),exception);
           break;
         }
-      if (LocaleCompare("virtual-pixel",argv[0]+1) == 0)
+      if (LocaleCompare("virtual-pixel",option) == 0)
         {
           /* setting already defined in image_info structure */
           SetImageVirtualPixelMethod(*image, image_info->virtual_pixel_method);
@@ -3614,20 +3577,20 @@
     }
     case 'w':
     {
-      if (LocaleCompare("wave",argv[0]+1) == 0)
+      if (LocaleCompare("wave",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          flags=ParseGeometry(argv[1],&geometry_info);
+          flags=ParseGeometry(args[0],&geometry_info);
           if ((flags & SigmaValue) == 0)
             geometry_info.sigma=1.0;
           new_image=WaveImage(*image,geometry_info.rho,
             geometry_info.sigma,interpolate_method,exception);
           break;
         }
-      if (LocaleCompare("white-threshold",argv[0]+1) == 0)
+      if (LocaleCompare("white-threshold",option) == 0)
         {
           (void) SyncImageSettings(image_info,*image,exception);
-          (void) WhiteThresholdImage(*image,argv[1],exception);
+          (void) WhiteThresholdImage(*image,args[0],exception);
           break;
         }
       break;