diff --git a/NumLib/Assembler/SerialExecutor.h b/NumLib/Assembler/SerialExecutor.h
index f2862d501b429fcae36d5153bb8ad1d5b53ce61e..eb2f2096ac6d1352d2cffe675832d8adc90d776e 100644
--- a/NumLib/Assembler/SerialExecutor.h
+++ b/NumLib/Assembler/SerialExecutor.h
@@ -36,8 +36,8 @@ struct SerialExecutor
     /// \tparam C    input container type.
     /// \tparam Args types additional arguments passed to \c f.
     ///
-    /// \param f    a function that accepts a a reference to container's
-    /// elements,
+    /// \param f    a function that accepts a reference to container's
+    ///             elements,
     ///             an index as arguments (and possibly further arguments).
     /// \param c    a container supporting access over operator[].
     ///             The elements of \c c must have pointer semantics, i.e.,
@@ -64,7 +64,7 @@ struct SerialExecutor
     /// \param container collection of objects having pointer semantics.
     /// \param object    the object whose method will be called.
     /// \param method    the method being called, i.e., a member function
-    /// pointer
+    ///                  pointer
     ///                  to a member function of the class \c Object.
     /// \param args      further arguments passed on to the method
     ///
@@ -86,38 +86,33 @@ struct SerialExecutor
     ///
     /// This method is very similar to executeDereferenced().
     ///
-    /// \param object             the object whose method will be called.
-    /// \param method             the method being called, i.e., a member
-    ///                           function pointer to a member function of the
-    ///                           class \c Object.
-    /// \param container          collection of objects having pointer
-    ///                           semantics.
-    /// \param container_selector A boolean vector, each element of it
-    ///                           indicates whether its associated element
-    ///                           of \c container is skipped or not.
-    /// \param args               further arguments passed on to the method
+    /// \param object               the object whose method will be called.
+    /// \param method               the method being called, i.e., a member
+    ///                             function pointer to a member function of the
+    ///                             class \c Object.
+    /// \param container            collection of objects having pointer
+    ///                             semantics.
+    /// \param active_container_ids The IDs of active elements of \c container.
+    /// \param args                 further arguments passed on to the method.
     ///
     /// \see executeDereferenced()
     template <typename Container, typename Object, typename Method,
               typename... Args>
     static void executeSelectedMemberDereferenced(
         Object& object, Method method, Container const& container,
-        std::vector<bool> const& container_selector, Args&&... args)
+        std::vector<std::size_t> const& active_container_ids, Args&&... args)
     {
-        if (container_selector.empty())
+        if (active_container_ids.empty())
         {
             executeMemberDereferenced(object, method, container,
                                       std::forward<Args>(args)...);
             return;
         }
 
-        assert(container.size() == container_selector.size());
-        for (std::size_t i = 0; i < container.size(); i++)
+        for (std::size_t i = 0; i < active_container_ids.size(); i++)
         {
-            if (container_selector[i])
-                continue;
-
-            (object.*method)(i, *container[i], std::forward<Args>(args)...);
+            (object.*method)(i, *container[active_container_ids[i]],
+                             std::forward<Args>(args)...);
         }
     }
 
@@ -127,7 +122,7 @@ struct SerialExecutor
     ///
     /// \param container collection of objects having pointer semantics.
     /// \param method    the method being called, i.e., a member function
-    /// pointer
+    ///                  pointer.
     ///                  to a member function of the \c container's elements.
     /// \param args      further arguments passed on to the method
     ///
@@ -148,36 +143,31 @@ struct SerialExecutor
     ///
     /// This method is very similar to executeSelectedMemberDereferenced().
     ///
