diff --git a/setup.py b/setup.py
index 472cd7b734023424b9e8e5c750a085416d44df32..6f1b1d6596d461609b18a3eae7549a3eb6ae4bdc 100755
--- a/setup.py
+++ b/setup.py
@@ -541,6 +541,17 @@ def main():
          dict(sources=['kwant/linalg/_mumps.pyx'],
               depends=['kwant/linalg/cmumps.pxd']))])
 
+    # Add NumPy header path to include_dirs of all the extensions.
+    try:
+        import numpy
+    except ImportError:
+        print(banner(' Caution '), 'NumPy header directory cannot be determined'
+              ' ("import numpy" failed).', banner(), sep='\n', file=sys.stderr)
+    else:
+        numpy_include = numpy.get_include()
+        for ext in exts.values():
+            ext.setdefault('include_dirs', []).append(numpy_include)
+
     aliases = [('lapack', 'kwant.linalg.lapack'),
                ('mumps', 'kwant.linalg._mumps')]
 
@@ -553,13 +564,6 @@ def main():
     exts = configure_special_extensions(exts, build_summary)
     exts = maybe_cythonize(exts)
 
-    try:
-        import numpy
-    except ImportError:
-        numpy_include_dirs = []
-    else:
-        numpy_include_dirs = [numpy.get_include()]
-
     classifiers = """\
         Development Status :: 5 - Production/Stable
         Intended Audience :: Science/Research
@@ -589,7 +593,6 @@ def main():
                     'build_ext': kwant_build_ext,
                     'build_tut': kwant_build_tut},
           ext_modules=exts,
-          include_dirs=numpy_include_dirs,
           setup_requires=['pytest-runner >= 2.7'],
           tests_require=['numpy > 1.6.1', 'pytest >= 2.6.3'],
           install_requires=['numpy > 1.6.1', 'scipy >= 0.11.0', 'tinyarray'],