diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBManagerCondition.java b/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchManagerCondition.java
similarity index 79%
copy from fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBManagerCondition.java
copy to fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchManagerCondition.java
index 7c2a6d9..8f2ea5c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBManagerCondition.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchManagerCondition.java
@@ -21,12 +21,10 @@
 import org.apache.fineract.infrastructure.core.condition.PropertiesCondition;
 import org.apache.fineract.infrastructure.core.config.FineractProperties;
 
-public class LoanCOBManagerCondition extends PropertiesCondition {
+public class BatchManagerCondition extends PropertiesCondition {
 
     @Override
     protected boolean matches(FineractProperties properties) {
-        boolean loanCobEnabled = properties.getJob().isLoanCobEnabled();
-        boolean batchManagerEnabled = properties.getMode().isBatchManagerEnabled();
-        return loanCobEnabled && batchManagerEnabled;
+        return properties.getMode().isBatchManagerEnabled();
     }
 }
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBManagerCondition.java b/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchWorkerCondition.java
similarity index 79%
rename from fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBManagerCondition.java
rename to fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchWorkerCondition.java
index 7c2a6d9..919798e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBManagerCondition.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/BatchWorkerCondition.java
@@ -21,12 +21,10 @@
 import org.apache.fineract.infrastructure.core.condition.PropertiesCondition;
 import org.apache.fineract.infrastructure.core.config.FineractProperties;
 
-public class LoanCOBManagerCondition extends PropertiesCondition {
+public class BatchWorkerCondition extends PropertiesCondition {
 
     @Override
     protected boolean matches(FineractProperties properties) {
-        boolean loanCobEnabled = properties.getJob().isLoanCobEnabled();
-        boolean batchManagerEnabled = properties.getMode().isBatchManagerEnabled();
-        return loanCobEnabled && batchManagerEnabled;
+        return properties.getMode().isBatchWorkerEnabled();
     }
 }
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBWorkerCondition.java b/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBWorkerCondition.java
deleted file mode 100644
index cfb3a2e..0000000
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/conditions/LoanCOBWorkerCondition.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cob.conditions;
-
-import org.apache.fineract.infrastructure.core.condition.PropertiesCondition;
-import org.apache.fineract.infrastructure.core.config.FineractProperties;
-
-public class LoanCOBWorkerCondition extends PropertiesCondition {
-
-    @Override
-    protected boolean matches(FineractProperties properties) {
-        boolean loanCobEnabled = properties.getJob().isLoanCobEnabled();
-        boolean batchWorkerEnabled = properties.getMode().isBatchWorkerEnabled();
-        return loanCobEnabled && batchWorkerEnabled;
-    }
-}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBManagerConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBManagerConfiguration.java
index 74ffd42..66386a4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBManagerConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBManagerConfiguration.java
@@ -20,7 +20,7 @@
 
 import org.apache.fineract.cob.COBBusinessStepService;
 import org.apache.fineract.cob.common.CustomJobParameterResolver;
-import org.apache.fineract.cob.conditions.LoanCOBManagerCondition;
+import org.apache.fineract.cob.conditions.BatchManagerCondition;
 import org.apache.fineract.cob.listener.COBExecutionListenerRunner;
 import org.apache.fineract.infrastructure.event.business.service.BusinessEventNotifierService;
 import org.apache.fineract.infrastructure.jobs.service.JobName;
@@ -47,7 +47,7 @@
 
 @Configuration
 @EnableBatchIntegration
-@Conditional(LoanCOBManagerCondition.class)
+@Conditional(BatchManagerCondition.class)
 public class LoanCOBManagerConfiguration {
 
     @Autowired
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBWorkerConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBWorkerConfiguration.java
index abbfeef..f50987a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBWorkerConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBWorkerConfiguration.java
@@ -22,7 +22,7 @@
 import org.apache.fineract.cob.common.CustomJobParameterResolver;
 import org.apache.fineract.cob.common.InitialisationTasklet;
 import org.apache.fineract.cob.common.ResetContextTasklet;
-import org.apache.fineract.cob.conditions.LoanCOBWorkerCondition;
+import org.apache.fineract.cob.conditions.BatchWorkerCondition;
 import org.apache.fineract.cob.listener.ChunkProcessingLoanItemListener;
 import org.apache.fineract.infrastructure.core.config.FineractProperties;
 import org.apache.fineract.infrastructure.jobs.service.JobName;
@@ -51,7 +51,7 @@
 import org.springframework.transaction.support.TransactionTemplate;
 
 @Configuration
-@Conditional(LoanCOBWorkerCondition.class)
+@Conditional(BatchWorkerCondition.class)
 public class LoanCOBWorkerConfiguration {
 
     @Autowired
diff --git a/fineract-provider/src/test/java/org/apache/fineract/cob/conditions/LoanCOBManagerConditionTest.java b/fineract-provider/src/test/java/org/apache/fineract/cob/conditions/BatchManagerConditionTest.java
similarity index 73%
rename from fineract-provider/src/test/java/org/apache/fineract/cob/conditions/LoanCOBManagerConditionTest.java
rename to fineract-provider/src/test/java/org/apache/fineract/cob/conditions/BatchManagerConditionTest.java
index ec04821..9aa953f 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/cob/conditions/LoanCOBManagerConditionTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/cob/conditions/BatchManagerConditionTest.java
@@ -32,7 +32,7 @@
 import org.springframework.mock.env.MockEnvironment;
 
 @ExtendWith(MockitoExtension.class)
-class LoanCOBManagerConditionTest {
+class BatchManagerConditionTest {
 
     @Mock
     private ConditionContext conditionContext;
@@ -43,7 +43,7 @@
     private MockEnvironment environment;
 
     @InjectMocks
-    private LoanCOBManagerCondition testObj = new LoanCOBManagerCondition();
+    private BatchManagerCondition testObj = new BatchManagerCondition();
 
     @BeforeEach
     public void setUp() {
@@ -52,24 +52,14 @@
     }
 
     @Test
-    public void testMatchesShouldReturnFalseWhenLoanCobIsDisabledAndManager() {
-        environment.withProperty("fineract.job.loan-cob-enabled", "false");
-        environment.withProperty("fineract.mode.batch-manager-enabled", "true");
-        boolean result = testObj.matches(conditionContext, metadata);
-        assertThat(result).isFalse();
-    }
-
-    @Test
-    public void testMatchesShouldReturnFalseWhenLoanCobIsEnabledAndNotManager() {
-        environment.withProperty("fineract.job.loan-cob-enabled", "true");
+    public void testMatchesShouldReturnFalseWhenManagerDisabled() {
         environment.withProperty("fineract.mode.batch-manager-enabled", "false");
         boolean result = testObj.matches(conditionContext, metadata);
         assertThat(result).isFalse();
     }
 
     @Test
-    public void testMatchesShouldReturnTrueWhenLoanCobIsEnabledAndManager() {
-        environment.withProperty("fineract.job.loan-cob-enabled", "true");
+    public void testMatchesShouldReturnTrueWhenManagerEnabled() {
         environment.withProperty("fineract.mode.batch-manager-enabled", "true");
         boolean result = testObj.matches(conditionContext, metadata);
         assertThat(result).isTrue();
diff --git a/fineract-provider/src/test/java/org/apache/fineract/cob/conditions/LoanCOBWorkerConditionTest.java b/fineract-provider/src/test/java/org/apache/fineract/cob/conditions/BatchWorkerConditionTest.java
similarity index 73%
rename from fineract-provider/src/test/java/org/apache/fineract/cob/conditions/LoanCOBWorkerConditionTest.java
rename to fineract-provider/src/test/java/org/apache/fineract/cob/conditions/BatchWorkerConditionTest.java
index 1a9385d..d7f2a00 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/cob/conditions/LoanCOBWorkerConditionTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/cob/conditions/BatchWorkerConditionTest.java
@@ -32,7 +32,7 @@
 import org.springframework.mock.env.MockEnvironment;
 
 @ExtendWith(MockitoExtension.class)
-class LoanCOBWorkerConditionTest {
+class BatchWorkerConditionTest {
 
     @Mock
     private ConditionContext conditionContext;
@@ -43,7 +43,7 @@
     private MockEnvironment environment;
 
     @InjectMocks
-    private LoanCOBWorkerCondition testObj = new LoanCOBWorkerCondition();
+    private BatchWorkerCondition testObj = new BatchWorkerCondition();
 
     @BeforeEach
     public void setUp() {
@@ -52,24 +52,14 @@
     }
 
     @Test
-    public void testMatchesShouldReturnFalseWhenLoanCobIsDisabledAndWorker() {
-        environment.withProperty("fineract.job.loan-cob-enabled", "false");
-        environment.withProperty("fineract.mode.batch-worker-enabled", "true");
-        boolean result = testObj.matches(conditionContext, metadata);
-        assertThat(result).isFalse();
-    }
-
-    @Test
-    public void testMatchesShouldReturnFalseWhenLoanCobIsEnabledAndNotWorker() {
-        environment.withProperty("fineract.job.loan-cob-enabled", "true");
+    public void testMatchesShouldReturnFalseWhenWorkerDisabled() {
         environment.withProperty("fineract.mode.batch-worker-enabled", "false");
         boolean result = testObj.matches(conditionContext, metadata);
         assertThat(result).isFalse();
     }
 
     @Test
-    public void testMatchesShouldReturnTrueWhenLoanCobIsEnabledAndWorker() {
-        environment.withProperty("fineract.job.loan-cob-enabled", "true");
+    public void testMatchesShouldReturnTrueWhenWorkerEnabled() {
         environment.withProperty("fineract.mode.batch-worker-enabled", "true");
         boolean result = testObj.matches(conditionContext, metadata);
         assertThat(result).isTrue();
