diff --git a/MagickWand/magick-image.c b/MagickWand/magick-image.c
index 2da5784..e895448 100644
--- a/MagickWand/magick-image.c
+++ b/MagickWand/magick-image.c
@@ -5790,7 +5790,7 @@
 %  The format of the MagickImplodeImage method is:
 %
 %      MagickBooleanType MagickImplodeImage(MagickWand *wand,
-%        const double radius)
+%        const double radius,const PixelInterpolateMethod method)
 %
 %  A description of each parameter follows:
 %
@@ -5798,9 +5798,11 @@
 %
 %    o amount: Define the extent of the implosion.
 %
+%    o method: the pixel interpolation method.
+%
 */
 WandExport MagickBooleanType MagickImplodeImage(MagickWand *wand,
-  const double amount)
+  const double amount,const PixelInterpolateMethod method)
 {
   Image
     *implode_image;
@@ -5811,7 +5813,7 @@
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  implode_image=ImplodeImage(wand->images,amount,wand->exception);
+  implode_image=ImplodeImage(wand->images,amount,method,wand->exception);
   if (implode_image == (Image *) NULL)
     return(MagickFalse);
   ReplaceImageInList(&wand->images,implode_image);
@@ -11040,7 +11042,8 @@
 %
 %  The format of the MagickSwirlImage method is:
 %
-%      MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees)
+%      MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees,
+%        const PixelInterpolateMethod method)
 %
 %  A description of each parameter follows:
 %
@@ -11048,9 +11051,11 @@
 %
 %    o degrees: Define the tightness of the swirling effect.
 %
+%    o method: the pixel interpolation method.
+%
 */
 WandExport MagickBooleanType MagickSwirlImage(MagickWand *wand,
-  const double degrees)
+  const double degrees,const PixelInterpolateMethod method)
 {
   Image
     *swirl_image;
@@ -11061,7 +11066,7 @@
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  swirl_image=SwirlImage(wand->images,degrees,wand->exception);
+  swirl_image=SwirlImage(wand->images,degrees,method,wand->exception);
   if (swirl_image == (Image *) NULL)
     return(MagickFalse);
   ReplaceImageInList(&wand->images,swirl_image);
@@ -11282,12 +11287,21 @@
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  (void) FormatLocaleString(percent_opaque,MaxTextExtent,
-    "%g,%g,%g,%g",(double) (100.0*QuantumScale*
-    PixelGetRedQuantum(opacity)),(double) (100.0*QuantumScale*
-    PixelGetGreenQuantum(opacity)),(double) (100.0*QuantumScale*
-    PixelGetBlueQuantum(opacity)),(double) (100.0*QuantumScale*
-    PixelGetOpacityQuantum(opacity)));
+  if (wand->images->colorspace != CMYKColorspace)
+    (void) FormatLocaleString(percent_opaque,MaxTextExtent,
+      "%g,%g,%g,%g",(double) (100.0*QuantumScale*
+      PixelGetRedQuantum(opacity)),(double) (100.0*QuantumScale*
+      PixelGetGreenQuantum(opacity)),(double) (100.0*QuantumScale*
+      PixelGetBlueQuantum(opacity)),(double) (100.0*QuantumScale*
+      PixelGetOpacityQuantum(opacity)));
+  else
+    (void) FormatLocaleString(percent_opaque,MaxTextExtent,
+      "%g,%g,%g,%g,%g",(double) (100.0*QuantumScale*
+      PixelGetCyanQuantum(opacity)),(double) (100.0*QuantumScale*
+      PixelGetMagentaQuantum(opacity)),(double) (100.0*QuantumScale*
+      PixelGetYellowQuantum(opacity)),(double) (100.0*QuantumScale*
+      PixelGetBlackQuantum(opacity)),(double) (100.0*QuantumScale*
+      PixelGetOpacityQuantum(opacity)));
   target=PixelGetPixel(tint);
   tint_image=TintImage(wand->images,percent_opaque,&target,wand->exception);
   if (tint_image == (Image *) NULL)
diff --git a/MagickWand/magick-image.h b/MagickWand/magick-image.h
index d5a72fd..9af4101 100644
--- a/MagickWand/magick-image.h
+++ b/MagickWand/magick-image.h
@@ -165,7 +165,7 @@
   MagickHaldClutImage(MagickWand *,const MagickWand *),
   MagickHasNextImage(MagickWand *),
   MagickHasPreviousImage(MagickWand *),
-  MagickImplodeImage(MagickWand *,const double),
+  MagickImplodeImage(MagickWand *,const double,const PixelInterpolateMethod),
   MagickImportImagePixels(MagickWand *,const ssize_t,const ssize_t,const size_t,
     const size_t,const char *,const StorageType,const void *),
   MagickInverseFourierTransformImage(MagickWand *,MagickWand *,
@@ -291,7 +291,7 @@
   MagickStatisticImage(MagickWand *,const StatisticType,const size_t,
     const size_t),
   MagickStripImage(MagickWand *),
-  MagickSwirlImage(MagickWand *,const double),
+  MagickSwirlImage(MagickWand *,const double,const PixelInterpolateMethod),
   MagickTintImage(MagickWand *,const PixelWand *,const PixelWand *),
   MagickTransformImageColorspace(MagickWand *,const ColorspaceType),
   MagickTransposeImage(MagickWand *),
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 6dbdfa4..3424178 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -1792,7 +1792,8 @@
             */
             (void) SyncImageSettings(mogrify_info,*image);
             (void) ParseGeometry(argv[i+1],&geometry_info);
-            mogrify_image=ImplodeImage(*image,geometry_info.rho,exception);
+            mogrify_image=ImplodeImage(*image,geometry_info.rho,
+              interpolate_method,exception);
             break;
           }
         if (LocaleCompare("interline-spacing",option+1) == 0)
@@ -2883,7 +2884,8 @@
             */
             (void) SyncImageSettings(mogrify_info,*image);
             (void) ParseGeometry(argv[i+1],&geometry_info);
-            mogrify_image=SwirlImage(*image,geometry_info.rho,exception);
+            mogrify_image=SwirlImage(*image,geometry_info.rho,
+              interpolate_method,exception);
             break;
           }
         break;