diff --git a/src/Navaids/NavDataCache.cxx b/src/Navaids/NavDataCache.cxx
index b34ef81a1..896199e0a 100644
--- a/src/Navaids/NavDataCache.cxx
+++ b/src/Navaids/NavDataCache.cxx
@@ -235,12 +235,6 @@ public:
   }
 };
 
-struct DatFilesGroupInfo {
-  NavDataCache::DatFileType datFileType; // for instance, DATFILETYPE_APT
-  PathList paths;               // SGPath instances
-  std::size_t totalSize;        // total size of all these files, in bytes
-};
-
 class NavDataCache::NavDataCachePrivate
 {
 public:
@@ -340,10 +334,11 @@ public:
   }
 
   bool isCachedFileModified(const SGPath& path, bool verbose);
-  DatFilesGroupInfo findDatFiles(NavDataCache::DatFileType datFileType)
-    const;
-  bool areDatFilesModified(const DatFilesGroupInfo& datFilesGroupInfo,
-                           bool verbose);
+  NavDataCache::DatFilesGroupInfo findDatFiles(
+    NavDataCache::DatFileType datFileType) const;
+  bool areDatFilesModified(
+    const NavDataCache::DatFilesGroupInfo& datFilesGroupInfo,
+    bool verbose);
 
   void callSqlite(int result, const string& sql)
   {
@@ -860,7 +855,7 @@ public:
   bool transactionAborted;
   sqlite3_stmt_ptr beginTransactionStmt, commitTransactionStmt, rollbackTransactionStmt;
 
-  DatFilesGroupInfo aptDatFilesInfo;
+  NavDataCache::DatFilesGroupInfo aptDatFilesInfo;
   SGPath metarDatPath, navDatPath, fixDatPath, poiDatPath,
   carrierDatPath, airwayDatPath;
 
@@ -1027,10 +1022,10 @@ bool NavDataCache::NavDataCachePrivate::isCachedFileModified(const SGPath& path,
 // $FG_ROOT/Airports/apt.dat.gz for the 'apt' type).
 // Also compute the total size of all these files (in bytes), which is useful
 // for progress information.
-DatFilesGroupInfo NavDataCache::NavDataCachePrivate::findDatFiles(
+NavDataCache::DatFilesGroupInfo NavDataCache::NavDataCachePrivate::findDatFiles(
   NavDataCache::DatFileType datFileType) const
 {
-  DatFilesGroupInfo result;
+  NavDataCache::DatFilesGroupInfo result;
   SGPath visitedPath;           // to avoid duplicates and time wasting
   const string datFilesSubDir = "NavData/" +
                                NavDataCache::datTypeStr[datFileType];
@@ -1093,7 +1088,7 @@ DatFilesGroupInfo NavDataCache::NavDataCachePrivate::findDatFiles(
 // This comparison is sensitive to the number and order of the files,
 // their respective SGPath::realpath() and SGPath::modTime().
 bool NavDataCache::NavDataCachePrivate::areDatFilesModified(
-  const DatFilesGroupInfo& datFilesGroupInfo,
+  const NavDataCache::DatFilesGroupInfo& datFilesGroupInfo,
   bool verbose)
 {
   // 'apt' or 'metar' or 'fix' or...
@@ -1280,6 +1275,22 @@ void NavDataCache::updateListsOfDatFiles() {
   d->airwayDatPath.append("Navaids/awy.dat.gz");
 }
 
+NavDataCache::DatFilesGroupInfo
+NavDataCache::getDatFilesInfo(DatFileType datFileType) const
+{
+  switch (datFileType) {
+    case DATFILETYPE_APT:
+      return d->aptDatFilesInfo;
+    default:
+      SG_LOG(SG_NAVCACHE, SG_ALERT,
+             "NavCache: requesting info about the list of " <<
+             datTypeStr[datFileType] << " dat files, however this is not "
+             "implemented yet!");
+      assert(false);
+      return DatFilesGroupInfo();
+  }
+}
+
 bool NavDataCache::isRebuildRequired()
 {
     if (d->readOnly) {
diff --git a/src/Navaids/NavDataCache.hxx b/src/Navaids/NavDataCache.hxx
index 5127ace69..94d12e728 100644
--- a/src/Navaids/NavDataCache.hxx
+++ b/src/Navaids/NavDataCache.hxx
@@ -25,9 +25,11 @@
 #define FG_NAVDATACACHE_HXX
 
 #include <memory>
+#include <cstddef>                   // for std::size_t
 
 #include <simgear/misc/strutils.hxx> // for string_list
 #include <Navaids/positioned.hxx>
+#include <Main/globals.hxx>          // for PathList
 
 class SGPath;
 class FGRunway;
@@ -63,10 +65,30 @@ public:
 
     SGPath path() const;
 
-    // Update d->aptDatPaths, d->metarDatPath, d->navDatPath, d->fixDatPath,
-    // d->poiDatPath, etc. by looking into $scenery_path/NavData for each
-    // scenery path.
+    enum DatFileType {
+      DATFILETYPE_APT = 0,
+      DATFILETYPE_METAR,
+      DATFILETYPE_AWY,
+      DATFILETYPE_NAV,
+      DATFILETYPE_FIX,
+      DATFILETYPE_POI,
+      DATFILETYPE_CARRIER,
+      DATFILETYPE_TACAN_FREQ
+    };
+
+    struct DatFilesGroupInfo {
+      DatFileType datFileType;      // for instance, DATFILETYPE_APT
+      PathList paths;               // SGPath instances
+      std::size_t totalSize;        // total size of all these files, in bytes
+    };
+
+    // Update d->aptDatFilesInfo, d->metarDatPath, d->navDatPath,
+    // d->fixDatPath, d->poiDatPath, etc. by looking into
+    // $scenery_path/NavData for each scenery path.
     void updateListsOfDatFiles();
+    // Return d->aptDatFilesInfo if datFileType == DATFILETYPE_APT, etc.
+    DatFilesGroupInfo getDatFilesInfo(DatFileType datFileType) const;
+
   /**
    * predicate - check if the cache needs to be rebuilt.
    * This can happen is the cache file is missing or damaged, or one of the
@@ -299,19 +321,6 @@ private:
     void commitTransaction();
     void abortTransaction();
 
-  friend class DatFilesGroupInfo;
-
-  enum DatFileType {
-    DATFILETYPE_APT = 0,
-    DATFILETYPE_METAR,
-    DATFILETYPE_AWY,
-    DATFILETYPE_NAV,
-    DATFILETYPE_FIX,
-    DATFILETYPE_POI,
-    DATFILETYPE_CARRIER,
-    DATFILETYPE_TACAN_FREQ
-  };
-
   // datTypeStr[DATFILETYPE_APT] = std::string("apt"), etc. This gives, among
   // other things, the subdirectory of $scenery_path/NavData where each type
   // of dat file is looked for.