diff --git a/src/EntityManager.cpp b/src/EntityManager.cpp
index d993860..298dac3 100644
--- a/src/EntityManager.cpp
+++ b/src/EntityManager.cpp
@@ -29,7 +29,7 @@
 #include <boost/container/flat_map.hpp>
 #include <boost/container/flat_set.hpp>
 #include <VariantVisitors.hpp>
-#include <experimental/filesystem>
+#include "filesystem.hpp"
 
 constexpr const char *OUTPUT_DIR = "/var/configuration/";
 constexpr const char *configurationDirectory = PACKAGE_DIR "configurations";
@@ -40,7 +40,6 @@
 constexpr const int32_t MAX_MAPPER_DEPTH = 0;
 constexpr const size_t SLEEP_AFTER_PROPERTIES_CHANGE_SECONDS = 5;
 
-namespace fs = std::experimental::filesystem;
 namespace variant_ns = sdbusplus::message::variant_ns;
 struct cmp_str
 {
@@ -499,7 +498,7 @@
 // writes output files to persist data
 bool writeJsonFiles(const nlohmann::json &systemConfiguration)
 {
-    std::experimental::filesystem::create_directory(OUTPUT_DIR);
+    std::filesystem::create_directory(OUTPUT_DIR);
     std::ofstream output(std::string(OUTPUT_DIR) + "system.json");
     if (!output.good())
     {
@@ -1141,8 +1140,8 @@
 bool findJsonFiles(std::list<nlohmann::json> &configurations)
 {
     // find configuration files
-    std::vector<fs::path> jsonPaths;
-    if (!findFiles(fs::path(configurationDirectory),
+    std::vector<std::filesystem::path> jsonPaths;
+    if (!findFiles(std::filesystem::path(configurationDirectory),
                    R"(.*\.json)", jsonPaths))
     {
         std::cerr << "Unable to find any configuration files in "
@@ -1157,6 +1156,7 @@
         std::cerr
             << "Cannot open schema file,  cannot validate JSON, exiting\n\n";
         std::exit(EXIT_FAILURE);
+        return false;
     }
     nlohmann::json schema = nlohmann::json::parse(schemaStream, nullptr, false);
     if (schema.is_discarded())
@@ -1164,6 +1164,7 @@
         std::cerr
             << "Illegal schema file detected, cannot validate JSON, exiting\n";
         std::exit(EXIT_FAILURE);
+        return false;
     }
 
     for (auto &jsonPath : jsonPaths)
@@ -1198,6 +1199,7 @@
             configurations.emplace_back(data);
         }
     }
+    return true;
 }
 
 struct PerformScan : std::enable_shared_from_this<PerformScan>
diff --git a/src/FruDevice.cpp b/src/FruDevice.cpp
index 0590717..ca0e541 100644
--- a/src/FruDevice.cpp
+++ b/src/FruDevice.cpp
@@ -37,7 +37,7 @@
 #include <linux/i2c-dev.h>
 }
 
-namespace fs = std::experimental::filesystem;
+namespace fs = std::filesystem;
 static constexpr bool DEBUG = false;
 static size_t UNKNOWN_BUS_OBJECT_COUNT = 0;
 constexpr size_t MAX_FRU_SIZE = 512;
@@ -59,7 +59,7 @@
 
 static bool isMuxBus(size_t bus)
 {
-    return is_symlink(std::experimental::filesystem::path(
+    return is_symlink(std::filesystem::path(
         "/sys/bus/i2c/devices/i2c-" + std::to_string(bus) + "/mux_device"));
 }
 
diff --git a/src/Overlay.cpp b/src/Overlay.cpp
index 0f25eb5..5596ac3 100644
--- a/src/Overlay.cpp
+++ b/src/Overlay.cpp
@@ -19,7 +19,7 @@
 #include <regex>
 #include <boost/process/child.hpp>
 #include <boost/algorithm/string/predicate.hpp>
-#include <experimental/filesystem>
+#include "filesystem.hpp"
 #include <boost/container/flat_map.hpp>
 #include <boost/container/flat_set.hpp>
 #include <nlohmann/json.hpp>
@@ -72,8 +72,8 @@
         return;
     }
 
-    std::experimental::filesystem::path pathObj(driver);
-    for (auto &p : std::experimental::filesystem::directory_iterator(pathObj))
+    std::filesystem::path pathObj(driver);
+    for (auto &p : std::filesystem::directory_iterator(pathObj))
     {
         // symlinks are object names
         if (is_symlink(p))
@@ -109,11 +109,10 @@
 // when muxes create new i2c devices, the symbols are not there to map the new
 // i2c devices to the mux address. this looks up the device tree path and adds
 // the new symbols so the new devices can be referenced via the phandle
-void fixupSymbols(
-    const std::vector<std::experimental::filesystem::path> &i2cDevsBefore)
+void fixupSymbols(const std::vector<std::filesystem::path> &i2cDevsBefore)
 {
-    std::vector<std::experimental::filesystem::path> i2cDevsAfter;
-    findFiles(std::experimental::filesystem::path(I2C_DEVS_DIR),
+    std::vector<std::filesystem::path> i2cDevsAfter;
+    findFiles(std::filesystem::path(I2C_DEVS_DIR),
               R"(i2c-\d+)", i2cDevsAfter);
 
     for (const auto &dev : i2cDevsAfter)
@@ -127,9 +126,8 @@
         std::string bus =
             std::regex_replace(dev.string(), std::regex("^.*-"), "");
         std::string devtreeRef = dev.string() + "/device/of_node";
-        auto devtreePath = std::experimental::filesystem::path(devtreeRef);
-        std::string symbolPath =
-            std::experimental::filesystem::canonical(devtreePath);
+        auto devtreePath = std::filesystem::path(devtreeRef);
+        std::string symbolPath = std::filesystem::canonical(devtreePath);
         symbolPath =
             symbolPath.substr(sizeof("/sys/firmware/devicetree/base") - 1);
         nlohmann::json configuration = {{"Path", symbolPath},
@@ -190,12 +188,11 @@
         const std::string &addressHex = hex.str();
         std::string busStr = std::to_string(*bus);
 
-        std::experimental::filesystem::path devicePath(device);
+        std::filesystem::path devicePath(device);
         const std::string &dir = devicePath.parent_path().string();
-        for (const auto &path :
-             std::experimental::filesystem::directory_iterator(dir))
+        for (const auto &path : std::filesystem::directory_iterator(dir))
         {
-            if (!std::experimental::filesystem::is_directory(path))
+            if (!std::filesystem::is_directory(path))
             {
                 continue;
             }
@@ -321,8 +318,8 @@
 bool loadOverlays(const nlohmann::json &systemConfiguration)
 {
 
-    std::vector<std::experimental::filesystem::path> paths;
-    if (!findFiles(std::experimental::filesystem::path(TEMPLATE_DIR),
+    std::vector<std::filesystem::path> paths;
+    if (!findFiles(std::filesystem::path(TEMPLATE_DIR),
                    R"(.*\.template)", paths))
     {
         std::cerr << "Unable to find any tempate files in " << TEMPLATE_DIR
@@ -330,7 +327,7 @@
         return false;
     }
 
-    std::experimental::filesystem::create_directory(OUTPUT_DIR);
+    std::filesystem::create_directory(OUTPUT_DIR);
     for (auto entity = systemConfiguration.begin();
          entity != systemConfiguration.end(); entity++)
     {
diff --git a/src/Utils.cpp b/src/Utils.cpp
index be7b35c..dda3b40 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -15,7 +15,7 @@
 */
 
 #include <Utils.hpp>
-#include <experimental/filesystem>
+#include "filesystem.hpp"
 #include <fstream>
 #include <regex>
 #include <valijson/adapters/nlohmann_json_adapter.hpp>
@@ -23,7 +23,7 @@
 #include <valijson/schema_parser.hpp>
 #include <valijson/validator.hpp>
 
-namespace fs = std::experimental::filesystem;
+namespace fs = std::filesystem;
 
 bool findFiles(const fs::path &dirPath, const std::string &matchString,
                std::vector<fs::path> &foundPaths)
@@ -57,4 +57,4 @@
         return false;
     }
     return true;
-}
\ No newline at end of file
+}