-    /// \param method             the method being called, i.e., a member
-    ///                           function pointer to a member function of the
-    ///                           \c container's elements.
-    /// \param container          collection of objects having pointer
-    ///                           semantics.
-    /// \param container_selector A boolean vector, each element of it
-    ///                           indicates whether its associated element is
-    ///                           skppied or not.
-    /// \param args               further arguments passed on to the method.
+    /// \param method               the method being called, i.e., a member
+    ///                             function pointer to a member function of the
+    ///                             \c container's elements.
+    /// \param container            collection of objects having pointer
+    ///                             semantics.
+    /// \param active_container_ids The IDs of active elements of \c container.
+    /// \param args                 further arguments passed on to the method.
     ///
     /// \see executeDereferenced()
     template <typename Container, typename Method, typename... Args>
     static void executeSelectedMemberOnDereferenced(
         Method method, Container const& container,
-        std::vector<bool> const& container_selector, Args&&... args)
+        std::vector<std::size_t> const& active_container_ids, Args&&... args)
     {
-        if (container_selector.empty())
+        if (active_container_ids.empty())
         {
             executeMemberOnDereferenced(method, container,
                                         std::forward<Args>(args)...);
             return;
         }
 
-        assert(container.size() == container_selector.size());
-        for (std::size_t i = 0; i < container.size(); i++)
+        for (std::size_t i = 0; i < active_container_ids.size(); i++)
         {
-            if (container_selector[i])
-                continue;
-
-            ((*container[i]).*method)(i, std::forward<Args>(args)...);
+            ((*container[active_container_ids[i]]).*method)(
+                i, std::forward<Args>(args)...);
         }
     }
 
@@ -192,11 +182,11 @@ struct SerialExecutor
     ///             an index, and a second container element as arguments, which
     ///             is modified.
     /// \param c    a container supporting const access over operator[] and
-    /// size().
+    ///             size().
     ///             The elements of \c c must have pointer semantics, i.e.,
     ///             support dereferencing via unary operator*().
     /// \param data a container supporting non-const access over operator[] and
-    /// size().
+    ///             size().
     /// \param args additional arguments passed to \c f
     template <typename F, typename C, typename Data, typename... Args_>
     static void
diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
index cef7a5f77f9bfdf9c879a9f7b12b7801b79c5d33..9b2fe551770c92ac57743e18d99ce7a5ea14cbe4 100644
--- a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
+++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp
@@ -76,7 +76,7 @@ void ComponentTransportProcess::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -94,7 +94,7 @@ void ComponentTransportProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
@@ -138,7 +138,7 @@ void ComponentTransportProcess::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
 
     _surfaceflux->integrate(x, t, *this, process_id, _integration_order,
-                            _mesh, pv.getElementDeactivationFlags());
+                            _mesh, pv.getActiveElementIDs());
     _surfaceflux->save(t);
 }
 
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
index 1f8244c213ffaa875f202d411f8458305aa0d1ad..8af6f1f5f9b16ebfcfc2e162ec27ba8c1b34aaf2 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp
@@ -70,7 +70,7 @@ void GroundwaterFlowProcess::assembleConcreteProcess(const double t,
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -88,7 +88,7 @@ void GroundwaterFlowProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, xdot,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot,
         dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
index 0f9f95f0c95163a650f1d1bdfce5b52fc1fa95fd..ff879376800bf3723bec4f3405e9c954679132e0 100644
--- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
+++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h
@@ -77,7 +77,7 @@ public:
         ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
 
         _surfaceflux->integrate(x, t, *this, process_id, _integration_order,
-                                _mesh, pv.getElementDeactivationFlags());
+                                _mesh, pv.getActiveElementIDs());
         _surfaceflux->save(t);
     }
 
diff --git a/ProcessLib/HT/HTProcess.cpp b/ProcessLib/HT/HTProcess.cpp
index f4eddfb7d01ff3c51bb6ebb1d0d753d866afd86d..2e22402088e6402a0663b8d8239844d74950dc76 100644
--- a/ProcessLib/HT/HTProcess.cpp
+++ b/ProcessLib/HT/HTProcess.cpp
@@ -122,7 +122,7 @@ void HTProcess::assembleConcreteProcess(const double t,
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_tables, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_tables, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -152,7 +152,7 @@ void HTProcess::assembleWithJacobianConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
@@ -192,7 +192,7 @@ void HTProcess::setCoupledTermForTheStaggeredSchemeToLocalAssemblers()
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &HTLocalAssemblerInterface::setStaggeredCoupledSolutions,
-        _local_assemblers, pv.getElementDeactivationFlags(),
+        _local_assemblers, pv.getActiveElementIDs(),
         _coupled_solutions);
 }
 
