diff --git a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
index 890d876..76c9554 100644
--- a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
+++ b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
@@ -11,7 +11,6 @@ import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonWriter;
-import net.minecraft.util.math.MathHelper;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import java.io.FileNotFoundException;
@@ -82,14 +81,14 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
 		cfg.sprintModeWhileFlying = Json.getEnum(obj, "Flight.SprintMode", cfg.sprintModeWhileFlying, SprintMode.class);
 		cfg.disableChangingFovWhileFlying = Json.getBool(obj, "Flight.DisableChangingFOV", cfg.disableChangingFovWhileFlying);
 		cfg.flyOnGroundInCreative = Json.getBool(obj, "Flight.FlyOnGround.Creative", cfg.flyOnGroundInCreative);
-		cfg.flightSpeedMpCreativeDefault = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault), 0.25F, 8F);
-		cfg.flightSpeedMpCreativeSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting), 0.25F, 8F);
-		cfg.flightSpeedMpSpectatorDefault = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault), 0.25F, 8F);
-		cfg.flightSpeedMpSpectatorSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting), 0.25F, 8F);
-		cfg.flightVerticalBoostCreativeDefault = MathHelper.clamp(Json.getFloat(obj, "Flight.VerticalBoost.Creative.Default", cfg.flightVerticalBoostCreativeDefault), 0F, 3F);
-		cfg.flightVerticalBoostCreativeSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.VerticalBoost.Creative.Sprinting", cfg.flightVerticalBoostCreativeSprinting), 0F, 3F);
-		cfg.flightVerticalBoostSpectatorDefault = MathHelper.clamp(Json.getFloat(obj, "Flight.VerticalBoost.Spectator.Default", cfg.flightVerticalBoostSpectatorDefault), 0F, 3F);
-		cfg.flightVerticalBoostSpectatorSprinting = MathHelper.clamp(Json.getFloat(obj, "Flight.VerticalBoost.Spectator.Sprinting", cfg.flightVerticalBoostSpectatorSprinting), 0F, 3F);
+		cfg.flightSpeedMpCreativeDefault = Json.getFloat(obj, "Flight.SpeedMp.Creative.Default", cfg.flightSpeedMpCreativeDefault, 0.25F, 8F);
+		cfg.flightSpeedMpCreativeSprinting = Json.getFloat(obj, "Flight.SpeedMp.Creative.Sprinting", cfg.flightSpeedMpCreativeSprinting, 0.25F, 8F);
+		cfg.flightSpeedMpSpectatorDefault = Json.getFloat(obj, "Flight.SpeedMp.Spectator.Default", cfg.flightSpeedMpSpectatorDefault, 0.25F, 8F);
+		cfg.flightSpeedMpSpectatorSprinting = Json.getFloat(obj, "Flight.SpeedMp.Spectator.Sprinting", cfg.flightSpeedMpSpectatorSprinting, 0.25F, 8F);
+		cfg.flightVerticalBoostCreativeDefault = Json.getFloat(obj, "Flight.VerticalBoost.Creative.Default", cfg.flightVerticalBoostCreativeDefault, 0F, 3F);
+		cfg.flightVerticalBoostCreativeSprinting = Json.getFloat(obj, "Flight.VerticalBoost.Creative.Sprinting", cfg.flightVerticalBoostCreativeSprinting, 0F, 3F);
+		cfg.flightVerticalBoostSpectatorDefault = Json.getFloat(obj, "Flight.VerticalBoost.Spectator.Default", cfg.flightVerticalBoostSpectatorDefault, 0F, 3F);
+		cfg.flightVerticalBoostSpectatorSprinting = Json.getFloat(obj, "Flight.VerticalBoost.Spectator.Sprinting", cfg.flightVerticalBoostSpectatorSprinting, 0F, 3F);
 		
 		Json.readKeyBinding(obj, "Misc.KeyToggleWalkForward", cfg.keyToggleWalkForward);
 		Json.readKeyBinding(obj, "Misc.KeyToggleJump", cfg.keyToggleJump);
diff --git a/src/main/java/chylex/bettercontrols/config/Json.java b/src/main/java/chylex/bettercontrols/config/Json.java
index 0746eb1..8d01990 100644
--- a/src/main/java/chylex/bettercontrols/config/Json.java
+++ b/src/main/java/chylex/bettercontrols/config/Json.java
@@ -11,8 +11,9 @@ final class Json{
 		obj.addProperty(key, Float.valueOf(value));
 	}
 	
-	static float getFloat(final JsonObject obj, final String key, final float defaultValue){
-		return obj.has(key) ? obj.get(key).getAsFloat() : defaultValue;
+	static float getFloat(final JsonObject obj, final String key, final float defaultValue, final float minValue, final float maxValue){
+		final float value = obj.has(key) ? obj.get(key).getAsFloat() : defaultValue;
+		return Math.max(minValue, Math.min(maxValue, value));
 	}
 	
 	static void setBool(final JsonObject obj, final String key, final boolean value){
diff --git a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
index 99903ca..1008605 100644
--- a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
+++ b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
@@ -12,7 +12,6 @@ import chylex.bettercontrols.mixin.AccessStickyKeyBindingStateGetter;
 import chylex.bettercontrols.util.Key;
 import net.minecraft.client.entity.player.ClientPlayerEntity;
 import net.minecraft.util.MovementInput;
-import net.minecraft.util.math.MathHelper;
 import java.lang.ref.WeakReference;
 import java.util.function.BooleanSupplier;
 import static chylex.bettercontrols.util.Statics.KEY_FORWARD;
@@ -160,14 +159,13 @@ public final class PlayerTicker{
 		
 		if (FlightHelper.isFlyingCreativeOrSpectator(player)){
 			final float flightSpeed = FlightHelper.getFlightSpeed(player);
+			final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player);
 			
 			if (flightSpeed > 0F){
 				player.abilities.setFlySpeed(flightSpeed);
 			}
 			
-			final float verticalVelocity = FlightHelper.getExtraVerticalVelocity(player);
-			
-			if (!MathHelper.epsilonEquals(verticalVelocity, 0F) && player == MINECRAFT.getRenderViewEntity()){
+			if (Math.abs(verticalVelocity) > 1E-5F && player == MINECRAFT.getRenderViewEntity()){
 				int direction = 0;
 				
 				if (player.movementInput.sneaking){