diff --git a/.gitmodules b/.gitmodules
index 641c780c1e98fc89056e7e75ccd76fef4759a49e..daef624a443a26780da38c46f383dbb991af2b0c 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -14,3 +14,6 @@
 [submodule "dune/perftool/vectorclass"]
 	path = dune/perftool/vectorclass
 	url = https://github.com/darealshinji/vectorclass.git
+[submodule "python/pytools"]
+	path = python/pytools
+	url = https://github.com/inducer/pytools.git
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index e3c67559b3c7fc897e8923b34c25673a924c0d39..6346c1f7ddb14a6c27a5116d3aab925a0d3c86e0 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -9,6 +9,7 @@ create_virtualenv_wrapper(COMMANDS python -m IPython notebook
                           NAME notebook)
 
 # Install all the external packages that we have as submodules
+dune_install_python_package(PATH pytools)
 dune_install_python_package(PATH cgen)
 dune_install_python_package(PATH pymbolic)
 dune_install_python_package(PATH loopy)
diff --git a/python/pytools b/python/pytools
new file mode 160000
index 0000000000000000000000000000000000000000..6c5830f6e007f4ece99d75c83b0f72550cad80c2
--- /dev/null
+++ b/python/pytools
@@ -0,0 +1 @@
+Subproject commit 6c5830f6e007f4ece99d75c83b0f72550cad80c2