@@ -285,7 +285,7 @@ void HTProcess::postTimestepConcreteProcess(GlobalVector const& x,
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
 
     _surfaceflux->integrate(x, t, *this, process_id, _integration_order, _mesh,
-                            pv.getElementDeactivationFlags());
+                            pv.getActiveElementIDs());
     _surfaceflux->save(t);
 }
 
diff --git a/ProcessLib/HeatConduction/HeatConductionProcess.cpp b/ProcessLib/HeatConduction/HeatConductionProcess.cpp
index 61b84ec37834c2b7e377e60d318ba65bf7cfac5c..a60192b80abf0981c038d1c06a1142012e43dd29 100644
--- a/ProcessLib/HeatConduction/HeatConductionProcess.cpp
+++ b/ProcessLib/HeatConduction/HeatConductionProcess.cpp
@@ -86,7 +86,7 @@ void HeatConductionProcess::assembleConcreteProcess(const double t,
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -105,7 +105,7 @@ void HeatConductionProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
@@ -118,7 +118,7 @@ void HeatConductionProcess::computeSecondaryVariableConcrete(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
             &HeatConductionLocalAssemblerInterface::computeSecondaryVariable,
-            _local_assemblers, pv.getElementDeactivationFlags(),
+            _local_assemblers, pv.getActiveElementIDs(),
              getDOFTable(process_id), t, x, _coupled_solutions);
 }
 
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
index 416ce9cca7a6bafab030bc968f303e72f231143f..352cba5e762376fbe021ad2809588e1da2ea17ab 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
@@ -172,7 +172,7 @@ void HeatTransportBHEProcess::assembleConcreteProcess(const double t,
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -193,7 +193,7 @@ void HeatTransportBHEProcess::computeSecondaryVariableConcrete(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &HeatTransportBHELocalAssemblerInterface::computeSecondaryVariable,
-        _local_assemblers, pv.getElementDeactivationFlags(),
+        _local_assemblers, pv.getActiveElementIDs(),
         getDOFTable(process_id), t, x, _coupled_solutions);
 }
 
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
index ee2eddf67bfbfc50c3616cd59fb370273b40e859..5e4a21150026de2191bffcd585d2f1f6d35690af 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
@@ -319,7 +319,7 @@ void HydroMechanicsProcess<DisplacementDim>::
 
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 
     auto copyRhs = [&](int const variable_id, auto& output_vector) {
@@ -362,7 +362,7 @@ void HydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
             getProcessVariables(process_id)[0];
         GlobalExecutor::executeSelectedMemberOnDereferenced(
             &LocalAssemblerInterface::preTimestep, _local_assemblers,
-            pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t,
+            pv.getActiveElementIDs(), *_local_to_global_index_map, x, t,
             dt);
     }
 }
@@ -376,7 +376,7 @@ void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postTimestep, _local_assemblers,
-        pv.getElementDeactivationFlags(), getDOFTable(process_id), x);
+        pv.getActiveElementIDs(), getDOFTable(process_id), x);
 }
 
 template <int DisplacementDim>
@@ -393,7 +393,7 @@ void HydroMechanicsProcess<DisplacementDim>::postNonLinearSolverConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers,
-        pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t,
+        pv.getActiveElementIDs(), getDOFTable(process_id), x, t,
         _use_monolithic_scheme);
 }
 
@@ -405,7 +405,7 @@ void HydroMechanicsProcess<DisplacementDim>::computeSecondaryVariableConcrete(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::computeSecondaryVariable, _local_assemblers,
-        pv.getElementDeactivationFlags(), getDOFTable(process_id), t, x,
+        pv.getActiveElementIDs(), getDOFTable(process_id), t, x,
         _coupled_solutions);
 }
 
diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
index 46b19ed10b7d7cab04a0f9ced3808617b18bc132..1358a8eb538829d25f1da58a46dd2198ee1c33ae 100644
--- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp
@@ -455,7 +455,7 @@ void HydroMechanicsProcess<GlobalDim>::computeSecondaryVariableConcrete(
 
         GlobalExecutor::executeSelectedMemberOnDereferenced(
             &HydroMechanicsLocalAssemblerInterface::computeSecondaryVariable,
-            _local_assemblers, pv.getElementDeactivationFlags(),
+            _local_assemblers, pv.getActiveElementIDs(),
             dof_table, t, x, _coupled_solutions);
     }
 
@@ -583,7 +583,7 @@ void HydroMechanicsProcess<GlobalDim>::assembleWithJacobianConcreteProcess(
        dof_table = {std::ref(*_local_to_global_index_map)};
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 
     auto copyRhs = [&](int const variable_id, auto& output_vector) {
@@ -610,7 +610,7 @@ void HydroMechanicsProcess<GlobalDim>::preTimestepConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &HydroMechanicsLocalAssemblerInterface::preTimestep, _local_assemblers,
-        pv.getElementDeactivationFlags(), *_local_to_global_index_map,
+        pv.getActiveElementIDs(), *_local_to_global_index_map,
         x, t, dt);
 }
 
diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
index 35a183305ee8214121eafceb22b2a2534e326bb3..7b87771ad2fb3d9324589e1ee88069cbc8f62d63 100644
--- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
+++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp
@@ -528,7 +528,7 @@ void SmallDeformationProcess<DisplacementDim>::computeSecondaryVariableConcrete(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &SmallDeformationLocalAssemblerInterface::computeSecondaryVariable,
-        _local_assemblers, pv.getElementDeactivationFlags(),
+        _local_assemblers, pv.getActiveElementIDs(),
         getDOFTable(process_id), t, x, _coupled_solutions);
 }
 
@@ -553,7 +553,7 @@ void SmallDeformationProcess<DisplacementDim>::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 template <int DisplacementDim>
@@ -575,7 +575,7 @@ void SmallDeformationProcess<DisplacementDim>::
         dof_table = {std::ref(*_local_to_global_index_map)};
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t,
         x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 template <int DisplacementDim>
@@ -591,7 +591,7 @@ void SmallDeformationProcess<DisplacementDim>::preTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &SmallDeformationLocalAssemblerInterface::preTimestep,
-        _local_assemblers, pv.getElementDeactivationFlags(),
+        _local_assemblers, pv.getActiveElementIDs(),
         *_local_to_global_index_map, x, t, dt);
 }
 // ------------------------------------------------------------------------------------
diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
index be661f99d9a8c7097ffdef4830ef909267c1fe6d..cc95c385f452358ce824a1245fc7c6297ccdc0cc 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
+++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
@@ -95,7 +95,7 @@ void LiquidFlowProcess::assembleConcreteProcess(const double t,
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(),  dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(),  dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -114,7 +114,7 @@ void LiquidFlowProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t,
         x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
@@ -127,7 +127,7 @@ void LiquidFlowProcess::computeSecondaryVariableConcrete(const double t,
     DBUG("Compute the velocity for LiquidFlowProcess.");
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LiquidFlowLocalAssemblerInterface::computeSecondaryVariable,
-        _local_assemblers, pv.getElementDeactivationFlags(),
+        _local_assemblers, pv.getActiveElementIDs(),
         getDOFTable(process_id), t, x, _coupled_solutions);
 }
 
diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp
index 288d9e30f17c5157e8a5f800952b05de08396e44..9e93feee66383e1148ba72a4041395b7c9023bc2 100644
--- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp
+++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp
@@ -240,7 +240,7 @@ void PhaseFieldProcess<DisplacementDim>::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_tables, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_tables, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -285,7 +285,7 @@ void PhaseFieldProcess<DisplacementDim>::assembleWithJacobianConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t,
+        _local_assemblers, pv.getActiveElementIDs(), dof_tables, t,
         x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 
     if (!_use_monolithic_scheme && (_coupled_solutions->process_id == 0))
@@ -311,7 +311,7 @@ void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::preTimestep, _local_assemblers,
-        pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t, dt);
+        pv.getActiveElementIDs(), getDOFTable(process_id), x, t, dt);
 }
 
 template <int DisplacementDim>
