diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 296f70df8da37eaaaca9c8313eb89e876ab422cf..a8164678633d10f397a1970d934643edc0cc9e16 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -2,6 +2,17 @@ This document contains the ``fslpy`` release history in reverse chronological
 order.
 
 
+3.18.3 (Saturday 4th May 2024)
+------------------------------
+
+
+Fixed
+^^^^^
+
+
+* Fixed an issue with :mod:``fsl.wrappers`` functions not finding output files
+  when ``$FSLOUTPUTTYPE`` is set to something other than ``NIFTI_GZ`` (!452).
+
 
 3.18.2 (Wednesday 3rd April 2024)
 ---------------------------------
diff --git a/fsl/tests/test_assertions.py b/fsl/tests/test_assertions.py
index 5d35f7507507503f353763619fc157f4132740f2..4215735ab839786eca1f69ae5aa04a637f723705 100644
--- a/fsl/tests/test_assertions.py
+++ b/fsl/tests/test_assertions.py
@@ -14,8 +14,8 @@ import pytest
 import fsl.utils.assertions as assertions
 import fsl.utils.tempdir    as tempdir
 
-from . import make_random_image
-from . import testdir
+from fsl.tests import make_random_image
+from fsl.tests import testdir
 
 
 def test_assertFileExists():
diff --git a/fsl/tests/test_atlases_query.py b/fsl/tests/test_atlases_query.py
index eb20641c6b12e21cae863fd3edd71fe2b0a3e33d..489d8ab4393a0f51b87f0ae2a8340b0560a97afa 100644
--- a/fsl/tests/test_atlases_query.py
+++ b/fsl/tests/test_atlases_query.py
@@ -17,7 +17,7 @@ import fsl.transform.affine     as affine
 import fsl.utils.image.resample as resample
 import fsl.utils.cache          as cache
 
-from . import (testdir, make_random_mask)
+from fsl.tests import (testdir, make_random_mask)
 
 
 pytestmark = pytest.mark.fsltest
diff --git a/fsl/tests/test_dicom.py b/fsl/tests/test_dicom.py
index 7808e271b0d23e68fdf223aba734da58ee77bcb9..dfda97f20a2236e8cfe27d3b1c68a0a84a9b71c5 100644
--- a/fsl/tests/test_dicom.py
+++ b/fsl/tests/test_dicom.py
@@ -22,7 +22,7 @@ import fsl.data.dicom    as fsldcm
 import fsl.utils.tempdir as tempdir
 
 
-from . import mockFSLDIR, touch
+from fsl.tests import mockFSLDIR, touch
 
 
 datadir = op.join(op.dirname(__file__), 'testdata')
diff --git a/fsl/tests/test_ensure.py b/fsl/tests/test_ensure.py
index 0f63e7da08fd0e168602ec7f73b15de7d5fb42a3..fae0a453209e1af0834c56ac658c18757a639c48 100644
--- a/fsl/tests/test_ensure.py
+++ b/fsl/tests/test_ensure.py
@@ -13,7 +13,7 @@ import nibabel as nib
 import fsl.utils.tempdir as tempdir
 import fsl.utils.ensure  as ensure
 
-from . import make_random_image
+from fsl.tests import make_random_image
 
 
 def test_ensureIsImage():
diff --git a/fsl/tests/test_filetree/test_query.py b/fsl/tests/test_filetree/test_query.py
index a85ac5d8d441111f0ac4cde7bade392facc4735d..80b0213cf7cb1ab16160ecdd2c9df281e79d45cd 100644
--- a/fsl/tests/test_filetree/test_query.py
+++ b/fsl/tests/test_filetree/test_query.py
@@ -13,7 +13,7 @@ import contextlib
 import textwrap as tw
 import itertools as it
 
-from .. import testdir
+from fsl.tests import testdir
 
 import fsl.utils.filetree       as filetree
 import fsl.utils.filetree.query as ftquery
