diff --git a/lib/mcpu.py b/lib/mcpu.py
index 2bf875f87fce9d26cf036213c7e3d4a0b9601f5d..cd5a4e4c36efdb7bc895d340c545a653a5d2e6dc 100644
--- a/lib/mcpu.py
+++ b/lib/mcpu.py
@@ -220,6 +220,14 @@ def _ProcessResult(submit_fn, op, result):
   return result
 
 
+def _FailingSubmitManyJobs(_):
+  """Implementation of L{OpExecCbBase.SubmitManyJobs} to raise an exception.
+
+  """
+  raise errors.ProgrammerError("Opcodes processed without callbacks (e.g."
+                               " queries) can not submit jobs")
+
+
 def _RpcResultsToHooksResults(rpc_results):
   """Function to convert RPC results to the format expected by HooksMaster.
 
@@ -299,9 +307,13 @@ class Processor(object):
                    " the operation")
       return lu.dry_run_result
 
+    if self._cbs:
+      submit_mj_fn = self._cbs.SubmitManyJobs
+    else:
+      submit_mj_fn = _FailingSubmitManyJobs
+
     try:
-      result = _ProcessResult(self._cbs.SubmitManyJobs, lu.op,
-                              lu.Exec(self.Log))
+      result = _ProcessResult(submit_mj_fn, lu.op, lu.Exec(self.Log))
       h_results = hm.RunPhase(constants.HOOKS_PHASE_POST)
       result = lu.HooksCallBack(constants.HOOKS_PHASE_POST, h_results,
                                 self.Log, result)