diff --git a/Magick++/lib/Image.cpp b/Magick++/lib/Image.cpp
index 7e64bf0..86d0122 100644
--- a/Magick++/lib/Image.cpp
+++ b/Magick++/lib/Image.cpp
@@ -330,7 +330,7 @@
   GetExceptionInfo( &exceptionInfo );
   MagickCore::Image* newImage =
     AddNoiseImage ( image(),
-		    noiseType_,
+		    noiseType_, 1.0,
 		    &exceptionInfo );
   replaceImage( newImage );
   throwException( exceptionInfo );
@@ -345,7 +345,7 @@
   ChannelType channel_mask = SetPixelChannelMask( image(), channel_);
   MagickCore::Image* newImage =
     AddNoiseImage ( image(),
-                           noiseType_,
+                           noiseType_, 1.0,
                            &exceptionInfo );
   (void) SetPixelChannelMap( image(), channel_mask );
   replaceImage( newImage );
diff --git a/MagickCore/display.c b/MagickCore/display.c
index 8b24ee6..aa73468 100644
--- a/MagickCore/display.c
+++ b/MagickCore/display.c
@@ -8199,7 +8199,7 @@
       XSetCursorState(display,windows,MagickTrue);
       XCheckRefreshWindows(display,windows);
       noise_image=AddNoiseImage(*image,(NoiseType) ParseCommandOption(
-        MagickNoiseOptions,MagickFalse,noise_type),exception);
+        MagickNoiseOptions,MagickFalse,noise_type),1.0,exception);
       if (noise_image != (Image *) NULL)
         {
           *image=DestroyImage(*image);
diff --git a/MagickCore/fx.c b/MagickCore/fx.c
index 183d2d1..bdb23a6 100644
--- a/MagickCore/fx.c
+++ b/MagickCore/fx.c
@@ -289,7 +289,7 @@
 %  The format of the AddNoiseImage method is:
 %
 %      Image *AddNoiseImage(const Image *image,const NoiseType noise_type,
-%        ExceptionInfo *exception)
+%        const double attenuate,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -300,10 +300,13 @@
 %    o noise_type:  The type of noise: Uniform, Gaussian, Multiplicative,
 %      Impulse, Laplacian, or Poisson.
 %
+%    o attenuate:  attenuate the random distribution.
+%
 %    o exception: return any errors or warnings in this structure.
 %
 */
-MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type,  ExceptionInfo *exception)
+MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type,
+  const double attenuate,ExceptionInfo *exception)
 {
 #define AddNoiseImageTag  "AddNoise/Image"
 
@@ -311,9 +314,6 @@
     *image_view,
     *noise_view;
 
-  const char
-    *option;
-
   Image
     *noise_image;
 
@@ -323,9 +323,6 @@
   MagickOffsetType
     progress;
 
-  MagickRealType
-    attenuate;
-
   RandomInfo
     **restrict random_info;
 
@@ -352,10 +349,6 @@
   /*
     Add noise in each row.
   */
-  attenuate=1.0;
-  option=GetImageArtifact(image,"attenuate");
-  if (option != (char *) NULL)
-    attenuate=InterpretLocaleValue(option,(char **) NULL);
   status=MagickTrue;
   progress=0;
   random_info=AcquireRandomInfoThreadSet();
diff --git a/MagickCore/fx.h b/MagickCore/fx.h
index c36bd8f..c96aa7c 100644
--- a/MagickCore/fx.h
+++ b/MagickCore/fx.h
@@ -37,7 +37,7 @@
 } NoiseType;
 
 extern MagickExport Image
-  *AddNoiseImage(const Image *,const NoiseType,ExceptionInfo *),
+  *AddNoiseImage(const Image *,const NoiseType,const double,ExceptionInfo *),
   *BlueShiftImage(const Image *,const double,ExceptionInfo *),
   *CharcoalImage(const Image *,const double,const double,const double,
     ExceptionInfo *),
diff --git a/MagickCore/gem-private.h b/MagickCore/gem-private.h
index 3125024..707720b 100644
--- a/MagickCore/gem-private.h
+++ b/MagickCore/gem-private.h
@@ -24,7 +24,7 @@
 
 extern MagickPrivate double
   GenerateDifferentialNoise(RandomInfo *,const Quantum,const NoiseType,
-    const MagickRealType);
+    const double);
 
 extern MagickPrivate size_t
   GetOptimalKernelWidth(const double,const double),
diff --git a/MagickCore/gem.c b/MagickCore/gem.c
index dd7a0b0..f8cc395 100644
--- a/MagickCore/gem.c
+++ b/MagickCore/gem.c
@@ -591,8 +591,7 @@
 %  The format of the GenerateDifferentialNoise method is:
 %
 %      double GenerateDifferentialNoise(RandomInfo *random_info,
-%        const Quantum pixel,const NoiseType noise_type,
-%        const MagickRealType attenuate)
+%        const Quantum pixel,const NoiseType noise_type,const double attenuate)
 %
 %  A description of each parameter follows:
 %
