diff --git a/CHANGELOG.md b/CHANGELOG.md
index dda53a347d2bea3c854ca946a74657335f926b18..d8aba1bf3c74d4edb1ebb4cc3d4dab0b27d4bf9d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 * Fixed issue where `LD_LIBRARY_PATH` could keep old `siteLibs` path around
 * Removed duplicated entries from generated `.dep` files
 * Removed `dev` targets from modules that function in "local source mode"
+* Fixed issue where `.hpp` files were not installed correctly with `KEEP_HEADER_SUBDIRS`
 
 ### Other changes
 * Removed `<module>_TEMPLATES` in favour of `<module>_DB`
diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile
index 6c97297647703d9e0ef2809403930ca8aa8c6b15..fb6bd69030b9aef426ca0fdfe055ef9f90886bfc 100644
--- a/require-ess/tools/driver.makefile
+++ b/require-ess/tools/driver.makefile
@@ -742,7 +742,10 @@ debug::
 define install_subdirs
 $1_HDRS = $$(filter $1/%,$$(HDRS))
 INSTALL_HDRS += $$(addprefix $$(INSTALL_INCLUDE)/,$$($1_HDRS:$1/%=%))
-vpath %h ../$1
+vpath %.h ../$1
+vpath %.hpp ../$1
+vpath %.hh ../$1
+vpath %.hxx ../$1
 debug::
 	@echo "$1_HDRS = $$($1_HDRS)"
 endef