diff --git a/src/main/java/com/android/tools/r8/metadata/BuildMetadataFactory.java b/src/main/java/com/android/tools/r8/metadata/BuildMetadataFactory.java
index 7ebfa5a..c8ae112 100644
--- a/src/main/java/com/android/tools/r8/metadata/BuildMetadataFactory.java
+++ b/src/main/java/com/android/tools/r8/metadata/BuildMetadataFactory.java
@@ -13,9 +13,11 @@
 
 public class BuildMetadataFactory {
 
-  @SuppressWarnings("UnusedParameter")
   public static D8BuildMetadata create(AppView<AppInfo> appView) {
-    return D8BuildMetadataImpl.builder().setVersion(Version.LABEL).build();
+    return D8BuildMetadataImpl.builder()
+        .setOptions(new D8OptionsImpl(appView.options()))
+        .setVersion(Version.LABEL)
+        .build();
   }
 
   public static R8BuildMetadata create(
diff --git a/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptions.java b/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptions.java
new file mode 100644
index 0000000..4531502
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptions.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
+public interface D8ApiModelingOptions {}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptionsImpl.java
new file mode 100644
index 0000000..58f9f56
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptionsImpl.java
@@ -0,0 +1,30 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+    description = "Keep and preserve @SerializedName for correct (de)serialization",
+    constraints = {KeepConstraint.LOOKUP},
+    constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+    kind = KeepItemKind.CLASS_AND_FIELDS,
+    fieldAccess = {FieldAccessFlags.PRIVATE},
+    fieldAnnotatedByClassConstant = SerializedName.class)
+public class D8ApiModelingOptionsImpl implements D8ApiModelingOptions {
+
+  private D8ApiModelingOptionsImpl() {}
+
+  public static D8ApiModelingOptionsImpl create(InternalOptions options) {
+    return options.apiModelingOptions().enableLibraryApiModeling
+        ? new D8ApiModelingOptionsImpl()
+        : null;
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8BuildMetadata.java b/src/main/java/com/android/tools/r8/metadata/D8BuildMetadata.java
index 652d320..eed136e 100644
--- a/src/main/java/com/android/tools/r8/metadata/D8BuildMetadata.java
+++ b/src/main/java/com/android/tools/r8/metadata/D8BuildMetadata.java
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.google.gson.GsonBuilder;
+import com.google.gson.JsonDeserializer;
 
 @KeepForApi
 public interface D8BuildMetadata {
@@ -12,10 +13,21 @@
   static D8BuildMetadata fromJson(String json) {
     return new GsonBuilder()
         .excludeFieldsWithoutExposeAnnotation()
+        .registerTypeAdapter(D8Options.class, deserializeTo(D8OptionsImpl.class))
+        .registerTypeAdapter(
+            D8ApiModelingOptions.class, deserializeTo(D8ApiModelingOptionsImpl.class))
+        .registerTypeAdapter(
+            D8LibraryDesugaringOptions.class, deserializeTo(D8LibraryDesugaringOptionsImpl.class))
         .create()
         .fromJson(json, D8BuildMetadataImpl.class);
   }
 
+  private static <T> JsonDeserializer<T> deserializeTo(Class<T> implClass) {
+    return (element, type, context) -> context.deserialize(element, implClass);
+  }
+
+  D8Options getOptions();
+
   String getVersion();
 
   String toJson();
diff --git a/src/main/java/com/android/tools/r8/metadata/D8BuildMetadataImpl.java b/src/main/java/com/android/tools/r8/metadata/D8BuildMetadataImpl.java
index 7e4239e..532027e 100644
--- a/src/main/java/com/android/tools/r8/metadata/D8BuildMetadataImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/D8BuildMetadataImpl.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.keepanno.annotations.KeepConstraint;
 import com.android.tools.r8.keepanno.annotations.KeepItemKind;
 import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.metadata.R8BuildMetadataImpl.Builder;
 import com.google.gson.Gson;
 import com.google.gson.annotations.Expose;
 import com.google.gson.annotations.SerializedName;
@@ -22,10 +23,15 @@
 public class D8BuildMetadataImpl implements D8BuildMetadata {
 
   @Expose
+  @SerializedName("options")
+  private final D8Options options;
+
+  @Expose
   @SerializedName("version")
   private final String version;
 
-  public D8BuildMetadataImpl(String version) {
+  public D8BuildMetadataImpl(D8Options options, String version) {
+    this.options = options;
     this.version = version;
   }
 
@@ -34,6 +40,11 @@
   }
 
   @Override
+  public D8Options getOptions() {
+    return options;
+  }
+
+  @Override
   public String getVersion() {
     return version;
   }
@@ -45,15 +56,21 @@
 
   public static class Builder {
 
+    private D8Options options;
     private String version;
 
+    public Builder setOptions(D8Options options) {
+      this.options = options;
+      return this;
+    }
+
     public Builder setVersion(String version) {
       this.version = version;
       return this;
     }
 
     public D8BuildMetadataImpl build() {
-      return new D8BuildMetadataImpl(version);
+      return new D8BuildMetadataImpl(options, version);
     }
   }
 }
diff --git a/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptions.java b/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptions.java
new file mode 100644
index 0000000..893be57
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptions.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
+public interface D8LibraryDesugaringOptions extends D8R8LibraryDesugaringOptions {}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptionsImpl.java
new file mode 100644
index 0000000..1d87662
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptionsImpl.java
@@ -0,0 +1,33 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+    description = "Keep and preserve @SerializedName for correct (de)serialization",
+    constraints = {KeepConstraint.LOOKUP},
+    constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+    kind = KeepItemKind.CLASS_AND_FIELDS,
+    fieldAccess = {FieldAccessFlags.PRIVATE},
+    fieldAnnotatedByClassConstant = SerializedName.class)
+public class D8LibraryDesugaringOptionsImpl extends D8R8LibraryDesugaringOptionsImpl
+    implements D8LibraryDesugaringOptions {
+
+  private D8LibraryDesugaringOptionsImpl(InternalOptions options) {
+    super(options);
+  }
+
+  public static D8LibraryDesugaringOptionsImpl create(InternalOptions options) {
+    return !options.machineDesugaredLibrarySpecification.isEmpty()
+        ? new D8LibraryDesugaringOptionsImpl(options)
+        : null;
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8Options.java b/src/main/java/com/android/tools/r8/metadata/D8Options.java
new file mode 100644
index 0000000..c7bd25c
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8Options.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
+public interface D8Options extends D8R8Options<D8ApiModelingOptions, D8LibraryDesugaringOptions> {}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8OptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8OptionsImpl.java
new file mode 100644
index 0000000..021b9ba
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8OptionsImpl.java
@@ -0,0 +1,30 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+    description = "Keep and preserve @SerializedName for correct (de)serialization",
+    constraints = {KeepConstraint.LOOKUP},
+    constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+    kind = KeepItemKind.CLASS_AND_FIELDS,
+    fieldAccess = {FieldAccessFlags.PRIVATE},
+    fieldAnnotatedByClassConstant = SerializedName.class)
+public class D8OptionsImpl extends D8R8OptionsImpl<D8ApiModelingOptions, D8LibraryDesugaringOptions>
+    implements D8Options {
+
+  public D8OptionsImpl(InternalOptions options) {
+    super(
+        D8ApiModelingOptionsImpl.create(options),
+        D8LibraryDesugaringOptionsImpl.create(options),
+        options);
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptions.java b/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptions.java
new file mode 100644
index 0000000..9679857
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptions.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+public interface D8R8LibraryDesugaringOptions {
+
+  String getIdentifier();
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptionsImpl.java
new file mode 100644
index 0000000..92cd481
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptionsImpl.java
@@ -0,0 +1,36 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+    description = "Keep and preserve @SerializedName for correct (de)serialization",
+    constraints = {KeepConstraint.LOOKUP},
+    constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+    kind = KeepItemKind.CLASS_AND_FIELDS,
+    fieldAccess = {FieldAccessFlags.PRIVATE},
+    fieldAnnotatedByClassConstant = SerializedName.class)
+abstract class D8R8LibraryDesugaringOptionsImpl implements D8R8LibraryDesugaringOptions {
+
+  @Expose
+  @SerializedName("identifier")
+  private final String identifier;
+
+  public D8R8LibraryDesugaringOptionsImpl(InternalOptions options) {
+    this.identifier = options.machineDesugaredLibrarySpecification.getIdentifier();
+  }
+
+  @Override
+  public String getIdentifier() {
+    return identifier;
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8R8Options.java b/src/main/java/com/android/tools/r8/metadata/D8R8Options.java
new file mode 100644
index 0000000..07b4844
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8R8Options.java
@@ -0,0 +1,22 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+public interface D8R8Options<
+    ApiModelingOptions, LibraryDesugaringOptions extends D8R8LibraryDesugaringOptions> {
+
+  /**
+   * @return null if API modeling is disabled.
+   */
+  ApiModelingOptions getApiModelingOptions();
+
+  /**
+   * @return null if library desugaring is disabled.
+   */
+  LibraryDesugaringOptions getLibraryDesugaringOptions();
+
+  int getMinApiLevel();
+
+  boolean isDebugModeEnabled();
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8R8OptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8R8OptionsImpl.java
new file mode 100644
index 0000000..0e4801a
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8R8OptionsImpl.java
@@ -0,0 +1,71 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+    description = "Keep and preserve @SerializedName for correct (de)serialization",
+    constraints = {KeepConstraint.LOOKUP},
+    constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+    kind = KeepItemKind.CLASS_AND_FIELDS,
+    fieldAccess = {FieldAccessFlags.PRIVATE},
+    fieldAnnotatedByClassConstant = SerializedName.class)
+abstract class D8R8OptionsImpl<
+        ApiModelingOptions, LibraryDesugaringOptions extends D8R8LibraryDesugaringOptions>
+    implements D8R8Options<ApiModelingOptions, LibraryDesugaringOptions> {
+
+  @Expose
+  @SerializedName("apiModelingOptions")
+  private final ApiModelingOptions apiModelingOptions;
+
+  @Expose
+  @SerializedName("libraryDesugaringOptions")
+  private final LibraryDesugaringOptions libraryDesugaringOptions;
+
+  @Expose
+  @SerializedName("minApiLevel")
+  private final int minApiLevel;
+
+  @Expose
+  @SerializedName("isDebugModeEnabled")
+  private final boolean isDebugModeEnabled;
+
+  public D8R8OptionsImpl(
+      ApiModelingOptions apiModelingOptions,
+      LibraryDesugaringOptions libraryDesugaringOptions,
+      InternalOptions options) {
+    this.apiModelingOptions = apiModelingOptions;
+    this.libraryDesugaringOptions = libraryDesugaringOptions;
+    this.minApiLevel = options.getMinApiLevel().getLevel();
+    this.isDebugModeEnabled = options.debug;
+  }
+
+  @Override
+  public ApiModelingOptions getApiModelingOptions() {
+    return apiModelingOptions;
+  }
+
+  @Override
+  public LibraryDesugaringOptions getLibraryDesugaringOptions() {
+    return libraryDesugaringOptions;
+  }
+
+  @Override
+  public int getMinApiLevel() {
+    return minApiLevel;
+  }
+
+  @Override
+  public boolean isDebugModeEnabled() {
+    return isDebugModeEnabled;
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/R8ApiModelingOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/R8ApiModelingOptionsImpl.java
index c9d3e06..33be1b4 100644
--- a/src/main/java/com/android/tools/r8/metadata/R8ApiModelingOptionsImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/R8ApiModelingOptionsImpl.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.keepanno.annotations.KeepConstraint;
 import com.android.tools.r8.keepanno.annotations.KeepItemKind;
 import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
 import com.google.gson.annotations.SerializedName;
 
 @UsedByReflection(
@@ -17,4 +18,13 @@
     kind = KeepItemKind.CLASS_AND_FIELDS,
     fieldAccess = {FieldAccessFlags.PRIVATE},
     fieldAnnotatedByClassConstant = SerializedName.class)
-public class R8ApiModelingOptionsImpl implements R8ApiModelingOptions {}
+public class R8ApiModelingOptionsImpl implements R8ApiModelingOptions {
+
+  private R8ApiModelingOptionsImpl() {}
+
+  public static R8ApiModelingOptionsImpl create(InternalOptions options) {
+    return options.apiModelingOptions().enableLibraryApiModeling
+        ? new R8ApiModelingOptionsImpl()
+        : null;
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptions.java b/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptions.java
index 9a80853..5549ac8 100644
--- a/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptions.java
+++ b/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptions.java
@@ -6,4 +6,4 @@
 import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 @KeepForApi
-public interface R8LibraryDesugaringOptions {}
+public interface R8LibraryDesugaringOptions extends D8R8LibraryDesugaringOptions {}
diff --git a/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptionsImpl.java
index e65fcb0..c88249e 100644
--- a/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptionsImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptionsImpl.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.keepanno.annotations.KeepConstraint;
 import com.android.tools.r8.keepanno.annotations.KeepItemKind;
 import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
 import com.google.gson.annotations.SerializedName;
 
 @UsedByReflection(
@@ -17,4 +18,16 @@
     kind = KeepItemKind.CLASS_AND_FIELDS,
     fieldAccess = {FieldAccessFlags.PRIVATE},
     fieldAnnotatedByClassConstant = SerializedName.class)
-public class R8LibraryDesugaringOptionsImpl implements R8LibraryDesugaringOptions {}
+public class R8LibraryDesugaringOptionsImpl extends D8R8LibraryDesugaringOptionsImpl
+    implements R8LibraryDesugaringOptions {
+
+  private R8LibraryDesugaringOptionsImpl(InternalOptions options) {
+    super(options);
+  }
+
+  public static R8LibraryDesugaringOptionsImpl create(InternalOptions options) {
+    return !options.machineDesugaredLibrarySpecification.isEmpty()
+        ? new R8LibraryDesugaringOptionsImpl(options)
+        : null;
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/R8OptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/R8OptionsImpl.java
index f5bf5bd..756f637 100644
--- a/src/main/java/com/android/tools/r8/metadata/R8OptionsImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/R8OptionsImpl.java
@@ -19,33 +19,18 @@
     kind = KeepItemKind.CLASS_AND_FIELDS,
     fieldAccess = {FieldAccessFlags.PRIVATE},
     fieldAnnotatedByClassConstant = SerializedName.class)
-public class R8OptionsImpl implements R8Options {
-
-  @Expose
-  @SerializedName("apiModelingOptions")
-  private final R8ApiModelingOptions apiModelingOptions;
+public class R8OptionsImpl extends D8R8OptionsImpl<R8ApiModelingOptions, R8LibraryDesugaringOptions>
+    implements R8Options {
 
   @Expose
   @SerializedName("keepAttributesOptions")
   private final R8KeepAttributesOptions keepAttributesOptions;
 
   @Expose
-  @SerializedName("libraryDesugaringOptions")
-  private final R8LibraryDesugaringOptions libraryDesugaringOptions;
-
-  @Expose
-  @SerializedName("minApiLevel")
-  private final int minApiLevel;
-
-  @Expose
   @SerializedName("isAccessModificationEnabled")
   private final boolean isAccessModificationEnabled;
 
   @Expose
-  @SerializedName("isDebugModeEnabled")
-  private final boolean isDebugModeEnabled;
-
-  @Expose
   @SerializedName("isProGuardCompatibilityModeEnabled")
   private final boolean isProGuardCompatibilityModeEnabled;
 
@@ -62,22 +47,16 @@
   private final boolean isShrinkingEnabled;
 
   public R8OptionsImpl(InternalOptions options) {
-    this.apiModelingOptions =
-        options.apiModelingOptions().enableLibraryApiModeling
-            ? new R8ApiModelingOptionsImpl()
-            : null;
+    super(
+        R8ApiModelingOptionsImpl.create(options),
+        R8LibraryDesugaringOptionsImpl.create(options),
+        options);
     this.keepAttributesOptions =
         options.hasProguardConfiguration()
             ? new R8KeepAttributesOptionsImpl(
                 options.getProguardConfiguration().getKeepAttributes())
             : null;
-    this.libraryDesugaringOptions =
-        !options.machineDesugaredLibrarySpecification.isEmpty()
-            ? new R8LibraryDesugaringOptionsImpl()
-            : null;
-    this.minApiLevel = options.getMinApiLevel().getLevel();
     this.isAccessModificationEnabled = options.isAccessModificationEnabled();
-    this.isDebugModeEnabled = options.debug;
     this.isProGuardCompatibilityModeEnabled = options.forceProguardCompatibility;
     this.isObfuscationEnabled = options.isMinifying();
     this.isOptimizationsEnabled = options.isOptimizing();
@@ -85,36 +64,16 @@
   }
 
   @Override
-  public R8ApiModelingOptions getApiModelingOptions() {
-    return apiModelingOptions;
-  }
-
-  @Override
   public R8KeepAttributesOptions getKeepAttributesOptions() {
     return keepAttributesOptions;
   }
 
   @Override
-  public R8LibraryDesugaringOptions getLibraryDesugaringOptions() {
-    return libraryDesugaringOptions;
-  }
-
-  @Override
-  public int getMinApiLevel() {
-    return minApiLevel;
-  }
-
-  @Override
   public boolean isAccessModificationEnabled() {
     return isAccessModificationEnabled;
   }
 
   @Override
-  public boolean isDebugModeEnabled() {
-    return isDebugModeEnabled;
-  }
-
-  @Override
   public boolean isProGuardCompatibilityModeEnabled() {
     return isProGuardCompatibilityModeEnabled;
   }