diff --git a/fsl/tests/test_freesurfer.py b/fsl/tests/test_freesurfer.py
index ae173b0fa54f67c0b9e7b43c9ab661a1989e8ef1..c68e2f6237d30955c651d8726362507afc0e938d 100644
--- a/fsl/tests/test_freesurfer.py
+++ b/fsl/tests/test_freesurfer.py
@@ -19,9 +19,9 @@ import pytest
 import fsl.version         as fslver
 import fsl.data.freesurfer as fslfs
 
-from .test_mesh import (CUBE_VERTICES, CUBE_TRIANGLES_CCW)
+from fsl.tests.test_mesh import (CUBE_VERTICES, CUBE_TRIANGLES_CCW)
 
-from . import tempdir, touch
+from fsl.tests import tempdir, touch
 
 
 def gen_freesurfer_geometry(fname, verts, tris):
diff --git a/fsl/tests/test_fsl_data_utils.py b/fsl/tests/test_fsl_data_utils.py
index 1ef030bd228dbc263a0b390329a646f162e186a3..f8cd626a2e5cdb948e7db039bcebb81f9e113919 100644
--- a/fsl/tests/test_fsl_data_utils.py
+++ b/fsl/tests/test_fsl_data_utils.py
@@ -26,10 +26,10 @@ import fsl.data.dtifit          as dtifit
 import fsl.data.melodicanalysis as melanalysis
 import fsl.data.featanalysis    as featanalysis
 
-from . import (touch,
-               make_mock_feat_analysis,
-               make_mock_melodic_analysis,
-               make_mock_dtifit_analysis)
+from fsl.tests import (touch,
+                       make_mock_feat_analysis,
+                       make_mock_melodic_analysis,
+                       make_mock_dtifit_analysis)
 
 
 def test_guessType():
diff --git a/fsl/tests/test_fsl_utils_path.py b/fsl/tests/test_fsl_utils_path.py
index fbf95953682951961db2078bdc26f04b98d310c5..6f9e08cb6caaafac17ee1765d96122892b0d5ae5 100644
--- a/fsl/tests/test_fsl_utils_path.py
+++ b/fsl/tests/test_fsl_utils_path.py
@@ -18,7 +18,7 @@ import pytest
 import fsl.utils.path as fslpath
 import fsl.data.image as fslimage
 
-from . import testdir
+from fsl.tests import testdir
 
 
 def make_dummy_file(path):
diff --git a/fsl/tests/test_fslsub.py b/fsl/tests/test_fslsub.py
index 38796cf05de29dc4e34a119718127b2684b8e3d1..b90abb9e6ff7d38303e604d646b9bd9a636296fb 100644
--- a/fsl/tests/test_fslsub.py
+++ b/fsl/tests/test_fslsub.py
@@ -19,7 +19,7 @@ import fsl.version as fv
 from fsl.utils         import fslsub, run
 from fsl.utils.tempdir import tempdir
 
