diff --git a/conf/core/jobs.csv b/conf/core/jobs.csv
index a604e63b736ee5af04889d8ec0af356f76b7a119..71fd6422039c78f3f2ff81ed71e761356763c520 100644
--- a/conf/core/jobs.csv
+++ b/conf/core/jobs.csv
@@ -21,92 +21,92 @@
 #
 
 # Five columns:
-# DOMAIN_ID, ENTITY_ID, TRANSACTION, JOB, MODE
+# DOMAIN_ID, ENTITY_ID, TRANSACTION, JOB, JOB_FAILURE_SEVERITY
 
 # general rules
-0,0,INSERT,CheckPropValid,MUST
-0,0,INSERT,CheckParValid,MUST
-0,0,INSERT,CheckParOblPropPresent,MUST
-0,0,INSERT,CheckValueParsable,MUST
-0,0,UPDATE,CheckPropValid,MUST
-0,0,UPDATE,CheckParValid,MUST
-0,0,UPDATE,CheckParOblPropPresent,MUST
-0,0,UPDATE,CheckValueParsable,MUST
-0,0,DELETE,CheckReferenceDependencyExistent,MUST
-0,0,DELETE,CheckChildDependencyExistent,MUST
+0,0,INSERT,CheckPropValid,ERROR
+0,0,INSERT,CheckParValid,ERROR
+0,0,INSERT,CheckParOblPropPresent,ERROR
+0,0,INSERT,CheckValueParsable,ERROR
+0,0,UPDATE,CheckPropValid,ERROR
+0,0,UPDATE,CheckParValid,ERROR
+0,0,UPDATE,CheckParOblPropPresent,ERROR
+0,0,UPDATE,CheckValueParsable,ERROR
+0,0,DELETE,CheckReferenceDependencyExistent,ERROR
+0,0,DELETE,CheckChildDependencyExistent,ERROR
 
 
 # role specific rules
 ## recordtype rules
-0,1,INSERT,CheckNamePresent,MUST
-0,1,INSERT,CheckPropPresent,SHOULD
-0,1,INSERT,SetImpToRecByDefault,MUST
+0,1,INSERT,CheckNamePresent,ERROR
+0,1,INSERT,CheckPropPresent,WARN
+0,1,INSERT,SetImpToRecByDefault,ERROR
 
-0,1,UPDATE,CheckNamePresent,MUST
-0,1,UPDATE,CheckPropPresent,SHOULD
-0,1,UPDATE,SetImpToRecByDefault,MUST
+0,1,UPDATE,CheckNamePresent,ERROR
+0,1,UPDATE,CheckPropPresent,WARN
+0,1,UPDATE,SetImpToRecByDefault,ERROR
 
 ## record rules
-0,2,INSERT,CheckNamePresent,SHOULD
-0,2,INSERT,CheckPropPresent,SHOULD
-0,2,INSERT,CheckParPresent,MUST
-0,2,INSERT,SetImpToFix,MUST
+0,2,INSERT,CheckNamePresent,WARN
+0,2,INSERT,CheckPropPresent,WARN
+0,2,INSERT,CheckParPresent,ERROR
+0,2,INSERT,SetImpToFix,ERROR
 
-0,2,UPDATE,CheckNamePresent,SHOULD
-0,2,UPDATE,CheckPropPresent,SHOULD
-0,2,UPDATE,CheckParPresent,MUST
-0,2,UPDATE,SetImpToFix,MUST
+0,2,UPDATE,CheckNamePresent,WARN
+0,2,UPDATE,CheckPropPresent,WARN
+0,2,UPDATE,CheckParPresent,ERROR
+0,2,UPDATE,SetImpToFix,ERROR
 
 ## file rules
-0,3,INSERT,CheckNamePresent,SHOULD
-0,3,INSERT,MatchFileProp,MUST
-0,3,INSERT,CheckTargetPathValid,MUST
-0,3,INSERT,SetImpToFix,MUST
+0,3,INSERT,CheckNamePresent,WARN
+0,3,INSERT,MatchFileProp,ERROR
+0,3,INSERT,CheckTargetPathValid,ERROR
+0,3,INSERT,SetImpToFix,ERROR
 