@@ -338,7 +338,7 @@ void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess(
 
         GlobalExecutor::executeSelectedMemberOnDereferenced(
             &LocalAssemblerInterface::computeEnergy, _local_assemblers,
-            pv.getElementDeactivationFlags(), dof_tables, x, _process_data.t,
+            pv.getActiveElementIDs(), dof_tables, x, _process_data.t,
             _process_data.elastic_energy, _process_data.surface_energy,
             _process_data.pressure_work, _use_monolithic_scheme,
             _coupled_solutions);
diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp
index 6771982aeeb1ae2315cb2b3fbb87f14a1b0442bd..caf14c5cb772c4d24cd3979c6953908107d53b5a 100644
--- a/ProcessLib/ProcessVariable.cpp
+++ b/ProcessLib/ProcessVariable.cpp
@@ -274,7 +274,7 @@ void ProcessVariable::checkElementDeactivation(double const time)
 {
     if (_deactivated_subdomains.empty())
     {
-        _element_deactivation_flags.clear();
+        _ids_of_active_elements.clear();
         return;
     }
 
@@ -287,26 +287,27 @@ void ProcessVariable::checkElementDeactivation(double const time)
 
     if (found_a_set == _deactivated_subdomains.end())
     {
-        _element_deactivation_flags.clear();
+        _ids_of_active_elements.clear();
         return;
     }
 
     // Already initialized.
-    if (!_element_deactivation_flags.empty())
+    if (!_ids_of_active_elements.empty())
         return;
 
     auto const& deactivated_materialIDs = (*found_a_set)->materialIDs;
 
     auto const* const material_ids = MeshLib::materialIDs(_mesh);
-    _element_deactivation_flags.resize(_mesh.getNumberOfElements());
+    _ids_of_active_elements.clear();
     auto const number_of_elements = _mesh.getNumberOfElements();
 
     for (std::size_t i = 0; i < number_of_elements; i++)
     {
-        _element_deactivation_flags[i] =
-            std::binary_search(deactivated_materialIDs.begin(),
+        if (std::binary_search(deactivated_materialIDs.begin(),
                                deactivated_materialIDs.end(),
-                               (*material_ids)[i]);
+                               (*material_ids)[i]))
+            continue;
+        _ids_of_active_elements.push_back(_mesh.getElement(i)->getID());
     }
 }
 
diff --git a/ProcessLib/ProcessVariable.h b/ProcessLib/ProcessVariable.h
index 890db1c2770f92a2790aad5e9423f282e3371072..ef4a8855f2c53785b2a613c2f5ccf5fed3af419d 100644
--- a/ProcessLib/ProcessVariable.h
+++ b/ProcessLib/ProcessVariable.h
@@ -65,9 +65,9 @@ public:
 
     void checkElementDeactivation(double const time);
 
-    std::vector<bool>& getElementDeactivationFlags() const
+    std::vector<std::size_t>& getActiveElementIDs() const
     {
-        return _element_deactivation_flags;
+        return _ids_of_active_elements;
     }
 
     /// Returns the number of components of the process variable.
@@ -111,7 +111,9 @@ private:
     std::vector<std::unique_ptr<DeactivatedSubdomain const>>
         _deactivated_subdomains;
 
-    mutable std::vector<bool> _element_deactivation_flags;
+    /// IDs of the active elements. It is initialized only if there are
+    /// deactivated subdomains.
+    mutable std::vector<std::size_t> _ids_of_active_elements;
 
     void createBoundaryConditionsForDeactivatedSubDomains(
         const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id,
diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
index 4a09a8eb5c3fa1f622b304a713ebc9b271a49bf0..5cf44c93ca9ef6e71b2080ee3fff7074f20de9c2 100644
--- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
+++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp
@@ -81,7 +81,7 @@ void RichardsComponentTransportProcess::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -101,7 +101,7 @@ void RichardsComponentTransportProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
diff --git a/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp b/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp
index 4dee09f6ef3f28497ce17bd4aa86853a9fdfce7f..baea254c30435336be5432d7a946a16a2f823e74 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp
+++ b/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp
@@ -80,7 +80,7 @@ void RichardsFlowProcess::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -99,7 +99,7 @@ void RichardsFlowProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
index f7181a4684795df90736307c5a3293e35f5318b3..f79f587d284b0dc9d2006a369c77fb48c3733c79 100644
--- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
+++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp
@@ -245,7 +245,7 @@ void RichardsMechanicsProcess<DisplacementDim>::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -293,7 +293,7 @@ void RichardsMechanicsProcess<DisplacementDim>::
 
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 
     auto copyRhs = [&](int const variable_id, auto& output_vector) {
@@ -336,7 +336,7 @@ void RichardsMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
             getProcessVariables(process_id)[0];
         GlobalExecutor::executeSelectedMemberOnDereferenced(
             &LocalAssemblerInterface::preTimestep, _local_assemblers,
-            pv.getElementDeactivationFlags(), *_local_to_global_index_map, x,
+            pv.getActiveElementIDs(), *_local_to_global_index_map, x,
             t, dt);
     }
 }
@@ -358,7 +358,7 @@ void RichardsMechanicsProcess<
     // Calculate strain, stress or other internal variables of mechanics.
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers,
-        pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t,
+        pv.getActiveElementIDs(), getDOFTable(process_id), x, t,
         _use_monolithic_scheme);
 }
 
