diff --git a/Magick++/lib/Image.cpp b/Magick++/lib/Image.cpp
index 8f20750..9a2c1b0 100644
--- a/Magick++/lib/Image.cpp
+++ b/Magick++/lib/Image.cpp
@@ -1146,8 +1146,12 @@
 // Gamma correct image
 void Magick::Image::gamma ( const double gamma_ )
 {
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
   modifyImage();
-  GammaImage ( image(), gamma_ );
+  GammaImage ( image(), gamma_, &exceptionInfo );
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
 void Magick::Image::gamma ( const double gammaRed_,
@@ -1158,9 +1162,12 @@
   FormatLocaleString( gamma, MaxTextExtent, "%3.6f/%3.6f/%3.6f/",
 		gammaRed_, gammaGreen_, gammaBlue_);
 
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
   modifyImage();
-  GammaImage ( image(), atof(gamma) );
-  throwImageException();
+  GammaImage ( image(), atof(gamma), &exceptionInfo );
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
 // Gaussian blur image
@@ -1361,9 +1368,13 @@
 // only
 void Magick::Image::negate ( const bool grayscale_ )
 {
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
   modifyImage();
-  NegateImage ( image(), grayscale_ == true ? MagickTrue : MagickFalse );
-  throwImageException();
+  NegateImage ( image(), grayscale_ == true ? MagickTrue : MagickFalse, 
+    &exceptionInfo );
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
 // Normalize image
diff --git a/MagickCore/display.c b/MagickCore/display.c
index a059951..5c0b508 100644
--- a/MagickCore/display.c
+++ b/MagickCore/display.c
@@ -7770,7 +7770,7 @@
       */
       XSetCursorState(display,windows,MagickTrue);
       XCheckRefreshWindows(display,windows);
-      (void) GammaImage(*image,atof(factor));
+      (void) GammaImage(*image,atof(factor),&(*image)->exception);
       XSetCursorState(display,windows,MagickFalse);
       if (windows->image.orphan != MagickFalse)
         break;
@@ -7920,7 +7920,7 @@
       */
       XSetCursorState(display,windows,MagickTrue);
       XCheckRefreshWindows(display,windows);
-      (void) NegateImage(*image,MagickFalse);
+      (void) NegateImage(*image,MagickFalse,&(*image)->exception);
       XSetCursorState(display,windows,MagickFalse);
       if (windows->image.orphan != MagickFalse)
         break;
diff --git a/MagickCore/draw.c b/MagickCore/draw.c
index 975f9d5..bdad058 100644
--- a/MagickCore/draw.c
+++ b/MagickCore/draw.c
@@ -1431,7 +1431,7 @@
   (void) QueryColorDatabase("#ffffff",&clone_info->fill,&image->exception);
   clone_info->clip_mask=(char *) NULL;
   status=DrawImage(image->clip_mask,clone_info);
-  status|=NegateImage(image->clip_mask,MagickFalse);
+  status|=NegateImage(image->clip_mask,MagickFalse,&image->exception);
   clone_info=DestroyDrawInfo(clone_info);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(DrawEvent,GetMagickModule(),"end clip-path");
diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index 7a612aa..899005f 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -2469,7 +2469,7 @@
         if (preview_image == (Image *) NULL)
           break;
         gamma+=0.4f;
-        (void) GammaImage(preview_image,gamma);
+        (void) GammaImage(preview_image,gamma,exception);
         (void) FormatLocaleString(label,MaxTextExtent,"gamma %g",gamma);
         break;
       }
diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c
index 7422ada..16b29d0 100644
--- a/MagickCore/enhance.c
+++ b/MagickCore/enhance.c
@@ -1906,7 +1906,8 @@
 %
 %  The format of the GammaImage method is:
 %
-%      MagickBooleanType GammaImage(Image *image,const double gamma)
+%      MagickBooleanType GammaImage(Image *image,const double gamma,
+%        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -1917,16 +1918,14 @@
 %    o gamma: the image gamma.
 %
 */
-MagickExport MagickBooleanType GammaImage(Image *image,const double gamma)
+MagickExport MagickBooleanType GammaImage(Image *image,const double gamma,
+  ExceptionInfo *exception)
 {
 #define GammaCorrectImageTag  "GammaCorrect/Image"
 
   CacheView
     *image_view;
 
-  ExceptionInfo
-    *exception;
-
   MagickBooleanType
     status;
 
@@ -1992,7 +1991,6 @@
   */
   status=MagickTrue;
   progress=0;
-  exception=(&image->exception);
   image_view=AcquireCacheView(image);
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
@@ -3100,7 +3098,7 @@
 %  The format of the NegateImage method is:
 %
 %      MagickBooleanType NegateImage(Image *image,
-%        const MagickBooleanType grayscale)
+%        const MagickBooleanType grayscale,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -3108,18 +3106,17 @@
 %
 %    o grayscale: If MagickTrue, only negate grayscale pixels within the image.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 MagickExport MagickBooleanType NegateImage(Image *image,
-  const MagickBooleanType grayscale)
+  const MagickBooleanType grayscale,ExceptionInfo *exception)
 {
 #define NegateImageTag  "Negate/Image"
 
   CacheView
     *image_view;
 
-  ExceptionInfo
-    *exception;
-
   MagickBooleanType
     status;
 
@@ -3166,7 +3163,6 @@
   */
   status=MagickTrue;
   progress=0;
-  exception=(&image->exception);
   image_view=AcquireCacheView(image);
   if (grayscale != MagickFalse)
     {
diff --git a/MagickCore/enhance.h b/MagickCore/enhance.h
index 9965656..9fbb6f9 100644
--- a/MagickCore/enhance.h
+++ b/MagickCore/enhance.h
@@ -31,7 +31,7 @@
   ContrastImage(Image *,const MagickBooleanType),
   ContrastStretchImage(Image *,const double,const double),
   EqualizeImage(Image *image),
-  GammaImage(Image *,const double),
+  GammaImage(Image *,const double,ExceptionInfo *),
   HaldClutImage(Image *,const Image *),
   LevelImage(Image *,const double,const double,const double),
   LevelizeImage(Image *,const double,const double,const double),
@@ -39,7 +39,7 @@
     const MagickBooleanType),
   LinearStretchImage(Image *,const double,const double),
   ModulateImage(Image *,const char *),
-  NegateImage(Image *,const MagickBooleanType),
+  NegateImage(Image *,const MagickBooleanType,ExceptionInfo *),
   NormalizeImage(Image *),
   SigmoidalContrastImage(Image *,const MagickBooleanType,const double,
     const double);
diff --git a/MagickCore/fx.c b/MagickCore/fx.c
index 836e43f..db0b32b 100644
--- a/MagickCore/fx.c
+++ b/MagickCore/fx.c
@@ -651,7 +651,7 @@
   if (charcoal_image == (Image *) NULL)
     return((Image *) NULL);
   (void) NormalizeImage(charcoal_image);
-  (void) NegateImage(charcoal_image,MagickFalse);
+  (void) NegateImage(charcoal_image,MagickFalse,exception);
   (void) SetImageType(charcoal_image,GrayscaleType);
   return(charcoal_image);
 }
@@ -4334,7 +4334,7 @@
   if (dodge_image == (Image *) NULL)
     return((Image *) NULL);
   (void) NormalizeImage(dodge_image);
-  (void) NegateImage(dodge_image,MagickFalse);
+  (void) NegateImage(dodge_image,MagickFalse,exception);
   (void) TransformImage(&dodge_image,(char *) NULL,"50%");
   sketch_image=CloneImage(image,0,0,MagickTrue,exception);
   if (sketch_image == (Image *) NULL)
diff --git a/MagickCore/image.c b/MagickCore/image.c
index 6978ea9..1a2fcb0 100644
--- a/MagickCore/image.c
+++ b/MagickCore/image.c
@@ -699,7 +699,7 @@
         return(MagickFalse);
     }
   if (inside == MagickFalse)
-    (void) NegateImage(clip_mask,MagickFalse);
+    (void) NegateImage(clip_mask,MagickFalse,&image->exception);
   (void) FormatLocaleString(clip_mask->magick_filename,MaxTextExtent,
     "8BIM:1999,2998:%s\nPS",pathname);
   (void) SetImageClipMask(image,clip_mask);
diff --git a/MagickCore/montage.c b/MagickCore/montage.c
index 26050b9..ce28374 100644
--- a/MagickCore/montage.c
+++ b/MagickCore/montage.c
@@ -759,7 +759,7 @@
               (image->compose == DstOutCompositeOp))
             {
               SetPixelChannelMap(image,AlphaChannel);
-              (void) NegateImage(image,MagickFalse);
+              (void) NegateImage(image,MagickFalse,exception);
               SetPixelChannelMap(image,DefaultChannels);
             }
         }
