diff --git a/wand/mogrify.c b/wand/mogrify.c
index 7f07c65..2b869ef 100644
--- a/wand/mogrify.c
+++ b/wand/mogrify.c
@@ -3933,6 +3933,8 @@
     *stack_operators[]=
     {
       "-delete index        delete the image from the image sequence",
+      "-duplicate count[,index]",
+      "                     duplicate an image one or more times",
       "-insert index        insert last image into the image sequence",
       "-swap indexes        swap two images in the image sequence",
       (char *) NULL
@@ -4659,6 +4661,17 @@
               ThrowMogrifyInvalidArgumentException(option,argv[i]);
             break;
           }
+        if (LocaleCompare("delete",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) (argc-1))
+              ThrowMogrifyException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowMogrifyInvalidArgumentException(option,argv[i]);
+            break;
+          }
         if (LocaleCompare("density",option+1) == 0)
           {
             if (*option == '+')
@@ -4780,6 +4793,17 @@
               ThrowMogrifyException(OptionError,"MissingArgument",option);
             break;
           }
+        if (LocaleCompare("duplicate",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) (argc-1))
+              ThrowMogrifyException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowMogrifyInvalidArgumentException(option,argv[i]);
+            break;
+          }
         if (LocaleCompare("duration",option+1) == 0)
           {
             if (*option == '+')
@@ -6147,6 +6171,17 @@
                 argv[i]);
             break;
           }
+        if (LocaleCompare("swap",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) (argc-1))
+              ThrowMogrifyException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowMogrifyInvalidArgumentException(option,argv[i]);
+            break;
+          }
         if (LocaleCompare("swirl",option+1) == 0)
           {
             if (*option == '+')
@@ -7919,6 +7954,20 @@
               MagickDitherOptions,MagickFalse,argv[i+1]);
             break;
           }
+        if (LocaleCompare("duplicate",option+1) == 0)
+          {
+            Image
+              *duplicate_images;
+
+            if (*option == '+')
+              duplicate_images=DuplicateImages(images,"-1",exception);
+            else
+              duplicate_images=DuplicateImages(images,argv[i+1],exception);
+            if (*images != (Image *) NULL)
+              *images=DestroyImage(*images);
+            *images=duplicate_images;
+            break;
+          }
         break;
       }
       case 'e':