diff --git a/docs/user_guide/v4-migration.md b/docs/user_guide/v4-migration.md
index d05591f0d..eebebb629 100644
--- a/docs/user_guide/v4-migration.md
+++ b/docs/user_guide/v4-migration.md
@@ -344,10 +344,10 @@ Remove the chunks argument from your code
-ParticleFile does not have a to_write argument
+ParticleFile does not have a to_write="once" argument
-Remove the to_write argument from your code
+Either write all timesteps of a variable, or none
diff --git a/src/parcels/_core/particleset.py b/src/parcels/_core/particleset.py
index 829e88f20..01129d760 100644
--- a/src/parcels/_core/particleset.py
+++ b/src/parcels/_core/particleset.py
@@ -351,18 +351,6 @@ def _num_error_particles(self):
"""
return int(np.sum(self._data["state"] != StatusCode.Success))
- def set_variable_write_status(self, var, write_status):
- """Method to set the write status of a Variable.
-
- Parameters
- ----------
- var :
- Name of the variable (string)
- write_status :
- Write status of the variable (True, False or 'once')
- """
- self._data[var].set_variable_write_status(write_status)
-
def execute(
self,
kernels,
diff --git a/tests/test_particlefile.py b/tests/test_particlefile.py
index 1bec5a89d..307451da0 100755
--- a/tests/test_particlefile.py
+++ b/tests/test_particlefile.py
@@ -466,12 +466,6 @@ def test_particlefile_init_invalid(tmp_path):
ParticleFile(path, outputdt=np.timedelta64(1, "s"))
-def test_pfile_write_custom_particle():
- # Test the writing of a custom particle with variables that are to_write, some to_write once, and some not to_write
- # ? This is more of an integration test... Should it be housed here?
- ...
-
-
def test_particlefile_readable_after_kernel_error(fieldset, tmp_parquet):
"""Parquet output file must be readable even if the kernel raises an error mid-execution (GH-2713)."""
@@ -489,32 +483,6 @@ def ErrorKernel(particles, fieldset): # pragma: no cover
assert len(df) >= 1 # at least the initial condition was written
-@pytest.mark.xfail(
- reason="set_variable_write_status should be removed - with Particle writing defined on the particle level. GH2186"
-)
-def test_pfile_set_towrite_False(fieldset, tmp_parquet):
- npart = 10
- pset = ParticleSet(fieldset, pclass=Particle, x=np.linspace(0, 1, npart), y=0.5 * np.ones(npart))
- pset.set_variable_write_status("z", False)
- pset.set_variable_write_status("lat", False)
- pfile = pset.ParticleFile(tmp_parquet, outputdt=1)
-
- def Update_lon(particles, fieldset): # pragma: no cover
- particles.dx += 0.1
-
- pset.execute(Update_lon, runtime=10, output_file=pfile)
-
- ds = xr.open_zarr(tmp_parquet)
- assert "t" in ds
- assert "z" not in ds
- assert "lat" not in ds
- ds.close()
-
- # For pytest purposes, we need to reset to original status
- pset.set_variable_write_status("z", True)
- pset.set_variable_write_status("lat", True)
-
-
@pytest.mark.parametrize(
"particle",
[