diff --git a/ProcessLib/SourceTerms/CreateSourceTerm.cpp b/ProcessLib/SourceTerms/CreateSourceTerm.cpp
index 14d818ebec0ae83216f2915c7268161d188d0bec..e111766ddc98dfe9bddd3c7c934b6454b45a83b5 100644
--- a/ProcessLib/SourceTerms/CreateSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/CreateSourceTerm.cpp
@@ -29,6 +29,35 @@ std::unique_ptr<SourceTerm> createSourceTerm(
     //! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__type}
     auto const type = config.config.peekConfigParameter<std::string>("type");
 
+    // check basic data consistency
+    if (variable_id >=
+            static_cast<int>(dof_table_bulk.getNumberOfVariables()) ||
+        *config.component_id >=
+            dof_table_bulk.getNumberOfVariableComponents(variable_id))
+    {
+        OGS_FATAL(
+            "Variable id or component id too high. Actual values: (%d, "
+            "%d), maximum values: (%d, %d).",
+            variable_id, *config.component_id,
+            dof_table_bulk.getNumberOfVariables(),
+            dof_table_bulk.getNumberOfVariableComponents(variable_id));
+    }
+
+    if (!source_term_mesh.getProperties()
+             .template existsPropertyVector<std::size_t>("bulk_node_ids"))
+    {
+        OGS_FATAL(
+            "The required bulk node ids map does not exist in the "
+            "source term mesh '%s'.",
+            source_term_mesh.getName().c_str());
+    }
+    std::vector<MeshLib::Node*> const& source_term_nodes =
+        source_term_mesh.getNodes();
+    DBUG(
+        "Found %d nodes for source term at mesh '%s' for the variable %d and "
+        "component %d",
+        source_term_nodes.size(), source_term_mesh.getName().c_str(),
+        variable_id, *config.component_id);
 
     MeshLib::MeshSubset source_term_mesh_subset(source_term_mesh,
                                                 source_term_nodes);
diff --git a/ProcessLib/SourceTerms/NodalSourceTerm.cpp b/ProcessLib/SourceTerms/NodalSourceTerm.cpp
index bac7113a62edc46915f1fa49ad4a90c196c99bc7..5737be3aacdebb9ad08a4b03a5b7ba1a362d127f 100644
--- a/ProcessLib/SourceTerms/NodalSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/NodalSourceTerm.cpp
@@ -28,13 +28,6 @@ NodalSourceTerm::NodalSourceTerm(
       _parameter(parameter)
 {
     DBUG("Create NodalSourceTerm.");
-    if (!_st_mesh.getProperties().template existsPropertyVector<std::size_t>(
-            "bulk_node_ids"))
-    {
-        OGS_FATAL(
-            "Required mesh property \"bulk_node_ids\" does not exists on the "
-            "source term mesh '%s'.", _st_mesh.getName().c_str());
-    }
 }
 
 void NodalSourceTerm::integrate(const double t, GlobalVector const& /*x*/,
diff --git a/ProcessLib/SourceTerms/Python/CreatePythonSourceTerm.cpp b/ProcessLib/SourceTerms/Python/CreatePythonSourceTerm.cpp
index 924c1bd3f08db57ab4c8550a227a513093dc21fc..e8cb1635fbe7300b2bd9054b2ef1983be1a3a855 100644
--- a/ProcessLib/SourceTerms/Python/CreatePythonSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/Python/CreatePythonSourceTerm.cpp
@@ -50,16 +50,6 @@ std::unique_ptr<SourceTerm> createPythonSourceTerm(
                             .cast<ProcessLib::SourceTerms::Python::
                                       PythonSourceTermPythonSideInterface*>();
 
-    if (variable_id >= static_cast<int>(dof_table.getNumberOfVariables()) ||
-        component_id >= dof_table.getNumberOfVariableComponents(variable_id))
-    {
-        OGS_FATAL(
-            "Variable id or component id too high. Actual values: (%d, %d), "
-            "maximum values: (%d, %d).",
-            variable_id, component_id, dof_table.getNumberOfVariables(),
-            dof_table.getNumberOfVariableComponents(variable_id));
-    }
-
     // In case of partitioned mesh the source_term could be empty, i.e. there is
     // no source_term condition.
 #ifdef USE_PETSC
diff --git a/ProcessLib/SourceTerms/VolumetricSourceTerm.cpp b/ProcessLib/SourceTerms/VolumetricSourceTerm.cpp
index 4643db5199344ba3f07de59ef5814026d068f136..2656badbd18588272d0bca8ce6e41b55ef971e25 100644
--- a/ProcessLib/SourceTerms/VolumetricSourceTerm.cpp
+++ b/ProcessLib/SourceTerms/VolumetricSourceTerm.cpp
@@ -22,24 +22,6 @@ VolumetricSourceTerm::VolumetricSourceTerm(
     : SourceTerm(std::move(source_term_dof_table)),
       _volumetric_source_term(volumetric_source_term)
 {
-    // check basic data consistency
-    if (variable_id >=
-        static_cast<int>(source_term_dof_table.getNumberOfVariables()))
-    {
-        OGS_FATAL(
-            "Variable id too high. Actual value: %d, maximum value: %d.",
-            variable_id,
-            source_term_dof_table.getNumberOfVariables());
-    }
-    if (component_id >=
-        source_term_dof_table.getNumberOfVariableComponents(variable_id))
-    {
-        OGS_FATAL(
-            "Component id too high. Actual value: %d, maximum value: %d.",
-            component_id,
-            source_term_dof_table.getNumberOfVariableComponents(variable_id));
-    }
-
     ProcessLib::createLocalAssemblers<VolumetricSourceTermLocalAssembler>(
         source_term_mesh.getDimension(), source_term_mesh.getElements(),
         *_source_term_dof_table, shapefunction_order, _local_assemblers,