@@ -373,7 +373,7 @@ void RichardsMechanicsProcess<
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::computeSecondaryVariable, _local_assemblers,
-        pv.getElementDeactivationFlags(), getDOFTable(process_id), t, x,
+        pv.getActiveElementIDs(), getDOFTable(process_id), t, x,
         _coupled_solutions);
 }
 
diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
index ac7b529d0a3513d22726541df8cc708971fbb94d..3001d7aa91b2acac21b140113a77cd36bd943664 100644
--- a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
+++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp
@@ -242,7 +242,7 @@ void SmallDeformationProcess<DisplacementDim>::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -265,7 +265,7 @@ void SmallDeformationProcess<DisplacementDim>::
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 
     transformVariableFromGlobalVector(b, 0, *_local_to_global_index_map,
@@ -286,7 +286,7 @@ void SmallDeformationProcess<DisplacementDim>::preTimestepConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::preTimestep, _local_assemblers,
-        pv.getElementDeactivationFlags(), *_local_to_global_index_map,
+        pv.getActiveElementIDs(), *_local_to_global_index_map,
         x, t, dt);
 }
 
@@ -301,7 +301,7 @@ void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postTimestep, _local_assemblers,
-        pv.getElementDeactivationFlags(), *_local_to_global_index_map, x);
+        pv.getActiveElementIDs(), *_local_to_global_index_map, x);
 
     std::unique_ptr<GlobalVector> material_forces;
     ProcessLib::SmallDeformation::writeMaterialForces(
diff --git a/ProcessLib/SurfaceFlux/SurfaceFlux.cpp b/ProcessLib/SurfaceFlux/SurfaceFlux.cpp
index 649cbe93c9183edb7de33190a405752bb6804db6..88680e7d3f33dc04a52b8dc65364ee083103ff30 100644
--- a/ProcessLib/SurfaceFlux/SurfaceFlux.cpp
+++ b/ProcessLib/SurfaceFlux/SurfaceFlux.cpp
@@ -57,7 +57,7 @@ void SurfaceFlux::integrate(
     MeshLib::PropertyVector<double>& balance,
     double const t,
     MeshLib::Mesh const& bulk_mesh,
-    std::vector<bool> const& element_selector,
+    std::vector<std::size_t> const& active_element_ids,
     std::function<Eigen::Vector3d(std::size_t const, MathLib::Point3d const&,
                                   double const, GlobalVector const&)> const&
         getFlux)
@@ -66,7 +66,7 @@ void SurfaceFlux::integrate(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &SurfaceFluxLocalAssemblerInterface::integrate,
-        _local_assemblers, element_selector, x, balance, t, bulk_mesh, getFlux);
+        _local_assemblers, active_element_ids, x, balance, t, bulk_mesh, getFlux);
 }
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/SurfaceFlux/SurfaceFlux.h b/ProcessLib/SurfaceFlux/SurfaceFlux.h
index 39d4d86d61d22f0147958fcf78c425bd8217387a..45c9952e63f9e2e2273943b28ba0a5c3d03b4f27 100644
--- a/ProcessLib/SurfaceFlux/SurfaceFlux.h
+++ b/ProcessLib/SurfaceFlux/SurfaceFlux.h
@@ -28,12 +28,14 @@ public:
                 std::size_t bulk_property_number_of_components,
                 unsigned const integration_order);
 
