diff --git a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java
index 2389e83..3dd60dd 100644
--- a/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java
+++ b/src/main/java/chylex/bettercontrols/config/BetterControlsConfig.java
@@ -10,6 +10,7 @@ public final class BetterControlsConfig{
 	private Path path;
 	
 	public boolean doubleTapForwardToSprint = true;
+	public boolean resumeSprintingAfterHittingObstacle = false;
 	
 	public boolean sneakingMovesCameraSmoothly = true;
 	
diff --git a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
index 740e98b..38e97c0 100644
--- a/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
+++ b/src/main/java/chylex/bettercontrols/config/ConfigSerializer.java
@@ -31,6 +31,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
 		final JsonObject obj = new JsonObject();
 		
 		Json.setBool(obj, "Sprint.DoubleTapForward", cfg.doubleTapForwardToSprint);
+		Json.setBool(obj, "Sprint.ResumeAfterHittingObstacle", cfg.resumeSprintingAfterHittingObstacle);
 		
 		Json.setBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly);
 		
@@ -49,6 +50,7 @@ final class ConfigSerializer implements JsonSerializer<BetterControlsConfig>, Js
 		final JsonObject obj = json.getAsJsonObject();
 		
 		cfg.doubleTapForwardToSprint = Json.getBool(obj, "Sprint.DoubleTapForward", cfg.doubleTapForwardToSprint);
+		cfg.resumeSprintingAfterHittingObstacle = Json.getBool(obj, "Sprint.ResumeAfterHittingObstacle", cfg.resumeSprintingAfterHittingObstacle);
 		
 		cfg.sneakingMovesCameraSmoothly = Json.getBool(obj, "Sneak.SmoothCamera", cfg.sneakingMovesCameraSmoothly);
 		
diff --git a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
index 26fd9e2..066a74c 100644
--- a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
+++ b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java
@@ -42,6 +42,11 @@ public class BetterControlsScreen extends GameOptionsScreen{
 		generateLeftSideText(y, elements, Text.of("Double Tap 'Walk Forwards' To Sprint"));
 		elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.doubleTapForwardToSprint, value -> cfg.doubleTapForwardToSprint = value));
 		
+		y += ROW_HEIGHT;
+		
+		generateLeftSideText(y, elements, Text.of("Resume Sprinting After Hitting Obstacle"));
+		elements.add(new BooleanValueWidget(col2(1), y, COL2_W, cfg.resumeSprintingAfterHittingObstacle, value -> cfg.resumeSprintingAfterHittingObstacle = value));
+		
 		y += ROW_HEIGHT;
 		return y;
 	}
diff --git a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
index e146a79..9ce0cdb 100644
--- a/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
+++ b/src/main/java/chylex/bettercontrols/player/PlayerTicker.java
@@ -34,6 +34,9 @@ public final class PlayerTicker{
 	
 	// Logic
 	
+	private boolean wasHittingObstacle = false;
+	private boolean wasSprintingBeforeHittingObstacle = false;
+	
 	private boolean wasSneakingBeforeTouchingGround = false;
 	private boolean holdingSneakWhileTouchingGround = false;
 	
@@ -53,6 +56,25 @@ public final class PlayerTicker{
 		if (flightSpeed > 0F){
 			player.abilities.setFlySpeed(flightSpeed);
 		}
+		
+		if (cfg().resumeSprintingAfterHittingObstacle){
+			if (wasHittingObstacle != player.horizontalCollision){
+				if (!wasHittingObstacle){
+					wasSprintingBeforeHittingObstacle = player.isSprinting() || mc().options.keySprint.isPressed();
+				}
+				else if (wasSprintingBeforeHittingObstacle){
+					wasSprintingBeforeHittingObstacle = false;
+					player.setSprinting(true);
+				}
+				
+				// collision also stops when the player lets go of movement keys
+				wasHittingObstacle = player.horizontalCollision;
+			}
+		}
+		else{
+			wasHittingObstacle = player.horizontalCollision;
+			wasSprintingBeforeHittingObstacle = false;
+		}
 	}
 	
 	public void afterSuperCall(final ClientPlayerEntity player){