diff --git a/src/main/java/com/android/tools/r8/graph/ClassAccessFlags.java b/src/main/java/com/android/tools/r8/graph/ClassAccessFlags.java
index b43a42c..7998171 100644
--- a/src/main/java/com/android/tools/r8/graph/ClassAccessFlags.java
+++ b/src/main/java/com/android/tools/r8/graph/ClassAccessFlags.java
@@ -109,7 +109,7 @@
   public boolean areValid(CfVersion version, boolean isPackageInfo) {
     if (isInterface()) {
       // We ignore the super flags prior to JDK 9, as so did the VM.
-      if (version.isGreaterThanOrEqual(CfVersion.V9) && isSuper()) {
+      if (version.isGreaterThanOrEqualTo(CfVersion.V9) && isSuper()) {
         return false;
       }
       // When not coming from DEX input we require interfaces to be abstract - except for
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index 4913a2c..455f03a 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -174,7 +174,7 @@
     String sourceDebug = getSourceDebugExtension(clazz.annotations());
     writer.visitSource(clazz.sourceFile != null ? clazz.sourceFile.toString() : null, sourceDebug);
     CfVersion version = getClassFileVersion(clazz);
-    if (version.isGreaterThanOrEqual(CfVersion.V1_8)) {
+    if (version.isGreaterThanOrEqualTo(CfVersion.V1_8)) {
       // JDK8 and after ignore ACC_SUPER so unset it.
       clazz.accessFlags.unsetSuper();
     } else {
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
index f15c049..6e501fc 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
@@ -4,14 +4,12 @@
 package com.android.tools.r8.utils;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.utils.structural.Ordered;
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.List;
 
-/**
- * Android API level description
- */
-public enum AndroidApiLevel {
+/** Android API level description */
+public enum AndroidApiLevel implements Ordered<AndroidApiLevel> {
   B(1),
   B_1_1(2),
   C(3),
@@ -70,9 +68,7 @@
   }
 
   public static List<AndroidApiLevel> getAndroidApiLevelsSorted() {
-    List<AndroidApiLevel> androidApiLevels = Arrays.asList(AndroidApiLevel.values());
-    androidApiLevels.sort(Comparator.comparingInt(AndroidApiLevel::getLevel));
-    return androidApiLevels;
+    return Arrays.asList(AndroidApiLevel.values());
   }
 
   public static AndroidApiLevel getMinAndroidApiLevel(DexVersion dexVersion) {
@@ -157,20 +153,4 @@
         return LATEST;
     }
   }
-
-  public boolean isLessThan(AndroidApiLevel other) {
-    return this.level < other.getLevel();
-  }
-
-  public boolean isLessThanOrEqualTo(AndroidApiLevel other) {
-    return this.level <= other.getLevel();
-  }
-
-  public boolean isGreaterThan(AndroidApiLevel other) {
-    return other.isLessThan(this);
-  }
-
-  public boolean isGreaterThanOrEqualTo(AndroidApiLevel other) {
-    return other.isLessThanOrEqualTo(this);
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index c5320a1..69b964d 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1433,7 +1433,7 @@
 
   public boolean canUseConstClassInstructions(CfVersion cfVersion) {
     assert isGeneratingClassFiles();
-    return cfVersion.isGreaterThanOrEqual(requiredCfVersionForConstClassInstructions());
+    return cfVersion.isGreaterThanOrEqualTo(requiredCfVersionForConstClassInstructions());
   }
 
   public CfVersion requiredCfVersionForConstClassInstructions() {
diff --git a/src/main/java/com/android/tools/r8/utils/structural/Ordered.java b/src/main/java/com/android/tools/r8/utils/structural/Ordered.java
index 9eb14f5..9c9a588 100644
--- a/src/main/java/com/android/tools/r8/utils/structural/Ordered.java
+++ b/src/main/java/com/android/tools/r8/utils/structural/Ordered.java
@@ -49,7 +49,7 @@
     return compareTo(other) < 0;
   }
 
-  default boolean isLessThanOrEqual(T other) {
+  default boolean isLessThanOrEqualTo(T other) {
     return compareTo(other) <= 0;
   }
 
@@ -57,7 +57,7 @@
     return compareTo(other) > 0;
   }
 
-  default boolean isGreaterThanOrEqual(T other) {
+  default boolean isGreaterThanOrEqualTo(T other) {
     return compareTo(other) >= 0;
   }
 }
diff --git a/src/test/java/com/android/tools/r8/cf/CfVersionTest.java b/src/test/java/com/android/tools/r8/cf/CfVersionTest.java
index 471cd3c..ea38851 100644
--- a/src/test/java/com/android/tools/r8/cf/CfVersionTest.java
+++ b/src/test/java/com/android/tools/r8/cf/CfVersionTest.java
@@ -53,12 +53,12 @@
     assertEquals(-1, less.compareTo(more));
     assertEquals(1, more.compareTo(less));
     assertTrue(less.isLessThan(more));
-    assertTrue(less.isLessThanOrEqual(more));
+    assertTrue(less.isLessThanOrEqualTo(more));
     assertFalse(less.isGreaterThan(more));
-    assertFalse(less.isGreaterThanOrEqual(more));
+    assertFalse(less.isGreaterThanOrEqualTo(more));
     assertFalse(more.isLessThan(less));
-    assertFalse(more.isLessThanOrEqual(less));
+    assertFalse(more.isLessThanOrEqualTo(less));
     assertTrue(more.isGreaterThan(less));
-    assertTrue(more.isGreaterThanOrEqual(less));
+    assertTrue(more.isGreaterThanOrEqualTo(less));
   }
 }
