diff --git a/apps/avifenc.c b/apps/avifenc.c
index 8799f8e..0b4ba99 100644
--- a/apps/avifenc.c
+++ b/apps/avifenc.c
@@ -818,8 +818,9 @@
     char manualTilingStr[128];
     snprintf(manualTilingStr, sizeof(manualTilingStr), "tileRowsLog2 [%d], tileColsLog2 [%d]", settings->tileRowsLog2, settings->tileColsLog2);
 
+    const char * const codecName = avifCodecName(settings->codecChoice, AVIF_CODEC_FLAG_CAN_ENCODE);
     printf("Encoding with AV1 codec '%s' speed [%d], color quality [%d (%s)], alpha quality [%d (%s)], %s, %d worker thread(s), please wait...\n",
-           avifCodecName(settings->codecChoice, AVIF_CODEC_FLAG_CAN_ENCODE),
+           codecName ? codecName : "none",
            settings->speed,
            settings->quality,
            qualityString(settings->quality),
@@ -1464,14 +1465,13 @@
         }
         settings.minQuantizer = settings.maxQuantizer = settings.minQuantizerAlpha = settings.maxQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
         // Codec.
-        if (settings.codecChoice == AVIF_CODEC_CHOICE_RAV1E) {
+        const char * codecName = avifCodecName(settings.codecChoice, AVIF_CODEC_FLAG_CAN_ENCODE);
+        if (codecName && !strcmp(codecName, "rav1e")) {
             fprintf(stderr, "rav1e doesn't support lossless encoding yet: https://github.com/xiph/rav1e/issues/151\n");
             returnCode = 1;
-        } else if (settings.codecChoice == AVIF_CODEC_CHOICE_SVT) {
+        } else if (codecName && !strcmp(codecName, "svt")) {
             fprintf(stderr, "SVT-AV1 doesn't support lossless encoding yet: https://gitlab.com/AOMediaCodec/SVT-AV1/-/issues/1636\n");
             returnCode = 1;
-        } else if (settings.codecChoice == AVIF_CODEC_CHOICE_AUTO) {
-            settings.codecChoice = AVIF_CODEC_CHOICE_AOM;
         }
         // Range.
         if (requestedRange != AVIF_RANGE_FULL) {
@@ -1693,11 +1693,6 @@
         image->imir.mode = imirMode;
     }
 
-    avifBool usingAOM = AVIF_FALSE;
-    const char * codecName = avifCodecName(settings.codecChoice, AVIF_CODEC_FLAG_CAN_ENCODE);
-    if (codecName && !strcmp(codecName, "aom")) {
-        usingAOM = AVIF_TRUE;
-    }
     avifBool hasAlpha = (image->alphaPlane && image->alphaRowBytes);
     avifBool usingLosslessColor = (settings.quality == AVIF_QUALITY_LOSSLESS);
     avifBool usingLosslessAlpha = (settings.qualityAlpha == AVIF_QUALITY_LOSSLESS);
@@ -1716,11 +1711,6 @@
 
     // Check for any reasons lossless will fail, and complain loudly
     if (lossless) {
-        if (!usingAOM) {
-            fprintf(stderr, "WARNING: [--lossless] Only aom (-c) supports lossless transforms. Output might not be lossless.\n");
-            lossless = AVIF_FALSE;
-        }
-
         if (!usingLosslessColor) {
             fprintf(stderr,
                     "WARNING: [--lossless] Color quality (-q or --qcolor) not set to %d. Color output might not be lossless.\n",
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 3c46aa7..f08c896 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -222,7 +222,7 @@
     )
 
     if(NOT AVIF_CODEC_AOM OR NOT AVIF_CODEC_AOM_ENCODE)
-        # Only aom encoder supports lossless encoding.
+        # Only aom encoder supports AV1 lossless encoding.
         set_property(TEST test_cmd_animation PROPERTY DISABLED True)
         set_property(TEST test_cmd_lossless PROPERTY DISABLED True)
 
@@ -231,7 +231,7 @@
             set_property(TEST test_cmd_metadata PROPERTY DISABLED True)
         endif()
 
-        # Only aom encoder supports progressive encoding.
+        # Only aom encoder supports AV1 progressive encoding.
         set_property(TEST test_cmd_progressive PROPERTY DISABLED True)
 
         message(STATUS "Some tests are disabled because aom is unavailable for encoding.")
