diff --git a/MagickCore/option.c b/MagickCore/option.c
index 01e2a2e..2551792 100644
--- a/MagickCore/option.c
+++ b/MagickCore/option.c
@@ -332,6 +332,8 @@
     { "-contrast-stretch", 1L, SimpleOperatorFlag, MagickFalse },
     { "+convolve", 1L, DeprecateOptionFlag, MagickTrue },
     { "-convolve", 1L, SimpleOperatorFlag, MagickFalse },
+    { "+copy", 2L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
+    { "-copy", 2L, ListOperatorFlag | FireOptionFlag, MagickFalse },
     { "+crop", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
     { "-crop", 1L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
     { "+cycle", 1L, DeprecateOptionFlag, MagickTrue },
diff --git a/MagickWand/convert.c b/MagickWand/convert.c
index 45f54ff..690b33d 100644
--- a/MagickWand/convert.c
+++ b/MagickWand/convert.c
@@ -687,10 +687,11 @@
             i++;
             if (i == (ssize_t) argc)
               ThrowConvertException(OptionError,"MissingArgument",option);
-            type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,argv[i]);
+            type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,
+              argv[i]);
             if (type < 0)
-              ThrowConvertException(OptionError,"UnrecognizedAlphaChannelOption",
-                argv[i]);
+              ThrowConvertException(OptionError,
+                "UnrecognizedAlphaChannelOption",argv[i]);
             break;
           }
         if (LocaleCompare("annotate",option+1) == 0)
@@ -1166,6 +1167,23 @@
             kernel_info=DestroyKernelInfo(kernel_info);
             break;
           }
+        if (LocaleCompare("copy",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) argc)
+              ThrowConvertException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowConvertInvalidArgumentException(option,argv[i]);
+            i++;
+            if (i == (ssize_t) argc)
+              ThrowConvertException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowConvertInvalidArgumentException(option,argv[i]);
+            i++;
+            break;
+          }
         if (LocaleCompare("crop",option+1) == 0)
           {
             if (*option == '+')
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index d2918ba..977527a 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -1265,6 +1265,29 @@
             kernel_info=DestroyKernelInfo(kernel_info);
             break;
           }
+        if (LocaleCompare("copy",option+1) == 0)
+          {
+            Image
+              *source_image;
+
+            OffsetInfo
+              offset;
+
+            /*
+              Copy image pixels.
+            */
+            (void) SyncImageSettings(mogrify_info,*image,exception);
+            flags=ParsePageGeometry(*image,argv[i+2],&geometry,exception);
+            offset.x=geometry.x;
+            offset.y=geometry.y;
+            flags=ParsePageGeometry(*image,argv[i+1],&geometry,exception);
+            source_image=(*image);
+            if ((*image)->next != (Image *) NULL)
+              source_image=(*image)->next;
+            status=CopyImagePixels(*image,source_image,&geometry,&offset,
+              exception);
+            break;
+          }
         if (LocaleCompare("crop",option+1) == 0)
           {
             /*
@@ -3539,6 +3562,8 @@
       "-compare             mathematically and visually annotate the difference between an image and its reconstruction",
       "-complex operator    perform complex mathematics on an image sequence",
       "-composite           composite image",
+      "-copy geometry offset",
+      "                     copy pixels from one area of an image to another",
       "-crop geometry       cut out a rectangular region of the image",
       "-deconstruct         break down an image sequence into constituent parts",
       "-evaluate-sequence operator",
@@ -4354,6 +4379,23 @@
             kernel_info=DestroyKernelInfo(kernel_info);
             break;
           }
+        if (LocaleCompare("copy",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) argc)
+              ThrowMogrifyException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowMogrifyInvalidArgumentException(option,argv[i]);
+            i++;
+            if (i == (ssize_t) argc)
+              ThrowMogrifyException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowMogrifyInvalidArgumentException(option,argv[i]);
+            i++;
+            break;
+          }
         if (LocaleCompare("crop",option+1) == 0)
           {
             if (*option == '+')
diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index f23f118..a3bc47e 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -2165,6 +2165,32 @@
           kernel_info=DestroyKernelInfo(kernel_info);
           break;
         }
+        if (LocaleCompare("copy",option+1) == 0)
+          {
+            Image
+              *source_image;
+
+            OffsetInfo
+              offset;
+
+            /*
+              Copy image pixels.
+            */
+            if (IfMagickFalse(IsGeometry(arg1)))
+              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
+            if (IfMagickFalse(IsGeometry(arg2)))
+              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
+            flags=ParsePageGeometry(_image,arg2,&geometry,exception);
+            offset.x=geometry.x;
+            offset.y=geometry.y;
+            flags=ParsePageGeometry(_image,arg1,&geometry,exception);
+            source_image=_image;
+            if (_image->next != (Image *) NULL)
+              source_image=_image->next;
+            (void) CopyImagePixels(_image,source_image,&geometry,&offset,
+              exception);
+            break;
+          }
       if (LocaleCompare("crop",option+1) == 0)
         {
           /* WARNING: This can generate multiple images! */