diff --git a/MagickCore/version.h b/MagickCore/version.h
index f2afe07..6f2323e 100644
--- a/MagickCore/version.h
+++ b/MagickCore/version.h
@@ -34,8 +34,8 @@
 #define MagickLibAddendum  "-0"
 #define MagickLibInterface  5
 #define MagickLibMinInterface  5
-#define MagickReleaseDate  "2011-07-18"
-#define MagickChangeDate   "20110701"
+#define MagickReleaseDate  "2011-07-23"
+#define MagickChangeDate   "20110721"
 #define MagickAuthoritativeURL  "http://www.imagemagick.org"
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
 #define MagickOpenMPFeature  "OpenMP "
diff --git a/MagickWand/composite.c b/MagickWand/composite.c
index ab4674b..91fff18 100644
--- a/MagickWand/composite.c
+++ b/MagickWand/composite.c
@@ -1647,7 +1647,7 @@
             Set a blending mask for the composition.
           */
           images->mask=mask_image;
-          (void) NegateImage(images->mask,MagickFalse);
+          (void) NegateImage(images->mask,MagickFalse,exception);
         }
     }
   status&=CompositeImageList(image_info,&images,composite_image,
diff --git a/MagickWand/magick-image.c b/MagickWand/magick-image.c
index 4582b6c..3ed737c 100644
--- a/MagickWand/magick-image.c
+++ b/MagickWand/magick-image.c
@@ -3336,9 +3336,7 @@
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  status=GammaImage(wand->images,gamma);
-  if (status == MagickFalse)
-    InheritException(wand->exception,&wand->images->exception);
+  status=GammaImage(wand->images,gamma,wand->exception);
   return(status);
 }
 
