diff --git a/README.md b/README.md
index 7421b48..4bfe564 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,20 @@
 # phosphor-virtual-sensor
 
-phosphor-virtual-sensor reads in virtual_sensor_config.json
-There are two types of data in this file:
+phosphor-virtual-sensor reads the configuration file
+`virtual_sensor_config.json` from one of three locations:
+
+1. The current directory.
+2. `/var/lib/phosphor-virtual-sensor`
+3. `/usr/share/phosphor-virtual-sensor`
+
+By default the repository will install a sample config into (3).
+
+There are two types of data in this file.
 
 ## virtual sensor configuration information
 
-See virtual_sensor_config.json in this repository for an example. Sensors added
-this way can use any expression that is accepted by exprtk.
+See `virtual_sensor_config.json` in this repository for an example. Sensors
+added this way can use any expression that is accepted by exprtk.
 
 ## information to get a virtual sensor configuraton from D-Bus
 
@@ -21,14 +29,14 @@
 }
 ```
 
-Sensors added this way can only use a set of restricted calculations. At this
-stage the only type supported is modifiedMedian.
+Sensors added this way can only use a set of restricted calculations. Currently
+the only type supported is `modifiedMedian`.
 
-The virtual sensor configuration information needs to be added into the
-relevant hardware configuration file in entity-manager. This method of adding a
-virtual sensor allows a recipe that builds for different hardware
-configurations to have different virtual sensors for each configuration.
+The virtual sensor configuration information needs to be added into the relevant
+hardware configuration file in entity-manager. This method of adding a virtual
+sensor allows a recipe that builds for different hardware configurations to have
+different virtual sensors for each configuration.
 
-The virtual sensor configuration in entity manager follows a different format
-to the JSON in virtual_sensor_config.json (specified in
+The virtual sensor configuration in entity manager follows a different format to
+the JSON in `virtual_sensor_config.json` (specified in
 [entity-manager/schemas/VirtualSensor.json](https://github.com/openbmc/entity-manager/blob/master/schemas/virtual_sensor.json)).
diff --git a/meson.build b/meson.build
index 05fbfc3..40362a3 100644
--- a/meson.build
+++ b/meson.build
@@ -55,19 +55,7 @@
     meson.project_name(),
 )
 
-configfile = 'virtual_sensor_config.json'
-confpath = '"' + join_paths(
-    packagedir,
-    configfile,
-) + '"'
-
-install_data(sources : configfile, install_dir : packagedir)
-
-conf_data = configuration_data()
-conf_data.set('VIRTUAL_SENSOR_CONFIG_FILE', confpath)
-
-configure_file(output : 'config.hpp',
-               configuration : conf_data)
+install_data(sources : 'virtual_sensor_config.json', install_dir : packagedir)
 
 systemd = dependency('systemd')
 conf_data = configuration_data()
diff --git a/virtualSensor.cpp b/virtualSensor.cpp
index e2e0399..e8fc218 100644
--- a/virtualSensor.cpp
+++ b/virtualSensor.cpp
@@ -1,7 +1,5 @@
 #include "virtualSensor.hpp"
 
-#include "config.hpp"
-
 #include <phosphor-logging/lg2.hpp>
 
 #include <fstream>
@@ -772,8 +770,25 @@
 }
 
 /** @brief Parsing Virtual Sensor config JSON file  */
-Json VirtualSensors::parseConfigFile(const std::string& configFile)
+Json VirtualSensors::parseConfigFile()
 {
+    using path = std::filesystem::path;
+    auto configFile = []() -> path {
+        static constexpr auto name = "virtual_sensor_config.json";
+
+        for (auto pathSeg : {std::filesystem::current_path(),
+                             path{"/var/lib/phosphor-virtual-sensor"},
+                             path{"/usr/share/phosphor-virtual-sensor"}})
+        {
+            auto file = pathSeg / name;
+            if (std::filesystem::exists(file))
+            {
+                return file;
+            }
+        }
+        return name;
+    }();
+
     std::ifstream jsonFile(configFile);
     if (!jsonFile.is_open())
     {
@@ -955,7 +970,7 @@
 {
     static const Json empty{};
 
-    auto data = parseConfigFile(VIRTUAL_SENSOR_CONFIG_FILE);
+    auto data = parseConfigFile();
 
     // print values
     if (DEBUG)
diff --git a/virtualSensor.hpp b/virtualSensor.hpp
index d85303a..921aee2 100644
--- a/virtualSensor.hpp
+++ b/virtualSensor.hpp
@@ -281,7 +281,7 @@
     /** @brief Get virual sensor config from DBus**/
     ManagedObjectType getObjectsFromDBus();
     /** @brief Parsing virtual sensor config JSON file  */
-    Json parseConfigFile(const std::string& configFile);
+    Json parseConfigFile();
 
     /** @brief Matches for virtual sensors */
     std::vector<std::unique_ptr<sdbusplus::bus::match_t>> matches;
