diff --git a/reframe/core/containers.py b/reframe/core/containers.py
index d108746b..15be3766 100644
--- a/reframe/core/containers.py
+++ b/reframe/core/containers.py
@@ -255,7 +255,7 @@ class Singularity(ContainerPlatform):
             run_opts.append('--nv')
 
         if self.workdir:
-            run_opts.append(f'-W {self.workdir}')
+            run_opts.append(f'--pwd {self.workdir}')
 
         run_opts += self.options
         if self.command:

diff --git a/unittests/test_containers.py b/unittests/test_containers.py
index 6518781c..ea713465 100644
--- a/unittests/test_containers.py
+++ b/unittests/test_containers.py
@@ -104,15 +104,15 @@ def expected_cmd_mount_points(container_variant):
     elif container_variant in {'Singularity', 'Singularity+nopull'}:
         return ('singularity exec -B"/path/one:/one" '
                 '-B"/path/two:/two" -B"/foo:/rfm_workdir" '
-                '-W /rfm_workdir image:tag cmd')
+                '--pwd /rfm_workdir image:tag cmd')
     elif container_variant == 'Singularity+cuda':
         return ('singularity exec -B"/path/one:/one" '
                 '-B"/path/two:/two" -B"/foo:/rfm_workdir" --nv '
-                '-W /rfm_workdir image:tag cmd')
+                '--pwd /rfm_workdir image:tag cmd')
     elif container_variant == 'Singularity+nocommand':
         return ('singularity run -B"/path/one:/one" '
                 '-B"/path/two:/two" -B"/foo:/rfm_workdir" '
-                '-W /rfm_workdir image:tag')
+                '--pwd /rfm_workdir image:tag')
 
 
 @pytest.fixture
@@ -265,7 +265,7 @@ def expected_run_with_workdir(container_variant_noopt):
             '--foo image:tag cmd1'
         )
     elif container_variant_noopt == 'Singularity':
-        return ('singularity exec -B\"/foo:/rfm_workdir\" -W foodir '
+        return ('singularity exec -B\"/foo:/rfm_workdir\" --pwd foodir '
                 '--foo image:tag cmd1')
 
 

The Singularity container platform doesn't change automatically to the mounted stage directory
In the Singularity container platform the change to the mounted `stage` directory is done with https://github.com/reframe-hpc/reframe/blob/0d2c11214c914584c754afffac360bfd3c3383f8/reframe/core/containers.py#L257-L258
but `-W` doesn't change the directory like docker or sarus. From `singularity --help`:
```
  -W, --workdir string         working directory to be used for /tmp,
                               /var/tmp and $HOME (if -c/--contain was
                               also used)
```
As a result the test doesn't start in the stage directory. 
unittests/test_containers.py::test_mount_points[Singularity] unittests/test_containers.py::test_mount_points[Singularity+nocommand] unittests/test_containers.py::test_mount_points[Singularity+cuda] unittests/test_containers.py::test_run_with_workdir[Singularity]
unittests/test_containers.py::test_mount_points[Docker] unittests/test_containers.py::test_mount_points[Docker+nocommand] unittests/test_containers.py::test_mount_points[Docker+nopull] unittests/test_containers.py::test_mount_points[Sarus] unittests/test_containers.py::test_mount_points[Sarus+nocommand] unittests/test_containers.py::test_mount_points[Sarus+nopull] unittests/test_containers.py::test_mount_points[Sarus+mpi] unittests/test_containers.py::test_mount_points[Sarus+load] unittests/test_containers.py::test_mount_points[Shifter] unittests/test_containers.py::test_mount_points[Shifter+nocommand] unittests/test_containers.py::test_mount_points[Shifter+mpi] unittests/test_containers.py::test_mount_points[Shifter+nopull] unittests/test_containers.py::test_mount_points[Shifter+load] unittests/test_containers.py::test_prepare_command[Docker] unittests/test_containers.py::test_prepare_command[Docker+nocommand] unittests/test_containers.py::test_prepare_command[Docker+nopull] unittests/test_containers.py::test_prepare_command[Sarus] unittests/test_containers.py::test_prepare_command[Sarus+nocommand] unittests/test_containers.py::test_prepare_command[Sarus+nopull] unittests/test_containers.py::test_prepare_command[Sarus+mpi] unittests/test_containers.py::test_prepare_command[Sarus+load] unittests/test_containers.py::test_prepare_command[Shifter] unittests/test_containers.py::test_prepare_command[Shifter+nocommand] unittests/test_containers.py::test_prepare_command[Shifter+mpi] unittests/test_containers.py::test_prepare_command[Shifter+nopull] unittests/test_containers.py::test_prepare_command[Shifter+load] unittests/test_containers.py::test_prepare_command[Singularity] unittests/test_containers.py::test_prepare_command[Singularity+nocommand] unittests/test_containers.py::test_prepare_command[Singularity+cuda] unittests/test_containers.py::test_run_opts[Docker] unittests/test_containers.py::test_run_opts[Docker+nocommand] unittests/test_containers.py::test_run_opts[Docker+nopull] unittests/test_containers.py::test_run_opts[Sarus] unittests/test_containers.py::test_run_opts[Sarus+nocommand] unittests/test_containers.py::test_run_opts[Sarus+nopull] unittests/test_containers.py::test_run_opts[Sarus+mpi] unittests/test_containers.py::test_run_opts[Sarus+load] unittests/test_containers.py::test_run_opts[Shifter] unittests/test_containers.py::test_run_opts[Shifter+nocommand] unittests/test_containers.py::test_run_opts[Shifter+mpi] unittests/test_containers.py::test_run_opts[Shifter+nopull] unittests/test_containers.py::test_run_opts[Shifter+load] unittests/test_containers.py::test_run_opts[Singularity] unittests/test_containers.py::test_run_opts[Singularity+nocommand] unittests/test_containers.py::test_run_opts[Singularity+cuda] unittests/test_containers.py::test_run_with_workdir[Docker] unittests/test_containers.py::test_run_with_workdir[Sarus] unittests/test_containers.py::test_run_with_workdir[Shifter]