diff --git a/MathLib/ODE/CVodeSolver.cpp b/MathLib/ODE/CVodeSolver.cpp
index 0689a837eebb289ac26a11bddca7f01176194e5d..c4cbde8da151ae751ac86da0b6e99e3ecd652ca7 100644
--- a/MathLib/ODE/CVodeSolver.cpp
+++ b/MathLib/ODE/CVodeSolver.cpp
@@ -308,7 +308,7 @@ CVodeSolverImpl::~CVodeSolverImpl()
 }
 
 CVodeSolverInternal::CVodeSolverInternal(BaseLib::ConfigTree const& config)
-    : _impl(new CVodeSolverImpl(config))
+    : _impl.reset(std::unique_ptr<CVodeSolverImpl>{new CVodeSolverImpl{config}})
 {
 }
 
@@ -364,9 +364,6 @@ double CVodeSolverInternal::getTime() const
 	return _impl->getTime();
 }
 
-CVodeSolverInternal::~CVodeSolverInternal()
-{
-	delete _impl;
-}
+CVodeSolverInternal::~CVodeSolverInternal() = default;
 
 }  // namespace MathLib
diff --git a/MathLib/ODE/CVodeSolver.h b/MathLib/ODE/CVodeSolver.h
index 4c2d3f5eaa5664a9716696179ebd1c06d241af9b..fded9177c068f76c5dd9a653c557fa673318b8b0 100644
--- a/MathLib/ODE/CVodeSolver.h
+++ b/MathLib/ODE/CVodeSolver.h
@@ -48,7 +48,8 @@ protected:
 	~CVodeSolverInternal();
 
 private:
-	CVodeSolverImpl* _impl;  ///< pimpl idiom hides implementation
+	std::unique_ptr<CVodeSolverImpl>
+	    _impl;  ///< pimpl idiom hides sundials headers.
 };
 
 }  // namespace MathLib