diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index 8048026..1819b89 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -572,46 +572,40 @@
         {
           image_info->channel=(ChannelType) (
                IfSetOption ? ParseChannelOption(argv[1]) : DefaultChannels );
-          /* this is also a SimpleImageOperator ??? why ??? */
-          break;
-        }
-      if (LocaleCompare("colors",option) == 0)
-        {
-          /* Why is this saved */
-          image_info->colors=StringToUnsignedLong(argv[1]);
+          /* This is also a SimpleImageOperator */
           break;
         }
       if (LocaleCompare("colorspace",option) == 0)
         {
-          if (*argv[0] == '+')
+          /* This is also a SimpleImageOperator */
+          if (IfSetOption)
             {
-              image_info->colorspace=UndefinedColorspace;
-              (void) SetImageOption(image_info,option,"undefined");
+              image_info->colorspace=(ColorspaceType) ParseCommandOption(
+                MagickColorspaceOptions,MagickFalse,argv[1]);
               break;
             }
-          image_info->colorspace=(ColorspaceType) ParseCommandOption(
-            MagickColorspaceOptions,MagickFalse,argv[1]);
-          (void) SetImageOption(image_info,option,argv[1]);
+          image_info->colorspace=UndefinedColorspace;
+          (void) SetImageOption(image_info,option,"undefined");
           break;
         }
       if (LocaleCompare("comment",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) DeleteImageOption(image_info,option);
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          (void) SetImageOption(image_info,option,
+               IfSetOption ? argv[1] : DeleteOption);
           break;
         }
       if (LocaleCompare("compose",option) == 0)
         {
-          if (*argv[0] == '+')
-            {
-              (void) SetImageOption(image_info,option,"undefined");
-              break;
-            }
-          (void) SetImageOption(image_info,option,argv[1]);
+          /* FUTURE: What should be used?  image_info  or ImageOption ???
+             The former is more efficent, the later cristy prefers!
+          */
+          const char
+            *value;
+
+          value = IfSetOption ? argv[1] : "undefined";
+          (void) SetImageOption(image_info,option,value);
+          image_info->compose=(CompositeOperator) ParseCommandOption(
+               MagickComposeOptions,MagickFalse,value);
           break;
         }
       if (LocaleCompare("compress",option) == 0)
@@ -1986,6 +1980,8 @@
           ColorspaceType
             colorspace;
 
+          /* FUTURE: default colorspace should be sRGB! unless linear is set */
+          /* This is a Image Setting, which has already been applied */
           (void) SyncImageSettings(image_info,*image);
           if (*argv[0] == '+')
             {
@@ -1993,19 +1989,13 @@
               InheritException(exception,&(*image)->exception);
               break;
             }
-          colorspace=(ColorspaceType) ParseCommandOption(
-            MagickColorspaceOptions,MagickFalse,argv[1]);
+          /* colorspace=(ColorspaceType) ParseCommandOption(
+              MagickColorspaceOptions,MagickFalse,argv[1]); */
+          colorspace=image_info->colorspace;
           (void) TransformImageColorspace(*image,colorspace);
           InheritException(exception,&(*image)->exception);
           break;
         }
-      if (LocaleCompare("compose",argv[0]+1) == 0)
-        {
-          (void) SyncImageSettings(image_info,*image);
-          compose=(CompositeOperator) ParseCommandOption(MagickComposeOptions,
-            MagickFalse,argv[1]);
-          break;
-        }
       if (LocaleCompare("contrast",argv[0]+1) == 0)
         {
           (void) SyncImageSettings(image_info,*image);