@@ -6672,9 +6670,7 @@
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  status=NegateImage(wand->images,gray);
-  if (status == MagickFalse)
-    InheritException(wand->exception,&wand->images->exception);
+  status=NegateImage(wand->images,gray,wand->exception);
   return(status);
 }
 
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 7eaf121..c3fc353 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -1688,11 +1688,8 @@
             if (*option == '+')
               (*image)->gamma=InterpretLocaleValue(argv[i+1],(char **) NULL);
             else
-              {
-                (void) GammaImage(*image,InterpretLocaleValue(argv[i+1],
-                  (char **) NULL));
-                InheritException(exception,&(*image)->exception);
-              }
+              (void) GammaImage(*image,InterpretLocaleValue(argv[i+1],
+                (char **) NULL),exception);
             break;
           }
         if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
@@ -2126,8 +2123,7 @@
           {
             (void) SyncImageSettings(mogrify_info,*image);
             (void) NegateImage(*image,*option == '+' ? MagickTrue :
-              MagickFalse);
-            InheritException(exception,&(*image)->exception);
+              MagickFalse,exception);
             break;
           }
         if (LocaleCompare("noise",option+1) == 0)
@@ -7420,7 +7416,7 @@
                     */
                     /* POSIBLE ERROR; what if image->mask already set */
                     image->mask=mask_image;
-                    (void) NegateImage(image->mask,MagickFalse);
+                    (void) NegateImage(image->mask,MagickFalse,exception);
                   }
               }
             (void) CompositeImage(image,image->compose,composite_image,
diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs
index 60e3b9c..a5be949 100644
--- a/PerlMagick/Magick.xs
+++ b/PerlMagick/Magick.xs
@@ -8340,7 +8340,7 @@
                   */
                   image->mask=CloneImage(argument_list[10].image_reference,0,0,
                     MagickTrue,&image->exception);
-                  (void) NegateImage(image->mask,MagickFalse);
+                  (void) NegateImage(image->mask,MagickFalse,exception);
                 }
             }
           if (attribute_flag[11] != 0) /* channel */