-from . import mockFSLDIR
+from fsl.tests import mockFSLDIR
 
 
 mock_fsl_sub = """
@@ -239,4 +239,4 @@ def test_info():
     assert res2['1'] is None
 
     with pytest.raises(ValueError):
-        fslsub._parse_qstat(valid_job_ids[0], example_qstat_reply)
\ No newline at end of file
+        fslsub._parse_qstat(valid_job_ids[0], example_qstat_reply)
diff --git a/fsl/tests/test_gifti.py b/fsl/tests/test_gifti.py
index ef9f0e970930ca183e498d1a020bd0740add3683..4a26eb2786fb1bdc789b94cb6c684c7c24e710c7 100644
--- a/fsl/tests/test_gifti.py
+++ b/fsl/tests/test_gifti.py
@@ -16,7 +16,8 @@ import pytest
 
 import fsl.data.gifti as gifti
 
-from . import tempdir
+from fsl.tests import tempdir
+from fsl.tests import test_mesh
 
 
 def test_GiftiMesh_create():
@@ -364,7 +365,6 @@ def test_GiftiMesh_multiple_vertices():
 
 
 def test_GiftiMesh_needsFixing():
-    from . import test_mesh
 
     verts      = test_mesh.CUBE_VERTICES
     idxs       = test_mesh.CUBE_TRIANGLES_CW
diff --git a/fsl/tests/test_image.py b/fsl/tests/test_image.py
index 3efe06d3b9ef5603fec154fd9f645d3db17c7082..884fb92f4316f1705e0a5dde3c2949ab65ebf267 100644
--- a/fsl/tests/test_image.py
+++ b/fsl/tests/test_image.py
@@ -29,8 +29,8 @@ import fsl.transform.affine as affine
 
 from fsl.utils.tempdir import tempdir
 
-from . import make_random_image
-from . import make_dummy_file
+from fsl.tests import make_random_image
+from fsl.tests import make_dummy_file
 
 from unittest import mock
 
diff --git a/fsl/tests/test_image_resample.py b/fsl/tests/test_image_resample.py
index 6d6baf4e5cc18f749dfbf0a629f0a91c99c9895a..dbe219cb8134a41d68899fcfc18877ae7818694f 100644
--- a/fsl/tests/test_image_resample.py
+++ b/fsl/tests/test_image_resample.py
@@ -12,7 +12,7 @@ import fsl.data.image           as     fslimage
 import fsl.transform.affine     as     affine
 import fsl.utils.image.resample as     resample
 
-from . import make_random_image
+from fsl.tests import make_random_image
 
 def random_affine():
     return affine.compose(
diff --git a/fsl/tests/test_immv_imcp.py b/fsl/tests/test_immv_imcp.py
index 3e324841a118b16482d314251384188b78ad614b..7b3e3fcbe900927ef206e7bc5926f609b1797bec 100644
--- a/fsl/tests/test_immv_imcp.py
+++ b/fsl/tests/test_immv_imcp.py
@@ -20,9 +20,9 @@ import nibabel as nib
 import fsl.utils.imcp        as imcp
 import fsl.data.image        as fslimage
 
-from . import make_random_image
-from . import make_dummy_file
-from . import looks_like_image
+from fsl.tests import make_random_image
+from fsl.tests import make_dummy_file
+from fsl.tests import looks_like_image
 
 
 real_print = print
diff --git a/fsl/tests/test_mesh.py b/fsl/tests/test_mesh.py
index fa4f3d03c92a0f812ea2f5a204b74e4c9245bea3..294b80c7405cb86c2585c868dc64f2bb037bc7cd 100644
--- a/fsl/tests/test_mesh.py
+++ b/fsl/tests/test_mesh.py
@@ -14,7 +14,7 @@ import                 pytest
 import fsl.transform.affine as affine
 import fsl.data.mesh        as fslmesh
 
-from . import tempdir
+from fsl.tests import tempdir
 
 
 # vertices of a cube
diff --git a/fsl/tests/test_parse_data.py b/fsl/tests/test_parse_data.py
index 786a1b7bdea7fe609f6a6762d9835736f95cc810..1d801db2a15739a2a9cc183e3a850463ce2a5776 100644
--- a/fsl/tests/test_parse_data.py
+++ b/fsl/tests/test_parse_data.py
@@ -13,7 +13,7 @@ from fsl.data.gifti import GiftiMesh
 from fsl.data.image import Image
 from fsl.data.atlases import Atlas
 from pytest import raises
-from .test_image import make_image
+from fsl.tests.test_image import make_image
 import os
 import pytest
 
diff --git a/fsl/tests/test_run.py b/fsl/tests/test_run.py
index 7efd34bd608dbc9e7bd34e88634c127db89710a2..ac802d5a2ee28cd742989811d0097009baf5ea47 100644
--- a/fsl/tests/test_run.py
+++ b/fsl/tests/test_run.py
@@ -22,7 +22,7 @@ from   fsl.utils.platform import platform as fslplatform
 import fsl.utils.run                      as run
 import fsl.wrappers                       as wrappers
 
-from . import make_random_image, mockFSLDIR, CaptureStdout, touch
+from fsl.tests import make_random_image, mockFSLDIR, CaptureStdout, touch
 
 
 pytestmark = pytest.mark.unixtest
diff --git a/fsl/tests/test_scripts/test_atlasq_list_summary.py b/fsl/tests/test_scripts/test_atlasq_list_summary.py
index 6fbebb7b6ee19d9feb31e71e98923d18c03a2c08..b84e00a846299b0c622c7eea0097aafcc3ffeb26 100644
--- a/fsl/tests/test_scripts/test_atlasq_list_summary.py
+++ b/fsl/tests/test_scripts/test_atlasq_list_summary.py
@@ -13,7 +13,7 @@ import              pytest
 import fsl.data.atlases   as fslatlases
 import fsl.scripts.atlasq as fslatlasq
 
-from .. import CaptureStdout
+from fsl.tests import CaptureStdout
 
 
 pytestmark = pytest.mark.fsltest
diff --git a/fsl/tests/test_scripts/test_atlasq_ohi.py b/fsl/tests/test_scripts/test_atlasq_ohi.py
index 937a08f73765f1e4b36955cf940b43f7553dbc2f..2da2d1b73b8e2bdf103e227458acfb14080e54b2 100644
--- a/fsl/tests/test_scripts/test_atlasq_ohi.py
+++ b/fsl/tests/test_scripts/test_atlasq_ohi.py
@@ -18,9 +18,9 @@ import numpy as np
 import fsl.scripts.atlasq as fslatlasq
 import fsl.data.atlases   as fslatlases
 
-from .. import (tempdir,
-                make_random_mask,
-                CaptureStdout)
+from fsl.tests import (tempdir,
+                       make_random_mask,
+                       CaptureStdout)
 
 
 pytestmark = pytest.mark.fsltest
diff --git a/fsl/tests/test_scripts/test_atlasq_query.py b/fsl/tests/test_scripts/test_atlasq_query.py
index c02392f9133cf43962b958370b009aa834148c79..1b478c3e90512eb9ff37e075f9e498564651d0c8 100644
--- a/fsl/tests/test_scripts/test_atlasq_query.py
+++ b/fsl/tests/test_scripts/test_atlasq_query.py
@@ -21,9 +21,9 @@ import fsl.utils.image.resample as resample
 import fsl.data.image           as fslimage
 import fsl.scripts.atlasq       as fslatlasq
 
-from .. import (tempdir,
-                make_random_mask,
-                CaptureStdout)
+from fsl.tests import (tempdir,
+                       make_random_mask,
+                       CaptureStdout)
 
 
 pytestmark = pytest.mark.fsltest
diff --git a/fsl/tests/test_scripts/test_fsl_apply_x5.py b/fsl/tests/test_scripts/test_fsl_apply_x5.py
index 8d83169dee9428613fb8748054c7b97b7f3da831..7aa39fec1805ff2b3b998681c34f5216551af7f0 100644
--- a/fsl/tests/test_scripts/test_fsl_apply_x5.py
+++ b/fsl/tests/test_scripts/test_fsl_apply_x5.py
@@ -13,7 +13,7 @@ import fsl.transform.x5         as x5
 import fsl.transform.affine     as affine
 import fsl.utils.tempdir        as tempdir
 
-from ..test_transform.test_nonlinear import _affine_field
+from fsl.tests.test_transform.test_nonlinear import _affine_field
 
 
 def _random_affine():
diff --git a/fsl/tests/test_scripts/test_imglob.py b/fsl/tests/test_scripts/test_imglob.py
index f54ce26b9ce0a71bd2af594b51e9233ba7371224..63454a45c9e95120825db831fe02e188b5b0311c 100644
--- a/fsl/tests/test_scripts/test_imglob.py
+++ b/fsl/tests/test_scripts/test_imglob.py
@@ -7,8 +7,8 @@ import pytest
 
 import fsl.scripts.imglob as imglob
 
-from .. import testdir
-from .. import CaptureStdout
+from fsl.tests import testdir
+from fsl.tests import CaptureStdout
 
 
 def test_imglob_shouldPass1():
diff --git a/fsl/tests/test_scripts/test_immv_imcp.py b/fsl/tests/test_scripts/test_immv_imcp.py
index fdbc4df42e08a690f09e304aed4d48165c3593c6..5e5e38f5566b681187c77dd979e1fcd90453d6a2 100644
--- a/fsl/tests/test_scripts/test_immv_imcp.py
+++ b/fsl/tests/test_scripts/test_immv_imcp.py
@@ -23,8 +23,8 @@ import fsl.scripts.imcp      as imcp_script
 import fsl.scripts.immv      as immv_script
 import fsl.data.image        as fslimage
 
-from .. import cleardir
-from ..test_immv_imcp import makeImage, checkImageHash, checkFilesToExpect
+from fsl.tests import cleardir
+from fsl.tests.test_immv_imcp import makeImage, checkImageHash, checkFilesToExpect
 
 
 def test_imcp_script_shouldPass(move=False):
diff --git a/fsl/tests/test_scripts/test_resample_image.py b/fsl/tests/test_scripts/test_resample_image.py
index 01063067d0836359999ec205b7e23a3d7dbcb518..1dcdc345f52648333d42083987aaaa729776dca0 100644
--- a/fsl/tests/test_scripts/test_resample_image.py
+++ b/fsl/tests/test_scripts/test_resample_image.py
@@ -12,7 +12,7 @@ import fsl.transform.affine as affine
 from fsl.utils.tempdir import tempdir
 from fsl.data.image    import Image
 
-from .. import make_random_image
+from fsl.tests import make_random_image
 
 
 
diff --git a/fsl/tests/test_transform/test_flirt.py b/fsl/tests/test_transform/test_flirt.py
index d2dd68e29b114ca9813ebd1eb8511df825d8edaf..aa7b0b7387a46913a58879dfaa2d64241e86414c 100644
--- a/fsl/tests/test_transform/test_flirt.py
+++ b/fsl/tests/test_transform/test_flirt.py
@@ -15,9 +15,9 @@ import fsl.transform.flirt  as flirt
 import fsl.transform.affine as affine
 import fsl.utils.tempdir    as tempdir
 
-from .test_affine import readlines
+from fsl.tests.test_transform.test_affine import readlines
 
-from .. import make_random_image
+from fsl.tests import make_random_image
 
 
 datadir = op.join(op.dirname(__file__), 'testdata')
diff --git a/fsl/tests/test_transform/test_fnirt.py b/fsl/tests/test_transform/test_fnirt.py
index 27ceb40703e5e2506dffb762c59df562153feaf1..feeeec7c7edbf44a2c36046631e0dff72a8bd4eb 100644
--- a/fsl/tests/test_transform/test_fnirt.py
+++ b/fsl/tests/test_transform/test_fnirt.py
@@ -20,7 +20,7 @@ import fsl.transform.affine    as affine
 import fsl.transform.nonlinear as nonlinear
 import fsl.transform.fnirt     as fnirt
 
-from .test_nonlinear import _random_affine_field
+from fsl.tests.test_transform.test_nonlinear import _random_affine_field
 
 
 datadir = op.join(op.dirname(__file__), 'testdata', 'nonlinear')
diff --git a/fsl/tests/test_transform/test_x5.py b/fsl/tests/test_transform/test_x5.py
index 3a92ece655197f3fa77051c858b9fcd03bc7bb57..35716cdbe92acd8335235dce574936457ef35447 100644
--- a/fsl/tests/test_transform/test_x5.py
+++ b/fsl/tests/test_transform/test_x5.py
@@ -20,7 +20,7 @@ import fsl.transform.fnirt     as fnirt
 import fsl.transform.nonlinear as nonlinear
 import fsl.transform.x5        as x5
 
-from .. import make_random_image
+from fsl.tests import make_random_image
 
 
 def _check_metadata(group):
diff --git a/fsl/tests/test_version.py b/fsl/tests/test_version.py
index b52437f1894f159eb1643ce5279278d7de3264bf..09054cf54db4d5fc26cb69d7b717d2c621d776d3 100644
--- a/fsl/tests/test_version.py
+++ b/fsl/tests/test_version.py
@@ -10,7 +10,7 @@ import            textwrap
 
 import pytest
 
-from . import testdir
+from fsl.tests import testdir
 
 import fsl.version as fslversion
 
diff --git a/fsl/tests/test_wrappers/__init__.py b/fsl/tests/test_wrappers/__init__.py
index 4dca534cd4278553f118b3ab4d0c7876735e9976..77022f28a34e01b736acd8ea3b82c32d2d42a52f 100644
--- a/fsl/tests/test_wrappers/__init__.py
+++ b/fsl/tests/test_wrappers/__init__.py
@@ -8,7 +8,7 @@ import itertools as it
 import fsl.utils.assertions as asrt
 import fsl.utils.run        as run
 
-from .. import mockFSLDIR
+from fsl.tests import mockFSLDIR
 
 
 def checkResult(cmd, base, args, stripdir=None):
diff --git a/fsl/tests/test_wrappers/test_cluster.py b/fsl/tests/test_wrappers/test_cluster.py
index 6e0cfb8763b73922634ef4d1a0963f31435a6f14..5a7b710a8313385f5e0577b65c4d7d860a9fd141 100644
--- a/fsl/tests/test_wrappers/test_cluster.py
+++ b/fsl/tests/test_wrappers/test_cluster.py
@@ -21,8 +21,8 @@ from fsl.wrappers.cluster_commands import (cluster,
                                            smoothest,
                                            _smoothest)
 
-from .  import testenv
-from .. import mockFSLDIR
+from fsl.tests.test_wrappers import testenv
+from fsl.tests import mockFSLDIR
 
 
 @contextlib.contextmanager
diff --git a/fsl/tests/test_wrappers/test_fslmaths.py b/fsl/tests/test_wrappers/test_fslmaths.py
index ce59982577f4dd0d85a26d92c7efcb04d2188ebc..9cc1c30e2f90dfd934e5a9a5941936e103892be1 100644
--- a/fsl/tests/test_wrappers/test_fslmaths.py
+++ b/fsl/tests/test_wrappers/test_fslmaths.py
@@ -14,8 +14,8 @@ from fsl.utils.tempdir import tempdir
 
 import fsl.wrappers as fw
 
-from .. import mockFSLDIR, make_random_image
-from .  import testenv
+from fsl.tests import mockFSLDIR, make_random_image
+from fsl.tests.test_wrappers import testenv
 
 
 def test_fslmaths():
diff --git a/fsl/tests/test_wrappers/test_fslstats.py b/fsl/tests/test_wrappers/test_fslstats.py
index d5d5b885d59a4dc1c7e2c26a4d317781752ad735..9f0d78c9f9e0686f2af90595d250e65cc86e6b2e 100644
--- a/fsl/tests/test_wrappers/test_fslstats.py
+++ b/fsl/tests/test_wrappers/test_fslstats.py
@@ -15,7 +15,7 @@ import fsl.utils.run as run
 import fsl.utils.tempdir as tempdir
 import fsl.wrappers  as fw
 
-from .. import mockFSLDIR as mockFSLDIR_base, make_random_image
+from fsl.tests import mockFSLDIR as mockFSLDIR_base, make_random_image
 
 
 mock_fslstats = """
