diff --git a/SConstruct b/SConstruct
index 708b24e70022ec74a26a9f3659543be2a3cabe74..7f9c1079cec2d8fbbe786ae9c7119ecb400503a6 100644
--- a/SConstruct
+++ b/SConstruct
@@ -385,11 +385,14 @@ blender/blender_niflib.cpp
 # (SCons bug: SharedLibrary should also build .lib file, but this is broken; so for now just build static one)
 niflib = env.StaticLibrary('niflib', [core_objfiles, gen_objfiles, obj_objfiles, NvTriStrip_files, TriStripper_files] , LIBPATH='.', CPPPATH = '.')
 
+Export('env python_lib python_libpath python_include niflib')
+
 # build Python wrapper
 if PYWRAP:
-    SConscript('swig/SConscript' , exports=['env', 'python_lib', 'python_libpath', 'python_include', 'niflib', 'TEST'])
+    niflib_swig = SConscript('swig/SConscript')
+    Export('niflib_swig')
 
 # A test program:
 if TEST:
-    env.Program('niflib_test', 'niflib_test.cpp', LIBS=[niflib], LIBPATH=['.'])
+    SConscript('test/SConscript')
 
diff --git a/swig/SConscript b/swig/SConscript
index 18550b79e7c1ef358d9d501a5839303ed3212b2f..b6d2575cdeb505a68d02b2629a595acef1b6ab05 100644
--- a/swig/SConscript
+++ b/swig/SConscript
@@ -2,8 +2,4 @@ Import('*')
 
 niflib_python = env.SharedLibrary('_niflib', 'pyniflib.i', LIBS=[niflib] + python_lib, LIBPATH = python_libpath, SWIGFLAGS = '-c++ -python', CPPPATH = ['.'] + python_include, SHLIBPREFIX='')
 
-if TEST:
-    import unittest
-    import niflib_test
-    unittest.main(niflib_test)
-
+Return('niflib_python')
diff --git a/swig/niflib_test.py b/test/niflib_test.py
similarity index 100%
rename from swig/niflib_test.py
rename to test/niflib_test.py
diff --git a/test/runtest.py b/test/runtest.py
new file mode 100644
index 0000000000000000000000000000000000000000..6eaae35e487f03c3d14dcacf609863937a6a7a1d
--- /dev/null
+++ b/test/runtest.py
@@ -0,0 +1,10 @@
+import unittest
+import niflib_test
+import os
+
+# run test.cpp
+os.system("test")
+
+# run python tests
+unittest.main(niflib_test)
+
diff --git a/niflib_test.cpp b/test/test.cpp
similarity index 93%
rename from niflib_test.cpp
rename to test/test.cpp
index eecee5a2e41c612e3e45bfd5122c9ec6a5e15363..c24bc4ce0c55c750b5fbdb2c947a0b6b4e694bf8 100644
--- a/niflib_test.cpp
+++ b/test/test.cpp
@@ -1,7 +1,7 @@
 #include <cassert>
 
-#include "include/niflib.h"
-#include "include/obj/NiNode.h"
+#include "../include/niflib.h"
+#include "../include/obj/NiNode.h"
 
 using namespace Niflib;
 using namespace std;