diff --git a/virtualSensor.cpp b/virtualSensor.cpp
index 501d9cd..ac5e123 100644
--- a/virtualSensor.cpp
+++ b/virtualSensor.cpp
@@ -84,7 +84,9 @@
             if (j.find("ParamName") != j.end())
             {
                 auto paramPtr = std::make_unique<SensorParam>(j["Value"]);
-                paramMap.emplace(j["ParamName"], std::move(paramPtr));
+                std::string name = j["ParamName"];
+                symbols.create_variable(name);
+                paramMap.emplace(std::move(name), std::move(paramPtr));
             }
             else
             {
@@ -114,12 +116,21 @@
                     objPath += sensorType + "/" + name;
 
                     auto paramPtr = std::make_unique<SensorParam>(bus, objPath);
-                    paramMap.emplace(j["ParamName"], std::move(paramPtr));
+                    std::string name = j["ParamName"];
+                    symbols.create_variable(name);
+                    paramMap.emplace(std::move(name), std::move(paramPtr));
                 }
             }
         }
     }
 
+    symbols.add_constants();
+    expression.register_symbol_table(symbols);
+
+    /* parser from exprtk */
+    exprtk::parser<double> parser{};
+    parser.compile(exprStr, expression);
+
     /* Print all parameters for debug purpose only */
     if (DEBUG)
         printParams(paramMap);
@@ -138,9 +149,27 @@
     WarningInterface::warningLow(sensorThreshold.warningLow);
 }
 
-/* TBD */
 void VirtualSensor::updateVirtualSensor()
-{}
+{
+    for (auto& param : paramMap)
+    {
+        auto& name = param.first;
+        auto& data = param.second;
+        if (auto var = symbols.get_variable(name))
+        {
+            var->ref() = data->getParamValue();
+        }
+        else
+        {
+            /* Invalid parameter */
+            throw std::invalid_argument("ParamName not found in symbols");
+        }
+    }
+    double val = expression.value();
+    setSensorValue(val);
+    if (DEBUG)
+        std::cout << "Sensor value is " << val << "\n";
+}
 
 /** @brief Parsing Virtual Sensor config JSON file  */
 Json VirtualSensors::parseConfigFile(const std::string configFile)
@@ -189,10 +218,12 @@
 
                 auto virtualSensorPtr =
                     std::make_unique<VirtualSensor>(bus, objPath.c_str(), j);
-                virtualSensorsMap.emplace(name, std::move(virtualSensorPtr));
 
                 log<level::INFO>("Added a new virtual sensor",
                                  entry("NAME = %s", name.c_str()));
+                virtualSensorPtr->updateVirtualSensor();
+                virtualSensorsMap.emplace(std::move(name),
+                                          std::move(virtualSensorPtr));
             }
             else
             {