@@ -606,7 +605,7 @@
 %
 */
 MagickPrivate double GenerateDifferentialNoise(RandomInfo *random_info,
-  const Quantum pixel,const NoiseType noise_type,const MagickRealType attenuate)
+  const Quantum pixel,const NoiseType noise_type,const double attenuate)
 {
 #define NoiseEpsilon  (attenuate*1.0e-5)
 #define SigmaUniform  (attenuate*4.0)
@@ -624,6 +623,7 @@
     sigma;
 
   alpha=GetPseudoRandomValue(random_info);
+  alpha=1.0;
   switch (noise_type)
   {
     case UniformNoise:
diff --git a/MagickWand/magick-image.c b/MagickWand/magick-image.c
index bac02f6..85fc280 100644
--- a/MagickWand/magick-image.c
+++ b/MagickWand/magick-image.c
@@ -492,7 +492,7 @@
 %  The format of the MagickAddNoiseImage method is:
 %
 %      MagickBooleanType MagickAddNoiseImage(MagickWand *wand,
-%        const NoiseType noise_type)
+%        const NoiseType noise_type,const double attenuate)
 %
 %  A description of each parameter follows:
 %
@@ -501,9 +501,11 @@
 %    o noise_type:  The type of noise: Uniform, Gaussian, Multiplicative,
 %      Impulse, Laplacian, or Poisson.
 %
+%    o attenuate:  attenuate the random distribution.
+%
 */
 WandExport MagickBooleanType MagickAddNoiseImage(MagickWand *wand,
-  const NoiseType noise_type)
+  const NoiseType noise_type,const double attenuate)
 {
   Image
     *noise_image;
@@ -514,7 +516,7 @@
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  noise_image=AddNoiseImage(wand->images,noise_type,wand->exception);
+  noise_image=AddNoiseImage(wand->images,noise_type,attenuate,wand->exception);
   if (noise_image == (Image *) NULL)
     return(MagickFalse);
   ReplaceImageInList(&wand->images,noise_image);
diff --git a/MagickWand/magick-image.h b/MagickWand/magick-image.h
index 06fb6c4..60a42f8 100644
--- a/MagickWand/magick-image.h
+++ b/MagickWand/magick-image.h
@@ -79,7 +79,7 @@
   MagickAdaptiveThresholdImage(MagickWand *,const size_t,const size_t,
     const double),
   MagickAddImage(MagickWand *,const MagickWand *),
-  MagickAddNoiseImage(MagickWand *,const NoiseType),
+  MagickAddNoiseImage(MagickWand *,const NoiseType,const double),
   MagickAffineTransformImage(MagickWand *,const DrawingWand *),
   MagickAnnotateImage(MagickWand *,const DrawingWand *,const double,
     const double,const double,const char *),
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 31503ef..a4d1e2f 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -625,6 +625,9 @@
     *format,
     *option;
 
+  double
+    attenuate;
+
   DrawInfo
     *draw_info;
 
@@ -676,6 +679,7 @@
   SetGeometryInfo(&geometry_info);
   GetPixelInfo(*image,&fill);
   SetPixelInfoPacket(*image,&(*image)->background_color,&fill);
+  attenuate=1.0;
   compose=(*image)->compose;
   interpolate_method=UndefinedInterpolatePixel;
   channel=mogrify_info->channel;
@@ -813,6 +817,16 @@
               MagickFalse;
             break;
           }
+        if (LocaleCompare("attenuate",option+1) == 0)
+          {
+            if (*option == '+')
+              {
+                attenuate=1.0;
+                break;
+              }
+            attenuate=InterpretLocaleValue(argv[i+1],(char **) NULL);
+            break;
+          }
         if (LocaleCompare("auto-gamma",option+1) == 0)
           {
             /*
@@ -2186,7 +2200,7 @@
 
                 noise=(NoiseType) ParseCommandOption(MagickNoiseOptions,
                   MagickFalse,argv[i+1]);
-                mogrify_image=AddNoiseImage(*image,noise,exception);
+                mogrify_image=AddNoiseImage(*image,noise,attenuate,exception);
               }
             break;
           }
@@ -6159,14 +6173,6 @@
             image_info->antialias=(*option == '-') ? MagickTrue : MagickFalse;
             break;
           }
-        if (LocaleCompare("attenuate",option+1) == 0)
-          {
-            if (*option == '+')
-              (void) DeleteImageOption(image_info,option+1);
-            else
-              (void) SetImageOption(image_info,option+1,argv[i+1]);
-            break;
-          }
         if (LocaleCompare("authenticate",option+1) == 0)
           {
             if (*option == '+')
diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index dde41e6..7c45972 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -1556,6 +1556,9 @@
   const char
     *format;
 
+  double
+    attenuate;
+
   DrawInfo
     *draw_info;
 
@@ -1590,6 +1593,7 @@
   SetGeometryInfo(&geometry_info);
   GetPixelInfo(*image,&fill);
   SetPixelInfoPacket(*image,&(*image)->background_color,&fill);
+  attenuate=1.0;
   channel=image_info->channel;
   format=GetImageOption(image_info,"format");
 
@@ -1679,6 +1683,16 @@
           (void) AnnotateImage(*image,draw_info,exception);
           break;
         }
+      if (LocaleCompare("attenuate",option+1) == 0)
+        {
+          if (*option == '+')
+            {
+              attenuate=1.0;
+              break;
+            }
+          attenuate=InterpretLocaleValue(argv[i+1],(char **) NULL);
+          break;
+        }
       if (LocaleCompare("auto-gamma",argv[0]+1) == 0)
         {
           /*
@@ -2989,7 +3003,7 @@
 
               noise=(NoiseType) ParseCommandOption(MagickNoiseOptions,
                 MagickFalse,argv[1]);
-              new_image=AddNoiseImage(*image,noise,exception);
+              new_image=AddNoiseImage(*image,noise,attenuate,exception);
             }
           break;
         }
diff --git a/coders/msl.c b/coders/msl.c
index 6fea30e..f336015 100644
--- a/coders/msl.c
+++ b/coders/msl.c
@@ -742,7 +742,7 @@
               }
             }
           channel_mask=SetPixelChannelMask(msl_info->image[n],channel);
-          noise_image=AddNoiseImage(msl_info->image[n],noise,
+          noise_image=AddNoiseImage(msl_info->image[n],noise,1.0,
             &msl_info->image[n]->exception);
           (void) SetPixelChannelMap(msl_info->image[n],channel_mask);
           if (noise_image == (Image *) NULL)