diff --git a/fsl/tests/test_wrappers/test_wrappers.py b/fsl/tests/test_wrappers/test_wrappers.py
index 02177828c14db48301ebf08e8c56ef0eb8a32ce7..b391337069a23497eb84d18d4c509b69639745e9 100755
--- a/fsl/tests/test_wrappers/test_wrappers.py
+++ b/fsl/tests/test_wrappers/test_wrappers.py
@@ -11,7 +11,7 @@ import            shlex
 
 import fsl.wrappers as fw
 
-from . import checkResult, testenv
+from fsl.tests.test_wrappers import checkResult, testenv
 
 
 def test_bet():
diff --git a/fsl/tests/test_wrappers/test_wrappers_run_arguments.py b/fsl/tests/test_wrappers/test_wrappers_run_arguments.py
index 4e38cd1af96f5e7d2bfc79aa53465f449de93ac5..dc66026bacb09094d75d85e13be7abc8d3a94b6a 100644
--- a/fsl/tests/test_wrappers/test_wrappers_run_arguments.py
+++ b/fsl/tests/test_wrappers/test_wrappers_run_arguments.py
@@ -16,7 +16,7 @@ import fsl.utils.tempdir         as tempdir
 import fsl.wrappers              as wrappers
 import fsl.wrappers.wrapperutils as wutils
 