-0,3,UPDATE,CheckNamePresent,SHOULD
-0,3,UPDATE,MatchFileProp,MUST
-0,3,UPDATE,CheckTargetPathValid,MUST
-0,3,UPDATE,SetImpToFix,MUST
+0,3,UPDATE,CheckNamePresent,WARN
+0,3,UPDATE,MatchFileProp,ERROR
+0,3,UPDATE,CheckTargetPathValid,ERROR
+0,3,UPDATE,SetImpToFix,ERROR
 
 ## property rules
-0,4,INSERT,CheckDatatypePresent,MUST
-0,4,UPDATE,CheckDatatypePresent,MUST
-0,4,INSERT,CheckNamePresent,MUST
-0,4,UPDATE,CheckNamePresent,MUST
-0,4,INSERT,SetImpToFix,MUST
-0,4,UPDATE,SetImpToFix,MUST
+0,4,INSERT,CheckDatatypePresent,ERROR
+0,4,UPDATE,CheckDatatypePresent,ERROR
+0,4,INSERT,CheckNamePresent,ERROR
+0,4,UPDATE,CheckNamePresent,ERROR
+0,4,INSERT,SetImpToFix,ERROR
+0,4,UPDATE,SetImpToFix,ERROR
 
 ## query template rules
-0,8,UPDATE,CheckQueryTemplate,MUST
-0,8,INSERT,CheckQueryTemplate,MUST
+0,8,UPDATE,CheckQueryTemplate,ERROR
+0,8,INSERT,CheckQueryTemplate,ERROR
 
 # data type specific rules
 ## reference rules
-0,11,INSERT,CheckRefidPresent,SHOULD
-0,11,INSERT,CheckRefidValid,MUST
-0,11,INSERT,CheckRefidIsaParRefid,SHOULD
+0,11,INSERT,CheckRefidPresent,WARN
+0,11,INSERT,CheckRefidValid,ERROR
+0,11,INSERT,CheckRefidIsaParRefid,WARN
 
-0,11,UPDATE,CheckRefidPresent,SHOULD
-0,11,UPDATE,CheckRefidValid,MUST
-0,11,UPDATE,CheckRefidIsaParRefid,SHOULD
+0,11,UPDATE,CheckRefidPresent,WARN
+0,11,UPDATE,CheckRefidValid,ERROR
+0,11,UPDATE,CheckRefidIsaParRefid,WARN
 
 ## integer rules
-0,12,INSERT,CheckUnitPresent,SHOULD
-0,12,INSERT,ParseUnit,SHOULD
+0,12,INSERT,CheckUnitPresent,WARN
+0,12,INSERT,ParseUnit,WARN
 
-0,12,UPDATE,CheckUnitPresent,SHOULD
-0,12,UPDATE,ParseUnit,SHOULD
+0,12,UPDATE,CheckUnitPresent,WARN
+0,12,UPDATE,ParseUnit,WARN
 
 ## double rules
-0,13,INSERT,CheckUnitPresent,SHOULD
-0,13,INSERT,ParseUnit,SHOULD
+0,13,INSERT,CheckUnitPresent,WARN
+0,13,INSERT,ParseUnit,WARN
 
-0,13,UPDATE,CheckUnitPresent,SHOULD
-0,13,UPDATE,ParseUnit,SHOULD
+0,13,UPDATE,CheckUnitPresent,WARN
+0,13,UPDATE,ParseUnit,WARN
 
 ## filereference rules
-0,17,INSERT,CheckRefidValid,MUST
-0,17,INSERT,CheckRefidIsaParRefid,MUST
+0,17,INSERT,CheckRefidValid,ERROR
+0,17,INSERT,CheckRefidIsaParRefid,ERROR
 
-0,17,UPDATE,CheckRefidValid,MUST
-0,17,UPDATE,CheckRefidIsaParRefid,MUST
+0,17,UPDATE,CheckRefidValid,ERROR
+0,17,UPDATE,CheckRefidIsaParRefid,ERROR
diff --git a/src/main/java/org/caosdb/server/database/proto/Rule.java b/src/main/java/org/caosdb/server/database/proto/Rule.java
index 3d25f7662052b5b59f45255218c1191cf011761e..0aa848bbd08b4ff8728785dc24a7ac014f7c1a29 100644
--- a/src/main/java/org/caosdb/server/database/proto/Rule.java
+++ b/src/main/java/org/caosdb/server/database/proto/Rule.java
@@ -23,7 +23,7 @@
 package org.caosdb.server.database.proto;
 
 import java.io.Serializable;
