diff --git a/tests/test_vtk.py b/tests/test_vtk.py
new file mode 100644
index 0000000000000000000000000000000000000000..44e0320926afb2df5087d4bb94e2f3c8970caa93
--- /dev/null
+++ b/tests/test_vtk.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+#
+# test_vtk.py -
+#
+# Author: Paul McCarthy <pauldmccarthy@gmail.com>
+#
+
+
+import            tempfile
+import            shutil
+import os.path as op
+
+import numpy as np
+
+import pytest
+
+import fsl.data.vtk as fslvtk
+
+
+datadir = op.join(op.dirname(__file__), 'testdata')
+
+
+def test_create_vtkmesh():
+
+    # Test:
+    #  - create from file
+    #  - create from inmem data
+    testbase = 'test_mesh.vtk'
+    testfile = op.join(datadir, testbase)
+
+    verts, lens, indices = fslvtk.loadVTKPolydataFile(testfile)
+
+    mesh = fslvtk.VTKMesh(testfile)
+
+    assert mesh.name       == testbase
+    assert mesh.dataSource == testfile
+
+    assert mesh.vertices.shape == (642,  3)
+    assert mesh.indices.shape  == (1280, 3)
+
+    minbounds = np.array([ 59.50759888,  88.43039703,  72.10890198])
+    maxbounds = np.array([ 77.72619629, 128.40600586,  94.82050323])
+
+    meshBounds = mesh.bounds
+
+    assert np.all(np.isclose(meshBounds[0], minbounds))
+    assert np.all(np.isclose(meshBounds[1], maxbounds))
+
+
+def test_loadVTKPolydataFile():
+
+    testfile = op.join(datadir, 'test_mesh.vtk')
+    verts, lens, indices = fslvtk.loadVTKPolydataFile(testfile)
+
+    assert verts.shape   == (642, 3)
+    assert indices.shape == (3840, )
+    assert lens.shape    == (1280, )
+    assert np.all(lens == 3)
+
+
+def test_getFIRSTPrefix():
+
+    failures = [
+        'blob.txt',
+        'blob.vtk',
+        'blob.nii.gz']
+
+    passes = [
+        ('blurgh-L_Thal_first.vtk', 'blurgh'),
+        ('blurgh-L_Accu_first.vtk', 'blurgh'),
+        ('blurgh_bufuu-R_Hipp_first.vtk', 'blurgh_bufuu'),
+    ]
+
+    for f in failures:
+        with pytest.raises(ValueError):
+            fslvtk.getFIRSTPrefix(f)
+
+    for fname, expected in passes:
+        assert fslvtk.getFIRSTPrefix(fname) == expected
+
+
+
+def test_findReferenceImage():
+
+    testdir  = tempfile.mkdtemp()
+    vtkfiles = ['struc-L_Thal_first.vtk',
+                'struc_first-L_Thal_first.vtk']
+
+    assert fslvtk.findReferenceImage('nofile') is None
+
+    try:
+
+        for fname in vtkfiles:
+
+            assert fslvtk.findReferenceImage(fname) is None
+
+            prefix   = fslvtk.getFIRSTPrefix(fname)
+            imgfname = op.join(testdir, '{}.nii.gz'.format(prefix))
+            fname    = op.join(testdir, fname)
+
+            with open(fname,    'wt') as f: f.write(fname)
+            with open(imgfname, 'wt') as f: f.write(imgfname)
+
+            assert fslvtk.findReferenceImage(fname) == imgfname
+
+    finally:
+        shutil.rmtree(testdir)