diff --git a/MathLib/Curve/CreatePiecewiseLinearCurve-impl.h b/MathLib/Curve/CreatePiecewiseLinearCurve.cpp
similarity index 83%
rename from MathLib/Curve/CreatePiecewiseLinearCurve-impl.h
rename to MathLib/Curve/CreatePiecewiseLinearCurve.cpp
index a8fe91c2e98e3ae1ece3c81c58ab629e1f8a7be3..e3278642b538dfd4204e4ecb7661a3f1b5167abe 100644
--- a/MathLib/Curve/CreatePiecewiseLinearCurve-impl.h
+++ b/MathLib/Curve/CreatePiecewiseLinearCurve.cpp
@@ -10,14 +10,15 @@
  * Created on November 11, 2016, 10:49 AM
  */
 
-#include "BaseLib/ConfigTree-fwd.h"
-#include "BaseLib/Error.h"
 #include "CreatePiecewiseLinearCurve.h"
 
+#include "BaseLib/ConfigTree.h"
+#include "BaseLib/Error.h"
+
 namespace MathLib
 {
-template <typename CurveType>
-std::unique_ptr<CurveType> createPiecewiseLinearCurve(
+
+PiecewiseLinearCurveConfig parsePiecewiseLinearCurveConfig(
     BaseLib::ConfigTree const& config)
 {
     auto x =
@@ -37,6 +38,7 @@ std::unique_ptr<CurveType> createPiecewiseLinearCurve(
             "The given coordinates and values vector sizes are "
             "different.");
     }
-    return std::make_unique<CurveType>(std::move(x), std::move(y));
+
+    return {std::move(x), std::move(y)};
 }
 }  // namespace MathLib
diff --git a/MathLib/Curve/CreatePiecewiseLinearCurve.h b/MathLib/Curve/CreatePiecewiseLinearCurve.h
index 074c2f8a7ea6617b03f6640df3b1d1326f3697aa..6d1018712ea28a1fe560d85349f3c31115d7f799 100644
--- a/MathLib/Curve/CreatePiecewiseLinearCurve.h
+++ b/MathLib/Curve/CreatePiecewiseLinearCurve.h
@@ -13,6 +13,7 @@
 #pragma once
 
 #include <memory>
+#include <vector>
 
 namespace BaseLib
 {
@@ -21,11 +22,22 @@ class ConfigTree;
 
 namespace MathLib
 {
+struct PiecewiseLinearCurveConfig
+{
+    std::vector<double> xs;
+    std::vector<double> ys;
+};
+
+PiecewiseLinearCurveConfig parsePiecewiseLinearCurveConfig(
+    BaseLib::ConfigTree const& config);
+
 ///  Create a curve
 /// \param config   ConfigTree object has a tag of `<curve>`
 template <typename CurveType>
 std::unique_ptr<CurveType> createPiecewiseLinearCurve(
-    BaseLib::ConfigTree const& config);
-};
-
-#include "CreatePiecewiseLinearCurve-impl.h"
+    BaseLib::ConfigTree const& config)
+{
+    auto [xs, ys] = parsePiecewiseLinearCurveConfig(config);
+    return std::make_unique<CurveType>(std::move(xs), std::move(ys));
+}
+};  // namespace MathLib