diff --git a/SConstruct b/SConstruct
index 422efe6476878779a0d8a1bbb759403906c60f28..ebed8b4ec87e7438898292da9def31020b0f7ee0 100644
--- a/SConstruct
+++ b/SConstruct
@@ -28,6 +28,8 @@ if 'DESTDIR' in env:
 
 env['libpath'] = calcInstallPath("$prefix", "lib")
 env['incpath'] = calcInstallPath("$prefix", "include", "hammer")
+env['parsersincpath'] = calcInstallPath("$prefix", "include", "hammer", "parsers")
+env['backendsincpath'] = calcInstallPath("$prefix", "include", "hammer", "backends")
 env['pkgconfigpath'] = calcInstallPath("$prefix", "lib", "pkgconfig")
 env.ScanReplace('libhammer.pc.in')
 
@@ -90,4 +92,6 @@ env.Command('test', 'build/$VARIANT/src/test_suite', 'env LD_LIBRARY_PATH=build/
 
 env.Alias("install", "$libpath")
 env.Alias("install", "$incpath")
+env.Alias("install", "$parsersincpath")
+env.Alias("install", "$backendsincpath")
 env.Alias("install", "$pkgconfigpath")
diff --git a/src/SConscript b/src/SConscript
index a06244b9d6638e2d715e77535a0ba555a12a8cf3..1d9ca7621c1983d32cae4d86490d5d95c6582834 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -6,7 +6,17 @@ bindings = []
 dist_headers = [
     "hammer.h",
     "allocator.h",
-    "glue.h"
+    "glue.h",
+    "internal.h"
+]
+
+parsers_headers = [
+    "parsers/parser_internal.h"
+]
+
+backends_headers = [
+    "backends/regex.h",
+    "backends/contextfree.h"
 ]
 
 parsers = ['parsers/%s.c'%s for s in
@@ -64,6 +74,8 @@ libhammer_static = env.StaticLibrary('hammer', parsers + backends + misc_hammer_
 
 env.Install("$libpath", [libhammer_static, libhammer_shared])
 env.Install("$incpath", dist_headers)
+env.Install("$parsersincpath", parsers_headers)
+env.Install("$backendsincpath", backends_headers)
 env.Install("$pkgconfigpath", "../../../libhammer.pc")
 
 testenv = env.Clone()