-from .. import CaptureStdout
+from fsl.tests import CaptureStdout
 
 
 mock_command = """
diff --git a/fsl/tests/test_wrappers/test_wrapperutils.py b/fsl/tests/test_wrappers/test_wrapperutils.py
index d806cc9f7a738e90224efe942bcab34661f622c1..b9a86a2965c5b2ad0924bc5bc86f4509c6af133e 100644
--- a/fsl/tests/test_wrappers/test_wrapperutils.py
+++ b/fsl/tests/test_wrappers/test_wrapperutils.py
@@ -27,8 +27,8 @@ import fsl.data.image            as fslimage
 import fsl.wrappers.wrapperutils as wutils
 
 
-from .. import mockFSLDIR, cleardir, checkdir, testdir, touch
-from ..test_run import mock_fsl_sub
+from fsl.tests import mockFSLDIR, cleardir, checkdir, testdir, touch
+from fsl.tests.test_run import mock_fsl_sub
 
 
 def test_applyArgStyle_default():
@@ -407,6 +407,54 @@ def test_fileOrImage():
         assert np.all(np.asanyarray(result.dataobj)[:] == expected)
 
 
+
+# fsl/fslpy!452
+def test_fileOrImage_FSLOUTPUTTYPE():
+
+    @wutils.fileOrImage('img', 'output')
+    def func(img, output):
+        img = np.asanyarray(nib.load(img).dataobj)
+
+        # Save without specifying file suffix,
+        # so the Image object uses $FSLOUTPUTTYPE
+        fslimage.Image(img * 5, xform=np.eye(4)).save(fslimage.removeExt(output))
+
+    fsloutputtypes = [fslimage.FileType.NIFTI,
+                      fslimage.FileType.NIFTI2,
+                      fslimage.FileType.NIFTI_GZ,
+                      fslimage.FileType.NIFTI2_GZ]
+
+    for fsloutputtype in fsloutputtypes:
+        with tempdir.tempdir(), \
+             mock.patch.dict(os.environ, FSLOUTPUTTYPE=fsloutputtype.name):
+
+            img = fslimage.Image(
+                np.array([[[1,  2], [ 3,  4]]], dtype=np.int32), xform=np.eye(4))
+            expected = np.array([[[5, 10], [15, 20]]], dtype=np.int32)
+
+            imgfname = op.join(os.getcwd(), f'image{fslimage.defaultExt()}')
+
+            img.save(imgfname)
+
+            result1 = func(imgfname, wutils.LOAD)
+            result2 = func(img,      wutils.LOAD)
+
+            r1data = np.asanyarray(result1['output'].dataobj)
+            r2data = result2['output'].data
+
+            # first call will return a nibabel image,
+            # second a fsl Image
+            assert np.all(r1data == expected)
+            assert np.all(r2data == expected)
+
+            for inarg in (img, imgfname):
+                with tempdir.tempdir():
+                    func(inarg, 'output')
+                    assert op.exists(f'output{fslimage.defaultExt()}')
+                    out = fslimage.Image('output')
+                    assert np.all(out.data == expected.data)
+
+
 def test_fileOrThing_sequence():
 
     @wutils.fileOrArray('arrs', 'out')
diff --git a/fsl/wrappers/wrapperutils.py b/fsl/wrappers/wrapperutils.py
index 0f9a1842527d6ee3998c71808878ee0da99762d1..09871c100cc49aed32aa51b5f9676a41398da539 100644
--- a/fsl/wrappers/wrapperutils.py
+++ b/fsl/wrappers/wrapperutils.py
@@ -1268,7 +1268,8 @@ def fileOrImage(*args, **kwargs):
         return infile
 
     def prepOut(workdir, name, val):
-        return op.join(workdir, '{}.nii.gz'.format(name))
+        return op.join(workdir, f'{name}{fslimage.defaultExt()}')
+
 
     def load(name, path):