diff --git a/jbatch/src/main/java/org/apache/batchee/container/impl/JobOperatorImpl.java b/jbatch/src/main/java/org/apache/batchee/container/impl/JobOperatorImpl.java
index 9212839..092c5a8 100755
--- a/jbatch/src/main/java/org/apache/batchee/container/impl/JobOperatorImpl.java
+++ b/jbatch/src/main/java/org/apache/batchee/container/impl/JobOperatorImpl.java
@@ -297,6 +297,6 @@
     }
 
     public void waitFor(final long id) {
-        callbackService.waitFor(id);
+        callbackService.waitFor(this,id);
     }
 }
diff --git a/jbatch/src/main/java/org/apache/batchee/container/services/callback/SimpleJobExecutionCallbackService.java b/jbatch/src/main/java/org/apache/batchee/container/services/callback/SimpleJobExecutionCallbackService.java
index bbf1465..f2c9666 100644
--- a/jbatch/src/main/java/org/apache/batchee/container/services/callback/SimpleJobExecutionCallbackService.java
+++ b/jbatch/src/main/java/org/apache/batchee/container/services/callback/SimpleJobExecutionCallbackService.java
@@ -18,9 +18,6 @@
 
 import org.apache.batchee.container.exception.BatchContainerRuntimeException;
 import org.apache.batchee.container.impl.jobinstance.RuntimeJobExecution;
-import org.apache.batchee.container.services.BatchKernelService;
-import org.apache.batchee.container.services.InternalJobExecution;
-import org.apache.batchee.container.services.ServicesManager;
 import org.apache.batchee.spi.JobExecutionCallbackService;
 import org.apache.batchee.util.Batches;
 
@@ -32,6 +29,9 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
+import javax.batch.operations.JobOperator;
+import javax.batch.runtime.JobExecution;
+
 public class SimpleJobExecutionCallbackService implements JobExecutionCallbackService {
     private final ConcurrentMap<Long, Collection<CountDownLatch>> waiters = new ConcurrentHashMap<Long, Collection<CountDownLatch>>();
 
@@ -46,7 +46,7 @@
     }
 
     @Override
-    public void waitFor(final long id) {
+    public void waitFor(final JobOperator jobOperator, final long id) {
         Collection<CountDownLatch> toRelease = waiters.get(id);
         if (toRelease == null) {
             toRelease = new CopyOnWriteArrayList<CountDownLatch>();
@@ -55,7 +55,7 @@
                 toRelease = existing;
             }
         }
-        if (checkIsDone(id)) {
+        if (checkIsDone(jobOperator, id)) {
             return;
         }
 
@@ -63,7 +63,7 @@
         toRelease.add(latch);
         try {
             while (!latch.await(1, TimeUnit.SECONDS)) {
-                if (checkIsDone(id)) {
+                if (checkIsDone(jobOperator, id)) {
                     return;
                 }
             }
@@ -78,9 +78,9 @@
         // no-op
     }
 
-    private boolean checkIsDone(final long id) {
+    private boolean checkIsDone(final JobOperator jobOperator, final long id) {
         // check before blocking
-        final InternalJobExecution finalCheckExec = ServicesManager.find().service(BatchKernelService.class).getJobExecution(id);
+        final JobExecution finalCheckExec = jobOperator.getJobExecution(id);
         if (finalCheckExec != null && Batches.isDone(finalCheckExec.getBatchStatus())) {
             waiters.remove(id);
             return true;
diff --git a/jbatch/src/main/java/org/apache/batchee/spi/JobExecutionCallbackService.java b/jbatch/src/main/java/org/apache/batchee/spi/JobExecutionCallbackService.java
index 2496292..25bfd8c 100644
--- a/jbatch/src/main/java/org/apache/batchee/spi/JobExecutionCallbackService.java
+++ b/jbatch/src/main/java/org/apache/batchee/spi/JobExecutionCallbackService.java
@@ -16,9 +16,11 @@
  */
 package org.apache.batchee.spi;
 
+import javax.batch.operations.JobOperator;
+
 import org.apache.batchee.container.impl.jobinstance.RuntimeJobExecution;
 
 public interface JobExecutionCallbackService extends BatchService {
     void onJobExecutionDone(RuntimeJobExecution jobExecution);
-    void waitFor(long id);
+    void waitFor(JobOperator jobOperator, long id);
 }
diff --git a/jbatch/src/test/java/org/apache/batchee/container/impl/JobOperatorImplTest.java b/jbatch/src/test/java/org/apache/batchee/container/impl/JobOperatorImplTest.java
index 922a08b..4042cf5 100644
--- a/jbatch/src/test/java/org/apache/batchee/container/impl/JobOperatorImplTest.java
+++ b/jbatch/src/test/java/org/apache/batchee/container/impl/JobOperatorImplTest.java
@@ -34,7 +34,7 @@
     public void runningExecutionMemory_BATCHEE112() {
         final JobOperator operator = new JobOperatorImpl(new ServicesManager() {{
             init(new Properties() {{
-                setProperty(PersistenceManagerService.class.getName(), MemoryPersistenceManagerService.class.getName());
+                setProperty(PersistenceManagerService.class.getSimpleName(), MemoryPersistenceManagerService.class.getName());
             }});
         }});
         for (int i = 0; i < 10; i++) {