-    /// Executes for each element of the mesh the local intergration procedure.
-    /// @param x The global solution the intergration values will be fetched of.
+    /// Executes for each element of the mesh the local integration procedure.
+    /// @param x The global solution the integration values will be fetched of.
     /// @param balance The vector the integration results will be stored in.
     /// @param t The balance will be computed at the time t.
     /// @param bulk_mesh Stores a reference to the bulk mesh that is needed to
     /// fetch the information for the integration over the surface mesh.
+    /// @active_element_ids The IDs of active elements. It is empty if there is
+    ///                     no deactivated subdomain.
     /// @param getFlux function that calculates the flux in the integration
     /// points of the face elements of the bulk element that belongs to the
     /// surface.
@@ -41,7 +43,7 @@ public:
                    MeshLib::PropertyVector<double>& balance,
                    double const t,
                    MeshLib::Mesh const& bulk_mesh,
-                   std::vector<bool> const& element_selector,
+                   std::vector<std::size_t> const& active_element_ids,
                    std::function<Eigen::Vector3d(
                        std::size_t const, MathLib::Point3d const&, double const,
                        GlobalVector const&)> const& getFlux);
diff --git a/ProcessLib/SurfaceFlux/SurfaceFluxData.h b/ProcessLib/SurfaceFlux/SurfaceFluxData.h
index 3df6d6117bfdf8f116509379b4c2e0207f8c9cba..23d37e9670ec053285457ca210945de664d52170 100644
--- a/ProcessLib/SurfaceFlux/SurfaceFluxData.h
+++ b/ProcessLib/SurfaceFlux/SurfaceFluxData.h
@@ -81,7 +81,7 @@ struct SurfaceFluxData
     void integrate(GlobalVector const& x, double const t, Process const& p,
                    int const process_id, int const integration_order,
                    MeshLib::Mesh const& bulk_mesh,
-                   std::vector<bool> const& element_selector)
+                   std::vector<std::size_t> const& active_element_ids)
     {
         auto* const surfaceflux_pv = MeshLib::getOrCreateMeshProperty<double>(
             surface_mesh, property_vector_name, MeshLib::MeshItemType::Cell, 1);
@@ -93,7 +93,7 @@ struct SurfaceFluxData
             integration_order);
 
         surfaceflux_process.integrate(
-            x, *surfaceflux_pv, t, bulk_mesh, element_selector,
+            x, *surfaceflux_pv, t, bulk_mesh, active_element_ids,
             [&p](std::size_t const element_id, MathLib::Point3d const& pnt,
                  double const t, GlobalVector const& x) {
                 return p.getFlux(element_id, pnt, t, x);
diff --git a/ProcessLib/TES/TESProcess.cpp b/ProcessLib/TES/TESProcess.cpp
index 6b6c8d8e2f80489850afa0ec8e75825f716c8219..c04f685f1ca2bc0d0db5abf38fc29a4f89ad4b59 100644
--- a/ProcessLib/TES/TESProcess.cpp
+++ b/ProcessLib/TES/TESProcess.cpp
@@ -241,7 +241,7 @@ void TESProcess::assembleConcreteProcess(const double t,
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -259,7 +259,7 @@ void TESProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
index 88ace5986d4c00a4cc1dfc1ddf038dbb726df557..c47f5e5d6c881c3f8f322f17581c16456f758a84 100644
--- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp
@@ -89,7 +89,7 @@ void ThermalTwoPhaseFlowWithPPProcess::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -108,7 +108,7 @@ void ThermalTwoPhaseFlowWithPPProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 void ThermalTwoPhaseFlowWithPPProcess::preTimestepConcreteProcess(
@@ -120,7 +120,7 @@ void ThermalTwoPhaseFlowWithPPProcess::preTimestepConcreteProcess(
     ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0];
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::preTimestep, _local_assemblers,
-        pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t,
+        pv.getActiveElementIDs(), *_local_to_global_index_map, x, t,
         delta_t);
 }
 
diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h
index 51aab5032c27ecc282f3f8ddace051e310ba5dbc..eb37e7d58a9c9cd7c38ad8fd75013dc2ff152968 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h
@@ -214,7 +214,7 @@ void ThermoMechanicalPhaseFieldProcess<
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -267,7 +267,7 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>::
 
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
@@ -292,7 +292,7 @@ void ThermoMechanicalPhaseFieldProcess<
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &ThermoMechanicalPhaseFieldLocalAssemblerInterface::preTimestep,
-        _local_assemblers, pv.getElementDeactivationFlags(),
+        _local_assemblers, pv.getActiveElementIDs(),
         getDOFTable(process_id), x, t, dt);
 }
 
