diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs
index 19a1253..f073bf7 100644
--- a/PerlMagick/Magick.xs
+++ b/PerlMagick/Magick.xs
@@ -1700,7 +1700,7 @@
           if (SvPOK(sval))
             mask=SetupList(aTHX_ SvRV(sval),&info,(SV ***) NULL,exception);
           for ( ; image; image=image->next)
-            SetImageMask(image,mask,exception);
+            SetImageMask(image,mask,ReadPixelMask,exception);
           break;
         }
       if (LocaleCompare(attribute,"mattecolor") == 0)
@@ -1913,6 +1913,18 @@
     case 'R':
     case 'r':
     {
+      if (LocaleCompare(attribute,"read-mask") == 0)
+        {
+          Image
+            *mask;
+
+          mask=(Image *) NULL;
+          if (SvPOK(sval))
+            mask=SetupList(aTHX_ SvRV(sval),&info,(SV ***) NULL,exception);
+          for ( ; image; image=image->next)
+            SetImageMask(image,mask,ReadPixelMask,exception);
+          break;
+        }
       if (LocaleCompare(attribute,"red-primary") == 0)
         {
           for ( ; image; image=image->next)
@@ -2228,6 +2240,18 @@
           }
           break;
         }
+      if (LocaleCompare(attribute,"write-mask") == 0)
+        {
+          Image
+            *mask;
+
+          mask=(Image *) NULL;
+          if (SvPOK(sval))
+            mask=SetupList(aTHX_ SvRV(sval),&info,(SV ***) NULL,exception);
+          for ( ; image; image=image->next)
+            SetImageMask(image,mask,WritePixelMask,exception);
+          break;
+        }
       if (info)
         SetImageOption(info->image_info,attribute,SvPV(sval,na));
       for ( ; image; image=image->next)
diff --git a/PerlMagick/quantum/quantum.xs.in b/PerlMagick/quantum/quantum.xs.in
index 4556774..76a20be 100644
--- a/PerlMagick/quantum/quantum.xs.in
+++ b/PerlMagick/quantum/quantum.xs.in
@@ -1245,7 +1245,7 @@
           if (SvPOK(sval))
             clip_mask=SetupList(aTHX_ SvRV(sval),&info,(SV ***) NULL,exception);
           for ( ; image; image=image->next)
-            SetImageMask(image,clip_mask,exception);
+            SetImageMask(image,clip_mask,ReadPixelMask,exception);
           break;
         }
       if (LocaleNCompare(attribute,"colormap",8) == 0)
@@ -1700,7 +1700,7 @@
           if (SvPOK(sval))
             mask=SetupList(aTHX_ SvRV(sval),&info,(SV ***) NULL,exception);
           for ( ; image; image=image->next)
-            SetImageMask(image,mask,exception);
+            SetImageMask(image,mask,ReadPixelMask,exception);
           break;
         }
       if (LocaleCompare(attribute,"mattecolor") == 0)
@@ -1913,6 +1913,18 @@
     case 'R':
     case 'r':
     {
+      if (LocaleCompare(attribute,"read-mask") == 0)
+        {
+          Image
+            *mask;
+
+          mask=(Image *) NULL;
+          if (SvPOK(sval))
+            mask=SetupList(aTHX_ SvRV(sval),&info,(SV ***) NULL,exception);
+          for ( ; image; image=image->next)
+            SetImageMask(image,mask,ReadPixelMask,exception);
+          break;
+        }
       if (LocaleCompare(attribute,"red-primary") == 0)
         {
           for ( ; image; image=image->next)
@@ -2228,6 +2240,18 @@
           }
           break;
         }
+      if (LocaleCompare(attribute,"write-mask") == 0)
+        {
+          Image
+            *mask;
+
+          mask=(Image *) NULL;
+          if (SvPOK(sval))
+            mask=SetupList(aTHX_ SvRV(sval),&info,(SV ***) NULL,exception);
+          for ( ; image; image=image->next)
+            SetImageMask(image,mask,WritePixelMask,exception);
+          break;
+        }
       if (info)
         SetImageOption(info->image_info,attribute,SvPV(sval,na));
       for ( ; image; image=image->next)