diff --git a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerFOV.java b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerFOV.java
index 7041df4..fd81d62 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerFOV.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerFOV.java
@@ -1,22 +1,26 @@
 package chylex.bettercontrols.mixin;
 
 import chylex.bettercontrols.player.PlayerTicker;
-import net.minecraft.client.Minecraft;
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
 import net.minecraft.client.player.AbstractClientPlayer;
 import net.minecraft.client.player.LocalPlayer;
-import net.minecraft.world.entity.player.Abilities;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
 
 @Mixin(AbstractClientPlayer.class)
 public abstract class HookClientPlayerFOV {
-	@Redirect(
+	@ModifyExpressionValue(
 		method = "getFieldOfViewModifier",
 		at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Abilities;getWalkingSpeed()F")
 	)
-	private float overrideWalkingSpeed(final Abilities abilities) {
-		final LocalPlayer player = Minecraft.getInstance().player;
-		return (player != null && PlayerTicker.get(player).shouldResetFOV(player)) ? 0F : abilities.getWalkingSpeed();
+	private float overrideWalkingSpeed(final float walkingSpeed) {
+		final AbstractClientPlayer me = (AbstractClientPlayer)(Object)this;
+		
+		if (me instanceof LocalPlayer localPlayer && PlayerTicker.get(localPlayer).shouldResetFOV(localPlayer)) {
+			return 0F;
+		}
+		else {
+			return walkingSpeed;
+		}
 	}
 }
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerVerticalFlightSpeed.java b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerVerticalFlightSpeed.java
index 720a0dd..3d5e010 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerVerticalFlightSpeed.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookClientPlayerVerticalFlightSpeed.java
@@ -1,14 +1,13 @@
 package chylex.bettercontrols.mixin;
 
 import chylex.bettercontrols.player.FlightHelper;
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
 import net.minecraft.client.player.LocalPlayer;
 import net.minecraft.world.entity.EntityType;
 import net.minecraft.world.entity.LivingEntity;
-import net.minecraft.world.entity.player.Abilities;
 import net.minecraft.world.level.Level;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
 import org.spongepowered.asm.mixin.injection.Slice;
 
 @Mixin(LocalPlayer.class)
@@ -18,7 +17,7 @@ public abstract class HookClientPlayerVerticalFlightSpeed extends LivingEntity {
 		super(type, world);
 	}
 	
-	@Redirect(
+	@ModifyExpressionValue(
 		method = "aiStep",
 		at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Abilities;getFlyingSpeed()F"),
 		slice = @Slice(
@@ -26,9 +25,9 @@ public abstract class HookClientPlayerVerticalFlightSpeed extends LivingEntity {
 			to = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V")
 		)
 	)
-	private float modifyVerticalFlightSpeed(final Abilities abilities) {
+	private float modifyVerticalFlightSpeed(final float flyingSpeed) {
 		@SuppressWarnings("ConstantConditions")
 		final LocalPlayer me = (LocalPlayer)(Object)this;
-		return abilities.getFlyingSpeed() * FlightHelper.getVerticalSpeedMultiplier(me);
+		return flyingSpeed * FlightHelper.getVerticalSpeedMultiplier(me);
 	}
 }
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java b/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
index 2dd0ec3..b7d008a 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java
@@ -1,6 +1,8 @@
 package chylex.bettercontrols.mixin;
 
 import chylex.bettercontrols.BetterControlsCommon;
+import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
+import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
 import net.minecraft.client.KeyMapping;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.Options;
@@ -10,16 +12,16 @@ 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;
-import org.spongepowered.asm.mixin.injection.Redirect;
 
 @Mixin(KeyBindsList.class)
+@SuppressWarnings("MethodMayBeStatic")
 public abstract class HookControlsListWidget extends ContainerObjectSelectionList<Entry> {
 	public HookControlsListWidget(final Minecraft client, final int width, final int height, final int top, final int itemHeight) {
 		super(client, width, height, top, itemHeight);
 	}
 	
-	@Redirect(method = "<init>", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Options;keyMappings:[Lnet/minecraft/client/KeyMapping;"))
-	private KeyMapping[] excludeOwnKeyBindings(final Options options) {
-		return ArrayUtils.removeElements(options.keyMappings, BetterControlsCommon.getConfig().getAllKeyBindings());
+	@WrapOperation(method = "<init>", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Options;keyMappings:[Lnet/minecraft/client/KeyMapping;"))
+	private KeyMapping[] excludeOwnKeyBindings(final Options options, final Operation<KeyMapping[]> operation) {
+		return ArrayUtils.removeElements(operation.call(options), BetterControlsCommon.getConfig().getAllKeyBindings());
 	}
 }
diff --git a/src/main/java/chylex/bettercontrols/mixin/HookPlayerHorizontalFlightSpeed.java b/src/main/java/chylex/bettercontrols/mixin/HookPlayerHorizontalFlightSpeed.java
index f953d44..73d2643 100644
--- a/src/main/java/chylex/bettercontrols/mixin/HookPlayerHorizontalFlightSpeed.java
+++ b/src/main/java/chylex/bettercontrols/mixin/HookPlayerHorizontalFlightSpeed.java
@@ -1,6 +1,8 @@
 package chylex.bettercontrols.mixin;
 
 import chylex.bettercontrols.player.FlightHelper;
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
+import com.llamalad7.mixinextras.injector.ModifyReturnValue;
 import net.minecraft.client.player.LocalPlayer;
 import net.minecraft.world.entity.EntityType;
 import net.minecraft.world.entity.LivingEntity;
@@ -8,10 +10,7 @@ import net.minecraft.world.entity.player.Player;
 import net.minecraft.world.level.Level;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.Redirect;
 import org.spongepowered.asm.mixin.injection.Slice;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 
 @Mixin(Player.class)
 @SuppressWarnings({ "SameReturnValue", "UnreachableCode" })
@@ -21,7 +20,7 @@ public abstract class HookPlayerHorizontalFlightSpeed extends LivingEntity {
 	}
 	
 	@SuppressWarnings("SimplifiableIfStatement")
-	@Redirect(
+	@ModifyExpressionValue(
 		method = "getFlyingSpeed",
 		at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;isSprinting()Z"),
 		slice = @Slice(
@@ -29,23 +28,28 @@ public abstract class HookPlayerHorizontalFlightSpeed extends LivingEntity {
 			to = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Abilities;getFlyingSpeed()F")
 		)
 	)
-	private boolean disableVanillaSprintBoost(final Player player) {
-		if (player instanceof LocalPlayer) {
+	private boolean disableVanillaSprintBoost(final boolean isSprinting) {
+		@SuppressWarnings("ConstantConditions")
+		final Player me = (Player)(Object)this;
+		
+		if (me instanceof LocalPlayer) {
 			return false;
 		}
 		else {
-			return player.isSprinting();
+			return isSprinting;
 		}
 	}
 	
-	@Inject(method = "getFlyingSpeed", at = @At("RETURN"), cancellable = true)
-	private void modifyHorizontalFlyingSpeed(final CallbackInfoReturnable<Float> cir) {
+	@ModifyReturnValue(method = "getFlyingSpeed", at = @At("RETURN"))
+	private float modifyHorizontalFlyingSpeed(final float flyingSpeed) {
 		@SuppressWarnings("ConstantConditions")
 		final Player me = (Player)(Object)this;
 		
 		if (me instanceof final LocalPlayer localPlayer && localPlayer.getAbilities().flying) {
-			final float multiplier = FlightHelper.getHorizontalSpeedMultiplier(localPlayer);
-			cir.setReturnValue(Float.valueOf(cir.getReturnValueF() * multiplier));
+			return flyingSpeed * FlightHelper.getHorizontalSpeedMultiplier(localPlayer);
+		}
+		else {
+			return flyingSpeed;
 		}
 	}
 }