@@ -309,7 +309,7 @@ void ThermoMechanicalPhaseFieldProcess<
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &ThermoMechanicalPhaseFieldLocalAssemblerInterface::postTimestep,
-        _local_assemblers, pv.getElementDeactivationFlags(),
+        _local_assemblers, pv.getActiveElementIDs(),
         getDOFTable(process_id), x);
 }
 
@@ -331,7 +331,7 @@ void ThermoMechanicalPhaseFieldProcess<
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers,
-        pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t,
+        pv.getActiveElementIDs(), getDOFTable(process_id), x, t,
         use_monolithic_scheme);
 }
 
diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
index 0f02125c20e80d7a44ee0465c5c3acbfdfea2a14..042783e58534d37ec9e7ac97c9f6a85c363e83c2 100644
--- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
+++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp
@@ -168,7 +168,7 @@ void ThermoMechanicsProcess<DisplacementDim>::assembleConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -192,7 +192,7 @@ void ThermoMechanicsProcess<DisplacementDim>::
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
@@ -210,7 +210,7 @@ void ThermoMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &ThermoMechanicsLocalAssemblerInterface::preTimestep, _local_assemblers,
-        pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t,
+        pv.getActiveElementIDs(), *_local_to_global_index_map, x, t,
         dt);
 }
 
@@ -225,7 +225,7 @@ void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &ThermoMechanicsLocalAssemblerInterface::postTimestep,
-        _local_assemblers, pv.getElementDeactivationFlags(),
+        _local_assemblers, pv.getActiveElementIDs(),
         *_local_to_global_index_map, x);
 }
 
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp
index 3a75bf8f365f4da60c50c0dc109099d5cdc09d4f..4d8ce27151b46d1f306baa3b52ec61c5a18eaeae 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp
@@ -86,7 +86,7 @@ void TwoPhaseFlowWithPPProcess::assembleConcreteProcess(const double t,
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -105,7 +105,7 @@ void TwoPhaseFlowWithPPProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
index ae7ebc467330024a07c04b63a06e9cec7e60b0c4..2560399bf1041fc57803da36cfa108bd05e11dce 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp
@@ -86,7 +86,7 @@ void TwoPhaseFlowWithPrhoProcess::assembleConcreteProcess(const double t,
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers,
-        pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b,
+        pv.getActiveElementIDs(), dof_table, t, x, M, K, b,
         _coupled_solutions);
 }
 
@@ -105,7 +105,7 @@ void TwoPhaseFlowWithPrhoProcess::assembleWithJacobianConcreteProcess(
     // Call global assembler for each local assembly item.
     GlobalExecutor::executeSelectedMemberDereferenced(
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
-        _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x,
+        _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x,
         xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions);
 }
 void TwoPhaseFlowWithPrhoProcess::preTimestepConcreteProcess(
@@ -118,7 +118,7 @@ void TwoPhaseFlowWithPrhoProcess::preTimestepConcreteProcess(
 
     GlobalExecutor::executeSelectedMemberOnDereferenced(
         &LocalAssemblerInterface::preTimestep, _local_assemblers,
-        pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t,
+        pv.getActiveElementIDs(), *_local_to_global_index_map, x, t,
         dt);
 }