@@ -8664,7 +8664,7 @@
               argument_list[0].string_reference=message;
             }
           (void) GammaImage(image,InterpretLocaleValue(
-            argument_list[0].string_reference,(char **) NULL));
+            argument_list[0].string_reference,(char **) NULL),exception);
           break;
         }
         case 41:  /* Map */
@@ -8782,7 +8782,7 @@
             channel=(ChannelType) argument_list[1].integer_reference;
           PushPixelChannelMap(image,channel);
           (void) NegateImage(image,argument_list[0].integer_reference != 0 ?
-            MagickTrue : MagickFalse);
+            MagickTrue : MagickFalse,exception);
           PopPixelChannelMap(image);
           break;
         }
@@ -10043,7 +10043,7 @@
             }
           image->clip_mask=CloneImage(argument_list[0].image_reference,0,0,
             MagickTrue,exception);
-          (void) NegateImage(image->clip_mask,MagickFalse);
+          (void) NegateImage(image->clip_mask,MagickFalse,exception);
           break;
         }
         case 107:  /* LinearStretch */
@@ -10085,7 +10085,7 @@
             }
           image->mask=CloneImage(argument_list[0].image_reference,0,0,
             MagickTrue,exception);
-          (void) NegateImage(image->mask,MagickFalse);
+          (void) NegateImage(image->mask,MagickFalse,exception);
           break;
         }
         case 110:  /* Polaroid */
diff --git a/coders/msl.c b/coders/msl.c
index 3657506..91a26b5 100644
--- a/coders/msl.c
+++ b/coders/msl.c
@@ -3229,7 +3229,8 @@
           if (*gamma == '\0')
             (void) FormatLocaleString(gamma,MaxTextExtent,"%g,%g,%g",
               (double) pixel.red,(double) pixel.green,(double) pixel.blue);
-          (void) GammaImage(msl_info->image[n],atof(gamma));
+          (void) GammaImage(msl_info->image[n],atof(gamma),
+            &msl_info->image[n]->exception);
           break;
         }
       else if (LocaleCompare((const char *) tag,"get") == 0)
@@ -4037,7 +4038,8 @@
               }
             }
           PushPixelChannelMap(msl_info->image[n],channel);
-          (void) NegateImage(msl_info->image[n],gray);
+          (void) NegateImage(msl_info->image[n],gray,
+            &msl_info->image[n]->exception);
           PopPixelChannelMap(msl_info->image[n]);
           break;
         }
diff --git a/coders/psd.c b/coders/psd.c
index 6b3e793..557b937 100644
--- a/coders/psd.c
+++ b/coders/psd.c
@@ -1324,7 +1324,7 @@
                 }
               }
             if (layer_info[i].image->colorspace == CMYKColorspace)
-              (void) NegateImage(layer_info[i].image,MagickFalse);
+              (void) NegateImage(layer_info[i].image,MagickFalse,exception);
             status=SetImageProgress(image,LoadImagesTag,i,(MagickSizeType)
               number_layers);
             if (status == MagickFalse)
@@ -1432,7 +1432,7 @@
   if (compression == 1)
     offsets=(MagickOffsetType *) RelinquishMagickMemory(offsets);
   if (image->colorspace == CMYKColorspace)
-    (void) NegateImage(image,MagickFalse);
+    (void) NegateImage(image,MagickFalse,exception);
   (void) CloseBlob(image);
   return(GetFirstImageInList(image));
 }
@@ -1835,7 +1835,7 @@
     else
       {
         if (next_image->colorspace == CMYKColorspace)
-          (void) NegateImage(next_image,MagickFalse);
+          (void) NegateImage(next_image,MagickFalse,&next_image->exception);
         if (next_image->compression == RLECompression)
           {
             /*
@@ -1879,7 +1879,7 @@
             MagickFalse);
         (void) SetImageProgress(image,SaveImagesTag,5,6);
         if (next_image->colorspace == CMYKColorspace)
-          (void) NegateImage(next_image,MagickFalse);
+          (void) NegateImage(next_image,MagickFalse,&next_image->exception);
       }
   if (next_image->compression == RLECompression)
     compact_pixels=(unsigned char *) RelinquishMagickMemory(compact_pixels);