diff --git a/fuzz/fuzz_iccprofile_transform.c b/fuzz/fuzz_iccprofile_transform.c
index c71ba20..829bb03 100644
--- a/fuzz/fuzz_iccprofile_transform.c
+++ b/fuzz/fuzz_iccprofile_transform.c
@@ -82,9 +82,9 @@
         uint8_t src[256],
                 dst[256];
         for (skcms_AlphaFormat srcAlpha = skcms_AlphaFormat_Opaque;
-             srcAlpha <= skcms_AlphaFormat_PremulLinear; ++srcAlpha) {
+             srcAlpha <= skcms_AlphaFormat_PremulAsEncoded; ++srcAlpha) {
             for (skcms_AlphaFormat dstAlpha = skcms_AlphaFormat_Opaque;
-                 dstAlpha <= skcms_AlphaFormat_PremulLinear; ++dstAlpha) {
+                 dstAlpha <= skcms_AlphaFormat_PremulAsEncoded; ++dstAlpha) {
                 for (int i = 0; i < 256; i++) {
                     src[i] = (uint8_t)i;
                 }
diff --git a/skcms.cc b/skcms.cc
index 1599e4e..0e93a4c 100644
--- a/skcms.cc
+++ b/skcms.cc
@@ -2125,11 +2125,7 @@
         *ops++ = Op_unpremul;
     }
 
-    // TODO: We can skip this work if both srcAlpha and dstAlpha are PremulLinear, and the profiles
-    // are the same. Also, if dstAlpha is PremulLinear, and SrcAlpha is Opaque.
-    if (dstProfile != srcProfile ||
-        srcAlpha == skcms_AlphaFormat_PremulLinear ||
-        dstAlpha == skcms_AlphaFormat_PremulLinear) {
+    if (dstProfile != srcProfile) {
 
         if (!prep_for_destination(dstProfile,
                                   &from_xyz, &inv_dst_tf_r, &inv_dst_tf_b, &inv_dst_tf_g)) {
@@ -2201,13 +2197,6 @@
             return false;
         }
 
-        // At this point our source colors are linear, either RGB (XYZ-type profiles)
-        // or XYZ (A2B-type profiles). Unpremul is a linear operation (multiply by a
-        // constant 1/a), so either way we can do it now if needed.
-        if (srcAlpha == skcms_AlphaFormat_PremulLinear) {
-            *ops++ = Op_unpremul;
-        }
-
         // A2B sources should already be in XYZD50 at this point.
         // Others still need to be transformed using their toXYZD50 matrix.
         // N.B. There are profiles that contain both A2B tags and toXYZD50 matrices.
@@ -2230,10 +2219,6 @@
             *args++ = &from_xyz;
         }
 
-        if (dstAlpha == skcms_AlphaFormat_PremulLinear) {
-            *ops++ = Op_premul;
-        }
-
         // Encode back to dst RGB using its parametric transfer functions.
         if (!is_identity_tf(&inv_dst_tf_r)) { *ops++ = Op_tf_r; *args++ = &inv_dst_tf_r; }
         if (!is_identity_tf(&inv_dst_tf_g)) { *ops++ = Op_tf_g; *args++ = &inv_dst_tf_g; }
diff --git a/skcms.h b/skcms.h
index abc604b..c607463 100644
--- a/skcms.h
+++ b/skcms.h
@@ -208,10 +208,8 @@
 // any source alpha and treat it as 1.0, and will make sure that any destination alpha
 // channel is filled with the equivalent of 1.0.
 
-// When premultiplying and/or using a non-linear transfer function, it's important
-// that we know the order the operations are applied.  If you're used to working
-// with non-color-managed drawing systems, PremulAsEncoded is probably the "premul"
-// you're looking for; if you want linear blending, PremulLinear is the choice for you.
+// We used to offer multiple types of premultiplication, but now just one, PremulAsEncoded.
+// This is the premul you're probably used to working with.
 
 typedef enum skcms_AlphaFormat {
     skcms_AlphaFormat_Opaque,          // alpha is always opaque
@@ -220,8 +218,6 @@
                                        //   tf-1(r),   tf-1(g),   tf-1(b),   a
     skcms_AlphaFormat_PremulAsEncoded, // premultiplied while encoded
                                        //   tf-1(r)*a, tf-1(g)*a, tf-1(b)*a, a
-    skcms_AlphaFormat_PremulLinear,    // premultiplied while linear
-                                       //   tf-1(r*a), tf-1(g*a), tf-1(b*a), a
 } skcms_AlphaFormat;
 
 // Convert npixels pixels from src format and color profile to dst format and color profile
diff --git a/tests.c b/tests.c
index 06b3aa1..a3cfee8 100644
--- a/tests.c
+++ b/tests.c
@@ -892,32 +892,6 @@
         expect( dst[i+3] == src[i+3] );
     }
 
-    expect(skcms_Transform(
-        src, skcms_PixelFormat_RGBA_8888, skcms_AlphaFormat_Unpremul    , &sRGB,
-        dst, skcms_PixelFormat_RGBA_8888, skcms_AlphaFormat_PremulLinear, &sRGB,
-        64));
-    for (int i = 0; i < 256; i+=4) {
-        for (int k = 0; k < 3; k++) {
-            float l = skcms_TransferFunction_eval(tf,       src[i+k]/255.0f);
-            float e = skcms_TransferFunction_eval(&inv, l * src[i+3]/255.0f);
-            expect( dst[i+k] == (uint8_t)(255.0f*e + 0.5f) );
-        }
-        expect( dst[i+3] == src[i+3] );
-    }
-
-    expect(skcms_Transform(
-        src, skcms_PixelFormat_RGBA_8888, skcms_AlphaFormat_PremulLinear, &sRGB,
-        dst, skcms_PixelFormat_RGBA_8888, skcms_AlphaFormat_Unpremul    , &sRGB,
-        64));
-    for (int i = 0; i < 256; i+=4) {
-        for (int k = 0; k < 3; k++) {
-            float pm = skcms_TransferFunction_eval(tf,         src[i+k]/255.0f );
-            float e  = skcms_TransferFunction_eval(&inv, pm / (src[i+3]/255.0f));
-            expect( dst[i+k] == (uint8_t)(255.0f*e + 0.5f) );
-        }
-        expect( dst[i+3] == src[i+3] );
-    }
-
     free(ptr);
 }
 