-import org.caosdb.server.jobs.core.Mode;
+import org.caosdb.server.jobs.core.JobFailureSeverity;
 
 public class Rule implements Serializable {
 
@@ -33,5 +33,5 @@ public class Rule implements Serializable {
   public int entity = 0;
   public String job = null;
   public String transaction = null;
-  public Mode mode = null;
+  public JobFailureSeverity mode = null;
 }
diff --git a/src/main/java/org/caosdb/server/jobs/Job.java b/src/main/java/org/caosdb/server/jobs/Job.java
index 0f0875edbe9e183b10909b61296da9c8cae9f920..2954f533f832feadcfd8bbf011167b632d76166a 100644
--- a/src/main/java/org/caosdb/server/jobs/Job.java
+++ b/src/main/java/org/caosdb/server/jobs/Job.java
@@ -50,7 +50,7 @@ import org.caosdb.server.entity.Message;
 import org.caosdb.server.entity.container.ParentContainer;
 import org.caosdb.server.entity.container.TransactionContainer;
 import org.caosdb.server.entity.wrapper.Parent;
-import org.caosdb.server.jobs.core.Mode;
+import org.caosdb.server.jobs.core.JobFailureSeverity;
 import org.caosdb.server.transaction.Transaction;
 import org.caosdb.server.utils.EntityStatus;
 import org.caosdb.server.utils.ServerMessages;
@@ -70,7 +70,7 @@ public abstract class Job {
   private static List<Class<? extends Job>> loadAlways;
 
   private Transaction<? extends TransactionContainer> transaction = null;
-  private Mode mode = null;
+  private JobFailureSeverity mode = null;
   private final TransactionStage stage;
   private EntityInterface entity = null;
 
@@ -128,7 +128,7 @@ public abstract class Job {
   }
 
   public final Job init(
-      final Mode mode,
+      final JobFailureSeverity mode,
       final EntityInterface entity,
       final Transaction<? extends TransactionContainer> transaction) {
     this.mode = mode;
@@ -149,11 +149,11 @@ public abstract class Job {
     return this.entity;
   }
 
-  protected final Mode getMode() {
+  protected final JobFailureSeverity getMode() {
     return this.mode;
   }
 
-  protected final void setMode(final Mode mode) {
+  protected final void setMode(final JobFailureSeverity mode) {
     this.mode = mode;
   }
 
@@ -307,7 +307,7 @@ public abstract class Job {
    */
   public static Job getJob(
       final String job,
-      final Mode mode,
+      final JobFailureSeverity mode,
       final EntityInterface entity,
       final Transaction<? extends TransactionContainer> transaction) {
     // Fill `allClasses` with available subclasses
@@ -397,7 +397,7 @@ public abstract class Job {
     for (final Class<? extends Job> j : loadAlways) {
       if (EntityJob.class.isAssignableFrom(j)
           && j.getAnnotation(JobAnnotation.class).transaction().isInstance(transaction)) {
-        jobs.add(getJob(j, Mode.MUST, entity, transaction));
+        jobs.add(getJob(j, JobFailureSeverity.ERROR, entity, transaction));
       }
     }
 
@@ -427,7 +427,7 @@ public abstract class Job {
 
   private static Job getJob(
       final Class<? extends Job> jobClass,
-      final Mode mode,
+      final JobFailureSeverity mode,
       final EntityInterface entity,
       final Transaction<? extends TransactionContainer> transaction) {
     Job ret;
@@ -459,7 +459,7 @@ public abstract class Job {
     // load flag jobs
     if (!entity.getFlags().isEmpty()) {
       for (final String key : entity.getFlags().keySet()) {
-        final Job j = getJob(key, Mode.MUST, entity, transaction);
+        final Job j = getJob(key, JobFailureSeverity.ERROR, entity, transaction);
         if (j != null) {
           if (j instanceof FlagJob) {
             ((FlagJob) j).setValue(entity.getFlag(key));
@@ -474,7 +474,7 @@ public abstract class Job {
       for (final EntityInterface p : entity.getParents()) {
         if (!p.getFlags().isEmpty()) {
           for (final String key : p.getFlags().keySet()) {
-            final Job j = getJob(key, Mode.MUST, entity, transaction);
+            final Job j = getJob(key, JobFailureSeverity.ERROR, entity, transaction);
             if (j != null) {
               if (j instanceof FlagJob) {
                 ((FlagJob) j).setValue(p.getFlag(key));
@@ -493,7 +493,7 @@ public abstract class Job {
       for (final EntityInterface p : entity.getProperties()) {
         if (!p.getFlags().isEmpty()) {
           for (final String key : p.getFlags().keySet()) {
-            final Job j = getJob(key, Mode.MUST, entity, transaction);
+            final Job j = getJob(key, JobFailureSeverity.ERROR, entity, transaction);
             if (j != null) {
               if (j instanceof FlagJob) {
                 ((FlagJob) j).setValue(p.getFlag(key));
@@ -572,7 +572,7 @@ public abstract class Job {
     for (final Class<? extends Job> j : loadAlways) {
       if (ContainerJob.class.isAssignableFrom(j)
           && j.getAnnotation(JobAnnotation.class).transaction().isInstance(transaction)) {
-        jobs.add(getJob(j, Mode.MUST, null, transaction));
+        jobs.add(getJob(j, JobFailureSeverity.ERROR, null, transaction));
       }
     }
     return jobs;
diff --git a/src/main/java/org/caosdb/server/jobs/JobConfig.java b/src/main/java/org/caosdb/server/jobs/JobConfig.java
index 6cceeae3bffb545cbfa82af7540fe2e9c602ba6c..cbbe93f127602ac12749644f64edf5d498b88b7a 100644
--- a/src/main/java/org/caosdb/server/jobs/JobConfig.java
+++ b/src/main/java/org/caosdb/server/jobs/JobConfig.java
@@ -16,7 +16,7 @@ import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.RetrieveEntity;
 import org.caosdb.server.entity.container.TransactionContainer;
 import org.caosdb.server.entity.wrapper.Property;
-import org.caosdb.server.jobs.core.Mode;
+import org.caosdb.server.jobs.core.JobFailureSeverity;
 import org.caosdb.server.transaction.Transaction;
 import org.caosdb.server.utils.ConfigurationException;
 
@@ -87,7 +87,7 @@ public class JobConfig {
       final Integer entity = Integer.parseInt(row[1]);
       final String transaction = row[2];
       final String job = row[3];
-      final Mode mode = Mode.valueOf(row[4]);
+      final JobFailureSeverity mode = JobFailureSeverity.valueOf(row[4]);
       final String key = getKey(domain, entity, transaction);
       if (!result.containsKey(key)) {
         result.put(key, new ArrayList<>());
@@ -116,7 +116,9 @@ public class JobConfig {
       final List<Job> result = new LinkedList<>();
       jobRules.forEach(
           config -> {
-            result.add(Job.getJob((String) config[0], (Mode) config[1], target, transaction));
+            result.add(
+                Job.getJob(
+                    (String) config[0], (JobFailureSeverity) config[1], target, transaction));
           });
       return result;
     }
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckDescPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckDescPresent.java
index fc3a5114f240c796c114f92f8e6271e4fd3bd9ac..d94e61f26b7140fa468778ca853ed68726582a77 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckDescPresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckDescPresent.java
@@ -36,11 +36,11 @@ public class CheckDescPresent extends EntityJob {
   public final void run() {
     if (!getEntity().hasDescription()) {
       switch (getMode()) {
-        case MUST:
+        case ERROR:
           getEntity().addError(ServerMessages.ENTITY_HAS_NO_DESCRIPTION);
           getEntity().setEntityStatus(EntityStatus.UNQUALIFIED);
           break;
-        case SHOULD:
+        case WARN:
           getEntity().addWarning(ServerMessages.ENTITY_HAS_NO_DESCRIPTION);
         default:
           break;
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckNamePresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckNamePresent.java
index f1600ce42117ab5f37fccd33b79d821efeccb774..4f0e5f324391ccb873ffafc31a789f0e3edd2768 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckNamePresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckNamePresent.java
@@ -36,11 +36,11 @@ public class CheckNamePresent extends EntityJob {
   public final void run() {
     if (!getEntity().hasName()) {
       switch (getMode()) {
-        case MUST:
+        case ERROR:
           getEntity().addError(ServerMessages.ENTITY_HAS_NO_NAME);
           getEntity().setEntityStatus(EntityStatus.UNQUALIFIED);
           break;
-        case SHOULD:
+        case WARN:
           getEntity().addWarning(ServerMessages.ENTITY_HAS_NO_NAME);
           break;
         default:
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckNoAdditionalPropertiesPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckNoAdditionalPropertiesPresent.java
index b04a9151ab5c142e97a6efc9b19607896ab38daf..9ff3b127a8226b2d3a5cba1e2dcf2421c9d82eec 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckNoAdditionalPropertiesPresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckNoAdditionalPropertiesPresent.java
@@ -45,7 +45,7 @@ public class CheckNoAdditionalPropertiesPresent extends EntityJob {
   }
 
   private void addMessage(EntityInterface property, Message message) {
-    if (getMode() == Mode.MUST) {
+    if (getMode() == JobFailureSeverity.ERROR) {
       property.addError(message);
     } else {
       property.addWarning(message);
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckNoOverridesPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckNoOverridesPresent.java
index e439354e88f39675491682877dd27aa54fd7a3ef..e0eca6b76a07e71794288340b3456187475c0edf 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckNoOverridesPresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckNoOverridesPresent.java
@@ -28,7 +28,7 @@ public class CheckNoOverridesPresent extends EntityJob {
   }
 
   private void addMessage(Property p, Message message) {
-    if (getMode() == Mode.MUST) {
+    if (getMode() == JobFailureSeverity.ERROR) {
       p.addError(message);
     } else {
       p.addWarning(message);
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java
index fc557f8907c22799dc1400a17c5377fb677306e5..ffd0431bd72eabc2231c11e2d4af3aa6205a8ed8 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java
@@ -53,7 +53,7 @@ public class CheckParOblPropPresent extends EntityJob {
     if (getEntity().hasParents()) {
 
       handleImportanceFlags();
-      if (getMode() == Mode.IGNORE) {
+      if (getMode() == JobFailureSeverity.IGNORE) {
         // importance is to be ignored
         return;
       }
@@ -106,12 +106,12 @@ public class CheckParOblPropPresent extends EntityJob {
           // implements this parentProperty. Add the
           // respective messages.
           switch (getMode()) {
-            case MUST:
+            case ERROR:
               // TODO add information WHICH property is
               // missing.
               getEntity().addError(ServerMessages.OBLIGATORY_PROPERTY_MISSING);
               break;
-            case SHOULD:
+            case WARN:
               // TODO add information WHICH property is
               // missing.
               getEntity().addWarning(ServerMessages.OBLIGATORY_PROPERTY_MISSING);
@@ -133,13 +133,13 @@ public class CheckParOblPropPresent extends EntityJob {
     if (entityFlag != null) {
       switch (entityFlag) {
         case "error":
-          setMode(Mode.MUST);
+          setMode(JobFailureSeverity.ERROR);
           break;
         case "warn":
-          setMode(Mode.SHOULD);
+          setMode(JobFailureSeverity.WARN);
           break;
         case "ignore":
-          setMode(Mode.IGNORE);
+          setMode(JobFailureSeverity.IGNORE);
           break;
         default:
           // do nothing
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckParPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckParPresent.java
index 8851456c236c0afd9f922f187089adc5f4e35ab1..3ab63fb1468f67399d47a7a737217c06d5faac3e 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckParPresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckParPresent.java
@@ -36,11 +36,11 @@ public class CheckParPresent extends EntityJob {
   public final void run() {
     if (!getEntity().hasParents() || getEntity().getParents().isEmpty()) {
       switch (getMode()) {
-        case MUST:
+        case ERROR:
           getEntity().addError(ServerMessages.ENTITY_HAS_NO_PARENTS);
           getEntity().setEntityStatus(EntityStatus.UNQUALIFIED);
           break;
-        case SHOULD:
+        case WARN:
           getEntity().addWarning(ServerMessages.ENTITY_HAS_NO_PARENTS);
         default:
           break;
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckPropPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckPropPresent.java
index 31a460971bc80ccf61d775c96b4632fa38f14f66..cbb8661049cf86792834f7adb89de08906e9753e 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckPropPresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckPropPresent.java
@@ -36,11 +36,11 @@ public class CheckPropPresent extends EntityJob {
   public final void run() {
     if (getEntity().getProperties().isEmpty()) {
       switch (getMode()) {
-        case MUST:
+        case ERROR:
           getEntity().addError(ServerMessages.ENTITY_HAS_NO_PROPERTIES);
           getEntity().setEntityStatus(EntityStatus.UNQUALIFIED);
           break;
-        case SHOULD:
+        case WARN:
           getEntity().addWarning(ServerMessages.ENTITY_HAS_NO_PROPERTIES);
         default:
           break;
diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckUnitPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckUnitPresent.java
index aa87ecfff69635407bc90d372c89f089e4f308dc..1688ab7f2a32eb6f088f24bc1d8c5945b46f49ca 100644
--- a/src/main/java/org/caosdb/server/jobs/core/CheckUnitPresent.java
+++ b/src/main/java/org/caosdb/server/jobs/core/CheckUnitPresent.java
@@ -41,11 +41,11 @@ public class CheckUnitPresent extends EntityJob {
 
     if (!hasUnit(getEntity())) {
       switch (getMode()) {
-        case MUST:
+        case ERROR:
           getEntity().addError(ServerMessages.ENTITY_HAS_NO_UNIT);
           getEntity().setEntityStatus(EntityStatus.UNQUALIFIED);
           break;
-        case SHOULD:
+        case WARN:
           getEntity().addWarning(ServerMessages.ENTITY_HAS_NO_UNIT);
         default:
           break;
diff --git a/src/main/java/org/caosdb/server/jobs/core/Mode.java b/src/main/java/org/caosdb/server/jobs/core/JobFailureSeverity.java
similarity index 55%
rename from src/main/java/org/caosdb/server/jobs/core/Mode.java
rename to src/main/java/org/caosdb/server/jobs/core/JobFailureSeverity.java
index e786c7fe5eb2f7d1e7da3f4ea1f831d37b3f4755..f3bfe63e15bd93a70590ddb413f8863533b7db88 100644
--- a/src/main/java/org/caosdb/server/jobs/core/Mode.java
+++ b/src/main/java/org/caosdb/server/jobs/core/JobFailureSeverity.java
@@ -22,8 +22,22 @@
  */
 package org.caosdb.server.jobs.core;
 
-public enum Mode {
-  MUST,
-  SHOULD,
+/**
+ * Describes the severity of a failure of a job (esp. consitency checks).
+ *
+ * <ul>
+ *   <li>{@link #ERROR} - a failure throws an error and the transaction will not succeed.
+ *   <li>{@link #WARN} - a failure produces a warning but the transaction may succeed anyway.
+ *   <li>{@link #IGNORE} - the job may fail silently. Jobs can also decide to not run at all if that
+ *       is not necessary in this case.
+ *       <p>Jobs where this doesn't make sense at all may also ignore the severity. It is rather a
+ *       convenient way to configure jobs where this makes sense than a definitive normative
+ *       property of a job.
+ *
+ * @author Timm Fitschen <t.fitschen@indiscale.com>
+ */
+public enum JobFailureSeverity {
+  ERROR,
+  WARN,
   IGNORE,
 }
diff --git a/src/main/java/org/caosdb/server/jobs/core/LoadContainerFlagJobs.java b/src/main/java/org/caosdb/server/jobs/core/LoadContainerFlagJobs.java
index ef8df214c804fb1d55c3ed088c5f7f6e998aca07..c04fd21d588c9a9a2f6e59ce7c1fff445a225c67 100644
--- a/src/main/java/org/caosdb/server/jobs/core/LoadContainerFlagJobs.java
+++ b/src/main/java/org/caosdb/server/jobs/core/LoadContainerFlagJobs.java
@@ -36,7 +36,7 @@ public class LoadContainerFlagJobs extends ContainerJob {
   protected void run() {
     if (getContainer().getFlags() != null) {
       for (final Entry<String, String> flag : getContainer().getFlags().entrySet()) {
-        final Job j = Job.getJob(flag.getKey(), Mode.MUST, null, getTransaction());
+        final Job j = Job.getJob(flag.getKey(), JobFailureSeverity.ERROR, null, getTransaction());
         if (j != null) {
           if (j instanceof FlagJob) {
             ((FlagJob) j).setValue(flag.getValue());
diff --git a/src/main/java/org/caosdb/server/transaction/Retrieve.java b/src/main/java/org/caosdb/server/transaction/Retrieve.java
index 19f840e92a1a6812e2ae2610ed3ace23b7e3cee7..250df0423869ae97a766da2fc54131e04d5257ca 100644
--- a/src/main/java/org/caosdb/server/transaction/Retrieve.java
+++ b/src/main/java/org/caosdb/server/transaction/Retrieve.java
@@ -31,7 +31,7 @@ import org.caosdb.server.entity.xml.SetFieldStrategy;
 import org.caosdb.server.entity.xml.ToElementStrategy;
 import org.caosdb.server.entity.xml.ToElementable;
 import org.caosdb.server.jobs.ScheduledJob;
-import org.caosdb.server.jobs.core.Mode;
+import org.caosdb.server.jobs.core.JobFailureSeverity;
 import org.caosdb.server.jobs.core.RemoveDuplicates;
 import org.caosdb.server.jobs.core.ResolveNames;
 import org.caosdb.server.permissions.EntityPermission;
@@ -53,14 +53,14 @@ public class Retrieve extends Transaction<RetrieveContainer> {
     // resolve names
     {
       final ResolveNames r = new ResolveNames();
-      r.init(Mode.SHOULD, null, this);
+      r.init(JobFailureSeverity.WARN, null, this);
       ScheduledJob scheduledJob = getSchedule().add(r);
       getSchedule().runJob(scheduledJob);
     }
 
     {
       final RemoveDuplicates job = new RemoveDuplicates();
-      job.init(Mode.MUST, null, this);
+      job.init(JobFailureSeverity.ERROR, null, this);
       ScheduledJob scheduledJob = getSchedule().add(job);
       getSchedule().runJob(scheduledJob);
     }
diff --git a/src/main/java/org/caosdb/server/transaction/Transaction.java b/src/main/java/org/caosdb/server/transaction/Transaction.java
index 99c305fa17b37878cc5f3277c93623a915be4ea3..b30d13b469ebe05222d2db1ab958fe0a4d3a0f26 100644
--- a/src/main/java/org/caosdb/server/transaction/Transaction.java
+++ b/src/main/java/org/caosdb/server/transaction/Transaction.java
@@ -45,7 +45,7 @@ import org.caosdb.server.jobs.TransactionStage;
 import org.caosdb.server.jobs.core.AccessControl;
 import org.caosdb.server.jobs.core.CheckDatatypePresent;
 import org.caosdb.server.jobs.core.CheckEntityACLRoles;
-import org.caosdb.server.jobs.core.Mode;
+import org.caosdb.server.jobs.core.JobFailureSeverity;
 import org.caosdb.server.jobs.core.PickUp;
 import org.caosdb.server.permissions.EntityACL;
 import org.caosdb.server.utils.AbstractObservable;
@@ -96,13 +96,17 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra
    */
   protected void makeSchedule() throws Exception {
     // load flag jobs
-    final Job loadContainerFlags = Job.getJob("LoadContainerFlagJobs", Mode.MUST, null, this);
+    final Job loadContainerFlags =
+        Job.getJob("LoadContainerFlagJobs", JobFailureSeverity.ERROR, null, this);
     final ScheduledJob scheduledJob = this.schedule.add(loadContainerFlags);
     this.schedule.runJob(scheduledJob);
 
     // AccessControl
-    this.schedule.add(Job.getJob(AccessControl.class.getSimpleName(), Mode.MUST, null, this));
-    this.schedule.add(Job.getJob(CheckEntityACLRoles.class.getSimpleName(), Mode.MUST, null, this));
+    this.schedule.add(
+        Job.getJob(AccessControl.class.getSimpleName(), JobFailureSeverity.ERROR, null, this));
+    this.schedule.add(
+        Job.getJob(
+            CheckEntityACLRoles.class.getSimpleName(), JobFailureSeverity.ERROR, null, this));
 
     // load permanent container jobs
     this.schedule.addAll(Job.loadPermanentContainerJobs(this));
@@ -113,12 +117,12 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra
 
       // additionally load datatype job
       if (e.hasValue()) {
-        this.schedule.add(new CheckDatatypePresent().init(Mode.MUST, e, this));
+        this.schedule.add(new CheckDatatypePresent().init(JobFailureSeverity.ERROR, e, this));
       }
 
       // load pickup job if necessary
       if (e.hasFileProperties() && e.getFileProperties().isPickupable()) {
-        this.schedule.add(new PickUp().init(Mode.MUST, e, this));
+        this.schedule.add(new PickUp().init(JobFailureSeverity.ERROR, e, this));
       }
     }
   }