diff --git a/var/spack/repos/builtin/packages/cp2k/package.py b/var/spack/repos/builtin/packages/cp2k/package.py
index a76832ac48672ecc60f4b9b9f5e05aa3611b0433..7c568c712a4e0353c43d29f81ea110ba2e96a1a8 100644
--- a/var/spack/repos/builtin/packages/cp2k/package.py
+++ b/var/spack/repos/builtin/packages/cp2k/package.py
@@ -284,13 +284,9 @@ def edit(self, spec, prefix):
         if '+elpa' in self.spec:
             elpa = spec['elpa']
             elpa_suffix = '_openmp' if '+openmp' in elpa else ''
-            elpa_base_path = os.path.join(
-                elpa.prefix,
-                'include',
-                'elpa{suffix}-{version!s}'.format(
-                    suffix=elpa_suffix, version=elpa.version))
+            elpa_incdir = elpa.headers.directories[0]
 
-            fcflags.append('-I' + os.path.join(elpa_base_path, 'modules'))
+            fcflags += ['-I{0}'.format(os.path.join(elpa_incdir, 'modules'))]
             libs.append(os.path.join(elpa.libs.directories[0],
                                      ('libelpa{elpa_suffix}.{dso_suffix}'
                                       .format(elpa_suffix=elpa_suffix,
@@ -307,7 +303,7 @@ def edit(self, spec, prefix):
                 cppflags.append('-D__ELPA={0}{1:02d}'
                                 .format(elpa.version[0],
                                         int(elpa.version[1])))
-                fcflags.append('-I' + os.path.join(elpa_base_path, 'elpa'))
+                fcflags += ['-I{0}'.format(os.path.join(elpa_incdir, 'elpa'))]
 
         if self.spec.satisfies('+sirius'):
             sirius = spec['sirius']
diff --git a/var/spack/repos/builtin/packages/elpa/package.py b/var/spack/repos/builtin/packages/elpa/package.py
index 914aa3a98fa2c7ca539453d2e3f90ef92ab5caff..b538485d98cfc88d366cc261e537f9bc20b3382a 100644
--- a/var/spack/repos/builtin/packages/elpa/package.py
+++ b/var/spack/repos/builtin/packages/elpa/package.py
@@ -3,6 +3,8 @@
 #
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 
+import os
+
 from spack import *
 
 
@@ -43,6 +45,18 @@ def libs(self):
             libname, root=self.prefix, shared=True, recursive=True
         )
 
+    @property
+    def headers(self):
+        suffix = '_openmp' if self.spec.satisfies('+openmp') else ''
+        incdir = os.path.join(
+            self.spec.prefix.include,
+            'elpa{suffix}-{version!s}'.format(
+                suffix=suffix, version=self.spec.version))
+
+        hlist = find_all_headers(incdir)
+        hlist.directories = [incdir]
+        return hlist
+
     build_directory = 'spack-build'
 
     def setup_environment(self, spack_env, run_env):
diff --git a/var/spack/repos/builtin/packages/quantum-espresso/package.py b/var/spack/repos/builtin/packages/quantum-espresso/package.py
index ad7ad1a3e4b36706c9519cd412fc2ca1b20fa999..2281b5907670c74232a098f34e97fffcb4d9b455 100644
--- a/var/spack/repos/builtin/packages/quantum-espresso/package.py
+++ b/var/spack/repos/builtin/packages/quantum-espresso/package.py
@@ -217,13 +217,13 @@ def install(self, spec, prefix):
             # Spec for elpa
             elpa = spec['elpa']
 
-            # Find where the Fortran module resides
-            elpa_module = find(elpa.prefix, 'elpa.mod')
-
             # Compute the include directory from there: versions
             # of espresso prior to 6.1 requires -I in front of the directory
             elpa_include = '' if '@6.1:' in spec else '-I'
-            elpa_include += os.path.dirname(elpa_module[0])
+            elpa_include += os.path.join(
+                elpa.headers.directories[0],
+                'modules'
+            )
 
             options.extend([
                 '--with-elpa-include={0}'.format(elpa_include),
diff --git a/var/spack/repos/builtin/packages/sirius/package.py b/var/spack/repos/builtin/packages/sirius/package.py
index 3cbb3643df8ec840e3c5b83397e7ed56afdb7fca..d8ccc7e3769e2a404e5837ffd820c1057e1b73c3 100644
--- a/var/spack/repos/builtin/packages/sirius/package.py
+++ b/var/spack/repos/builtin/packages/sirius/package.py
@@ -81,15 +81,10 @@ def _def(variant, flag=None):
         ]
 
         if self.spec.satisfies('+elpa'):
-            elpa = self.spec['elpa']
-            elpa_suffix = '_openmp' if elpa.satisfies('+openmp') else ''
             elpa_incdir = os.path.join(
-                elpa.prefix,
-                'include',
-                'elpa{suffix}-{version!s}'.format(
-                    suffix=elpa_suffix, version=elpa.version),
-                'elpa')
-
+                self.spec['elpa'].headers.directories[0],
+                'elpa'
+            )
             args += ["-DELPA_INCLUDE_DIR={0}".format(elpa_incdir)]
 
         return args