diff -r dea01914ff4f src/cl_pred.cpp
--- a/src/cl_pred.cpp	Thu Feb 11 18:20:51 2016 +0200
+++ b/src/cl_pred.cpp	Mon Feb 15 23:07:43 2016 +0100
@@ -361,6 +361,10 @@
 	if ( g_bSavedOnFloor[lTick % CLIENT_PREDICTION_TICS] )
 		pPlayer->mo->z = client_predict_GetPredictedFloorZ ( pPlayer, lTick );
 
+	// Update the waterlevel.
+	// The oldz parameter isn't used.
+	pPlayer->mo->UpdateWaterLevel(0, false);
+
 	while ( ulTicks )
 	{
 		// Disable bobbing, sounds, etc.
@@ -375,7 +379,6 @@
 		pPlayer->jumpTics = g_lSavedJumpTicks[lTick % CLIENT_PREDICTION_TICS];
 		pPlayer->turnticks = g_lSavedTurnTicks[lTick % CLIENT_PREDICTION_TICS];
 		pPlayer->mo->reactiontime = g_lSavedReactionTime[lTick % CLIENT_PREDICTION_TICS];
-		pPlayer->mo->waterlevel = g_lSavedWaterLevel[lTick % CLIENT_PREDICTION_TICS];
 
 		// Tick the player.
 		P_PlayerThink( pPlayer, &g_SavedTiccmd[lTick % CLIENT_PREDICTION_TICS] );
diff -r dea01914ff4f src/p_user.cpp
--- a/src/p_user.cpp	Thu Feb 11 18:20:51 2016 +0200
+++ b/src/p_user.cpp	Mon Feb 15 23:07:43 2016 +0100
@@ -1380,6 +1380,10 @@
 
 bool APlayerPawn::UpdateWaterLevel (fixed_t oldz, bool splash)
 {
+	// [Leo] Don't make noise if we're predicting.
+	if ( CLIENT_PREDICT_IsPredicting( ) )
+		return Super::UpdateWaterLevel(oldz, splash);
+
 	int oldlevel = waterlevel;
 	bool retval = Super::UpdateWaterLevel (oldz, splash);
 	if (player != NULL )
