diff --git a/ProcessLib/BoundaryCondition/CreateBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/CreateBoundaryCondition.cpp
index 98b5a99c1e6a8e863f2c488efd17d79fc3891b01..7115b756d4d6af536dbe83fe3610bd4abd115eaf 100644
--- a/ProcessLib/BoundaryCondition/CreateBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/CreateBoundaryCondition.cpp
@@ -13,6 +13,7 @@
 #include "BoundaryConditionConfig.h"
 #include "ConstraintDirichletBoundaryCondition.h"
 #include "DirichletBoundaryCondition.h"
+#include "DirichletBoundaryConditionWithinTimeInterval.h"
 #include "NeumannBoundaryCondition.h"
 #include "NonuniformDirichletBoundaryCondition.h"
 #include "NonuniformNeumannBoundaryCondition.h"
@@ -54,6 +55,12 @@ std::unique_ptr<BoundaryCondition> createBoundaryCondition(
             config.config, config.boundary_mesh, dof_table, variable_id,
             *config.component_id, parameters);
     }
+    if (type == "DirichletWithinTimeInterval")
+    {
+        return ProcessLib::createDirichletBoundaryConditionWithinTimeInterval(
+            config.config, config.boundary_mesh, dof_table, variable_id,
+            *config.component_id, parameters);
+    }
     if (type == "Neumann")
     {
         return ProcessLib::createNeumannBoundaryCondition(
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e682e6f996f7e628312b1596c33aaf813edfea83
--- /dev/null
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp
@@ -0,0 +1,101 @@
+/**
+ *
+ * \copyright
+ * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ * File:   DirichletBoundaryConditionWithinTimeInterval.cpp
+ *
+ * Created on November 26, 2018, 4:59 PM
+ */
+#include "DirichletBoundaryConditionWithinTimeInterval.h"
+
+#include "BaseLib/ConfigTree.h"
+
+#include "NumLib/DOF/LocalToGlobalIndexMap.h"
+#include "NumLib/IndexValueVector.h"
+#include "NumLib/TimeStepping/TimeInterval.h"
+
+#include "ProcessLib/Parameter/Parameter.h"
+#include "ProcessLib/Utils/ProcessUtils.h"
+
+namespace ProcessLib
+{
+DirichletBoundaryConditionWithinTimeInterval::
+    DirichletBoundaryConditionWithinTimeInterval(
+        double const start_time, double const end_time,
+        Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+        NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
+        int const variable_id, int const component_id)
+    : DirichletBoundaryCondition(parameter, bc_mesh, dof_table_bulk,
+                                 variable_id, component_id),
+      _time_interval(
+          std::make_unique<NumLib::TimeInterval>(start_time, end_time))
+{
+}
+
+void DirichletBoundaryConditionWithinTimeInterval::getEssentialBCValues(
+    const double t, GlobalVector const& x,
+    NumLib::IndexValueVector<GlobalIndexType>& bc_values) const
+{
+    if (_time_interval->isInThisTimeInterval(t))
+    {
+        return getEssentialBCValuesLocal(t, x, bc_values);
+    }
+
+    bc_values.ids.clear();
+    bc_values.values.clear();
+
+    return;
+}
+
+std::unique_ptr<DirichletBoundaryCondition>
+createDirichletBoundaryConditionWithinTimeInterval(
+    BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
+    NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
+    int const component_id,
+    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters)
+{
+    DBUG(
+        "Constructing DirichletBoundaryConditionWithinTimeInterval from "
+        "config.");
+
+    //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__type}
+    config.checkConfigParameter("type", "DirichletWithinTimeInterval");
+
+    //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__DirichletWithinTimeInterval__parameter}
+    auto const param_name = config.getConfigParameter<std::string>("parameter");
+    DBUG("Using parameter %s", param_name.c_str());
+
+    auto& param = findParameter<double>(param_name, parameters, 1);
+
+// In case of partitioned mesh the boundary could be empty, i.e. there is no
+// boundary condition.
+#ifdef USE_PETSC
+    // This can be extracted to createBoundaryCondition() but then the config
+    // parameters are not read and will cause an error.
+    // TODO (naumov): Add a function to ConfigTree for skipping the tags of the
+    // subtree and move the code up in createBoundaryCondition().
+    if (bc_mesh.getDimension() == 0 && bc_mesh.getNumberOfNodes() == 0 &&
+        bc_mesh.getNumberOfElements() == 0)
+    {
+        return nullptr;
+    }
+#endif  // USE_PETSC
+
+    const double start_time =
+        //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__DirichletWithinTimeInterval__start_time}
+        config.getConfigParameter<double>("start_time");
+
+    const double end_time =
+        //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__DirichletWithinTimeInterval__end_time}
+        config.getConfigParameter<double>("end_time");
+
+    return std::make_unique<DirichletBoundaryConditionWithinTimeInterval>(
+        start_time, end_time, param, bc_mesh, dof_table_bulk, variable_id,
+        component_id);
+}
+
+}  // namespace ProcessLib
diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h
new file mode 100644
index 0000000000000000000000000000000000000000..beeaa23928cb7ba9d2e6c2bb5e0c6a746755aa1d
--- /dev/null
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h
@@ -0,0 +1,51 @@
+/**
+ *
+ * \copyright
+ * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ * File:   DirichletBoundaryConditionWithinTimeInterval.h
+ *
+ * Created on November 26, 2018, 4:59 PM
+ */
+#pragma once
+
+#include <memory>
+
+#include "DirichletBoundaryCondition.h"
+
+namespace NumLib
+{
+class TimeInterval;
+}
+
+namespace ProcessLib
+{
+class DirichletBoundaryConditionWithinTimeInterval final
+    : public DirichletBoundaryCondition
+{
+public:
+    DirichletBoundaryConditionWithinTimeInterval(
+        double const start_time, double const end_time,
+        Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh,
+        NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
+        int const variable_id, int const component_id);
+
+    void getEssentialBCValues(
+        const double t, GlobalVector const& x,
+        NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
+
+private:
+    std::unique_ptr<NumLib::TimeInterval> _time_interval;
+};
+
+std::unique_ptr<DirichletBoundaryCondition>
+createDirichletBoundaryConditionWithinTimeInterval(
+    BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
+    NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
+    int const component_id,
+    const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters);
+
+}  // namespace ProcessLib