diff --git a/pid/buildjson.cpp b/pid/buildjson.cpp
index ad51d9b..5e90c47 100644
--- a/pid/buildjson.cpp
+++ b/pid/buildjson.cpp
@@ -37,36 +37,79 @@
      * accordingly.
      */
     auto p = j.at("pid");
-    p.at("samplePeriod").get_to(c.pidInfo.ts);
-    p.at("proportionalCoeff").get_to(c.pidInfo.proportionalCoeff);
-    p.at("integralCoeff").get_to(c.pidInfo.integralCoeff);
-    p.at("feedFwdOffsetCoeff").get_to(c.pidInfo.feedFwdOffset);
-    p.at("feedFwdGainCoeff").get_to(c.pidInfo.feedFwdGain);
-    p.at("integralLimit_min").get_to(c.pidInfo.integralLimit.min);
-    p.at("integralLimit_max").get_to(c.pidInfo.integralLimit.max);
-    p.at("outLim_min").get_to(c.pidInfo.outLim.min);
-    p.at("outLim_max").get_to(c.pidInfo.outLim.max);
-    p.at("slewNeg").get_to(c.pidInfo.slewNeg);
-    p.at("slewPos").get_to(c.pidInfo.slewPos);
 
     auto positiveHysteresis = p.find("positiveHysteresis");
-    if (positiveHysteresis == p.end())
+    auto negativeHysteresis = p.find("negativeHysteresis");
+    auto positiveHysteresisValue = 0.0;
+    auto negativeHysteresisValue = 0.0;
+    if (positiveHysteresis != p.end())
     {
-        c.pidInfo.positiveHysteresis = 0.0;
+        p.at("positiveHysteresis").get_to(positiveHysteresisValue);
     }
-    else
+    if (negativeHysteresis != p.end())
     {
-        p.at("positiveHysteresis").get_to(c.pidInfo.positiveHysteresis);
+        p.at("negativeHysteresis").get_to(negativeHysteresisValue);
     }
 
-    auto negativeHysteresis = p.find("negativeHysteresis");
-    if (negativeHysteresis == p.end())
+    if (c.type != "stepwise")
     {
-        c.pidInfo.negativeHysteresis = 0.0;
+        p.at("samplePeriod").get_to(c.pidInfo.ts);
+        p.at("proportionalCoeff").get_to(c.pidInfo.proportionalCoeff);
+        p.at("integralCoeff").get_to(c.pidInfo.integralCoeff);
+        p.at("feedFwdOffsetCoeff").get_to(c.pidInfo.feedFwdOffset);
+        p.at("feedFwdGainCoeff").get_to(c.pidInfo.feedFwdGain);
+        p.at("integralLimit_min").get_to(c.pidInfo.integralLimit.min);
+        p.at("integralLimit_max").get_to(c.pidInfo.integralLimit.max);
+        p.at("outLim_min").get_to(c.pidInfo.outLim.min);
+        p.at("outLim_max").get_to(c.pidInfo.outLim.max);
+        p.at("slewNeg").get_to(c.pidInfo.slewNeg);
+        p.at("slewPos").get_to(c.pidInfo.slewPos);
+
+        c.pidInfo.positiveHysteresis = positiveHysteresisValue;
+        c.pidInfo.negativeHysteresis = negativeHysteresisValue;
     }
     else
     {
-        p.at("negativeHysteresis").get_to(c.pidInfo.negativeHysteresis);
+        p.at("samplePeriod").get_to(c.stepwiseInfo.ts);
+        p.at("isCeiling").get_to(c.stepwiseInfo.isCeiling);
+
+        for (size_t i = 0; i < ec::maxStepwisePoints; i++)
+        {
+            c.stepwiseInfo.reading[i] =
+                std::numeric_limits<double>::quiet_NaN();
+            c.stepwiseInfo.output[i] = std::numeric_limits<double>::quiet_NaN();
+        }
+
+        auto reading = p.find("reading");
+        if (reading != p.end())
+        {
+            auto r = p.at("reading");
+            for (size_t i = 0; i < ec::maxStepwisePoints; i++)
+            {
+                auto n = r.find(std::to_string(i));
+                if (n != r.end())
+                {
+                    r.at(std::to_string(i)).get_to(c.stepwiseInfo.reading[i]);
+                }
+            }
+        }
+
+        auto output = p.find("output");
+        if (output != p.end())
+        {
+            auto o = p.at("output");
+            for (size_t i = 0; i < ec::maxStepwisePoints; i++)
+            {
+                auto n = o.find(std::to_string(i));
+                if (n != o.end())
+                {
+                    o.at(std::to_string(i)).get_to(c.stepwiseInfo.output[i]);
+                }
+            }
+        }
+
+        c.stepwiseInfo.positiveHysteresis = positiveHysteresisValue;
+        c.stepwiseInfo.negativeHysteresis = negativeHysteresisValue;
     }
 }
 } // namespace conf
