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! */