diff --git a/wand/mogrify.c b/wand/mogrify.c
index f6a4e83..2afefb8 100644
--- a/wand/mogrify.c
+++ b/wand/mogrify.c
@@ -3774,7 +3774,7 @@
     },
     *sequence_operators[]=
     {
-      "-append              append an image sequence top to bottom",
+      "-append              append an image sequence",
       "-clut                apply a color lookup table to the image",
       "-coalesce            merge a sequence of images",
       "-combine             combine a sequence of images",
@@ -3792,6 +3792,7 @@
       "-process arguments   process the image with a custom image filter",
       "-reverse             reverse image sequence",
       "-separate            separate an image channel into a grayscale image",
+      "-smush geometry      smush an image sequence together",
       "-write filename      write images to this file",
       (char *) NULL
     },
@@ -5964,6 +5965,20 @@
               ThrowMogrifyInvalidArgumentException(option,argv[i]);
             break;
           }
+        if (LocaleCompare("smush",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]);
+            if (i == (ssize_t) argc)
+              ThrowMogrifyException(OptionError,"MissingArgument",option);
+            i++;
+            break;
+          }
         if (LocaleCompare("solarize",option+1) == 0)
           {
             if (*option == '+')
@@ -8358,6 +8373,27 @@
       }
       case 's':
       {
+        if (LocaleCompare("smush",option+1) == 0)
+          {
+            Image
+              *smush_image;
+
+            ssize_t
+              offset;
+
+            (void) SyncImagesSettings(mogrify_info,*images);
+            offset=(ssize_t) StringToLong(argv[i+1]);
+            smush_image=SmushImages(*images,*option == '-' ? MagickTrue :
+              MagickFalse,offset,exception);
+            if (smush_image == (Image *) NULL)
+              {
+                status=MagickFalse;
+                break;
+              }
+            *images=DestroyImageList(*images);
+            *images=smush_image;
+            break;
+          }
         if (LocaleCompare("swap",option+1) == 0)
           {
             Image