diff --git a/ProcessLib/InitialCondition.h b/ProcessLib/InitialCondition.h
deleted file mode 100644
index ccdd80833f46eb4e64eae551682bf5cb12945954..0000000000000000000000000000000000000000
--- a/ProcessLib/InitialCondition.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * \copyright
- * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- */
-
-#ifndef PROCESS_LIB_INITIAL_CONDITION_H_
-#define PROCESS_LIB_INITIAL_CONDITION_H_
-
-#include "ProcessLib/Parameter/Parameter.h"
-
-namespace ProcessLib
-{
-// TODO document
-class InitialCondition
-{
-public:
-    InitialCondition(Parameter<double> const& param) : _param(param) {}
-
-    std::vector<double> const& getTuple(
-            double const t, SpatialPosition const& pos) const
-    {
-        return _param.getTuple(t, pos);
-    }
-
-private:
-    Parameter<double> const& _param;
-};
-
-}  // namespace ProcessLib
-
-#endif  // PROCESS_LIB_INITIAL_CONDITION_H_
diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index c72224d7af14b6d2857f7c13d0265b82fe792fdb..857e24c9689f68ffc691b585f9d3d637a6506224 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -81,9 +81,7 @@ void Process::setInitialConditions(double const t, GlobalVector& x)
          ++variable_id)
     {
         ProcessVariable& pv = _process_variables[variable_id];
-        auto const* ic = pv.getInitialCondition();
-        if (!ic)
-            continue;
+        auto const& ic = pv.getInitialCondition();
 
         auto const num_comp = pv.getNumberOfComponents();
 
@@ -93,7 +91,7 @@ void Process::setInitialConditions(double const t, GlobalVector& x)
                                       MeshLib::MeshItemType::Node, node_id);
 
             pos.setNodeID(node_id);
-            auto const& tup = ic->getTuple(t, pos);
+            auto const& tup = ic.getTuple(t, pos);
 
             for (int comp_id = 0; comp_id < num_comp; ++comp_id)
             {
diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp
index 40d2645adcfa827c01deb0cbb02fb6d25efdc402..6043cf3ee133c4460fa14fdf7f13b656d3bbb8f8 100644
--- a/ProcessLib/ProcessVariable.cpp
+++ b/ProcessLib/ProcessVariable.cpp
@@ -26,23 +26,14 @@ ProcessVariable::ProcessVariable(
       _name(config.getConfigParameter<std::string>("name")),
       _mesh(mesh),
       //! \ogs_file_param{prj__process_variables__process_variable__components}
-      _n_components(config.getConfigParameter<int>("components"))
+      _n_components(config.getConfigParameter<int>("components")),
+      _initial_condition(findParameter<double>(
+          //! \ogs_file_param{prj__process_variables__process_variable__initial_condition}
+          config.getConfigParameter<std::string>("initial_condition"),
+          parameters, _n_components))
 {
     DBUG("Constructing process variable %s", _name.c_str());
 
-    // Initial condition
-    if (auto ic_name =
-            //! \ogs_file_param{prj__process_variables__process_variable__initial_condition}
-            config.getConfigParameterOptional<std::string>("initial_condition"))
-    {
-        _initial_condition.reset(new InitialCondition(
-            findParameter<double>(*ic_name, parameters, _n_components)));
-    }
-    else
-    {
-        INFO("No initial condition found.");
-    }
-
     // Boundary conditions
     //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions}
     if (auto bcs_config = config.getConfigSubtreeOptional("boundary_conditions"))
diff --git a/ProcessLib/ProcessVariable.h b/ProcessLib/ProcessVariable.h
index ca2828e2acd4ad08f4f34c2b32b0de984d9b3041..2a29dabc3fb860b7aa825dca4f22eca9d0e1dc8a 100644
--- a/ProcessLib/ProcessVariable.h
+++ b/ProcessLib/ProcessVariable.h
@@ -10,9 +10,9 @@
 #ifndef PROCESS_LIB_PROCESS_VARIABLE_H_
 #define PROCESS_LIB_PROCESS_VARIABLE_H_
 
-#include "InitialCondition.h"
 #include "ProcessLib/BoundaryCondition/BoundaryCondition.h"
 #include "ProcessLib/BoundaryCondition/BoundaryConditionConfig.h"
+#include "ProcessLib/Parameter/Parameter.h"
 
 namespace MeshLib
 {
@@ -47,9 +47,9 @@ public:
         const int variable_id,
         unsigned const integration_order);
 
-    InitialCondition const* getInitialCondition() const
+    Parameter<double> const& getInitialCondition() const
     {
-        return _initial_condition.get();
+        return _initial_condition;
     }
 
     // Get or create a property vector for results.
@@ -61,7 +61,7 @@ private:
     std::string const _name;
     MeshLib::Mesh& _mesh;
     const int _n_components;
-    std::unique_ptr<InitialCondition> _initial_condition;
+    Parameter<double> const& _initial_condition;
 
     std::vector<BoundaryConditionConfig> _bc_configs;
 };