diff --git a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
index c0cb658..d4212e7 100644
--- a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
+++ b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
@@ -16,8 +16,8 @@ import net.minecraft.client.KeyMapping;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.components.CycleButton;
 import net.minecraft.client.gui.components.events.GuiEventListener;
-import net.minecraft.client.gui.screens.OptionsSubScreen;
 import net.minecraft.client.gui.screens.Screen;
+import net.minecraft.client.gui.screens.options.OptionsSubScreen;
 import net.minecraft.network.chat.Component;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.glfw.GLFW;
@@ -211,9 +211,7 @@ public class BetterControlsScreen extends OptionsSubScreen {
 	}
 	
 	@Override
-	public void init() {
-		super.init();
-		
+	protected void addContents() {
 		allKeyBindings.clear();
 		
 		final List<GuiEventListener> elements = new ArrayList<>();
@@ -234,6 +232,9 @@ public class BetterControlsScreen extends OptionsSubScreen {
 		optionsWidget = addRenderableWidget(new OptionListWidget(width, layout.getContentHeight(), layout.getHeaderHeight(), y - TITLE_MARGIN_TOP + BOTTOM_PADDING, elements));
 	}
 	
+	@Override
+	protected void addOptions() {}
+	
 	@Override
 	protected void repositionElements() {
 		super.repositionElements();
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java b/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
index 517da14..2dd0ec3 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
@@ -5,8 +5,8 @@ import net.minecraft.client.KeyMapping;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.Options;
 import net.minecraft.client.gui.components.ContainerObjectSelectionList;
-import net.minecraft.client.gui.screens.controls.KeyBindsList;
-import net.minecraft.client.gui.screens.controls.KeyBindsList.Entry;
+import net.minecraft.client.gui.screens.options.controls.KeyBindsList;
+import net.minecraft.client.gui.screens.options.controls.KeyBindsList.Entry;
 import org.apache.commons.lang3.ArrayUtils;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.injection.At;
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java b/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java
index 007979c..5958589 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java
@@ -4,14 +4,13 @@ import chylex.bettercontrols.gui.BetterControlsScreen;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.Options;
 import net.minecraft.client.gui.components.Button;
-import net.minecraft.client.gui.components.OptionsList;
-import net.minecraft.client.gui.components.events.GuiEventListener;
-import net.minecraft.client.gui.screens.OptionsSubScreen;
 import net.minecraft.client.gui.screens.Screen;
-import net.minecraft.client.gui.screens.controls.ControlsScreen;
+import net.minecraft.client.gui.screens.options.OptionsSubScreen;
+import net.minecraft.client.gui.screens.options.controls.ControlsScreen;
 import net.minecraft.network.chat.Component;
 import net.minecraft.network.chat.MutableComponent;
 import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Unique;
 import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -24,20 +23,18 @@ public abstract class HookControlsScreen extends OptionsSubScreen {
 		super(parentScreen, options, title);
 	}
 	
-	@Inject(method = "init", at = @At("RETURN"))
-	public void afterInit(final CallbackInfo ci) {
+	@Inject(method = "addOptions", at = @At("RETURN"))
+	public void afterAddOptions(final CallbackInfo ci) {
 		@SuppressWarnings("ConstantConditions")
 		final ControlsScreen screen = (ControlsScreen)(Object)this;
 		
-		for (final GuiEventListener child : children()) {
-			if (child instanceof final OptionsList optionsList) {
-				final MutableComponent buttonTitle = BetterControlsScreen.TITLE.plainCopy().append("...");
-				optionsList.addSmall(List.of(Button.builder(buttonTitle, btn -> showOptionsScreen(screen)).build()));
-				break;
-			}
+		if (list != null) {
+			final MutableComponent buttonTitle = BetterControlsScreen.TITLE.plainCopy().append("...");
+			list.addSmall(List.of(Button.builder(buttonTitle, btn -> showOptionsScreen(screen)).build()));
 		}
 	}
 	
+	@Unique
 	private static void showOptionsScreen(final ControlsScreen screen) {
 		final Minecraft mc = Minecraft.getInstance();
 		mc.setScreen(new BetterControlsScreen(mc, screen));
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java b/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java
index 9c6fa27..8a3dce1 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java
@@ -10,12 +10,14 @@ import org.spongepowered.asm.mixin.Final;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Mutable;
 import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.Unique;
 import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 @Mixin(Options.class)
 public abstract class HookLoadGameOptions {
+	@Unique
 	private boolean hasLoaded = false;
 	
 	@Mutable