diff --git a/lib/jqueue.py b/lib/jqueue.py
index 725d93bbdd0444fd394eb199f434143305812123..6e0ccec206eaae45f6a7c66035452606189a593b 100644
--- a/lib/jqueue.py
+++ b/lib/jqueue.py
@@ -325,6 +325,51 @@ class _QueuedJob(object):
 
     return entries
 
+  def GetInfo(self, fields):
+    """Returns information about a job.
+
+    @type fields: list
+    @param fields: names of fields to return
+    @rtype: list
+    @return: list with one element for each field
+    @raise errors.OpExecError: when an invalid field
+        has been passed
+
+    """
+    row = []
+    for fname in fields:
+      if fname == "id":
+        row.append(self.id)
+      elif fname == "status":
+        row.append(self.CalcStatus())
+      elif fname == "ops":
+        row.append([op.input.__getstate__() for op in self.ops])
+      elif fname == "opresult":
+        row.append([op.result for op in self.ops])
+      elif fname == "opstatus":
+        row.append([op.status for op in self.ops])
+      elif fname == "oplog":
+        row.append([op.log for op in self.ops])
+      elif fname == "opstart":
+        row.append([op.start_timestamp for op in self.ops])
+      elif fname == "opexec":
+        row.append([op.exec_timestamp for op in self.ops])
+      elif fname == "opend":
+        row.append([op.end_timestamp for op in self.ops])
+      elif fname == "received_ts":
+        row.append(self.received_timestamp)
+      elif fname == "start_ts":
+        row.append(self.start_timestamp)
+      elif fname == "end_ts":
+        row.append(self.end_timestamp)
+      elif fname == "lock_status":
+        row.append(self.lock_status)
+      elif fname == "summary":
+        row.append([op.input.Summary() for op in self.ops])
+      else:
+        raise errors.OpExecError("Invalid self query field '%s'" % fname)
+    return row
+
   def MarkUnfinishedOps(self, status, result):
     """Mark unfinished opcodes with a given status and result.
 
@@ -1158,7 +1203,7 @@ class JobQueue(object):
       logging.debug("Waiting for changes in job %s", job_id)
 
       status = job.CalcStatus()
-      job_info = self._GetJobInfoUnlocked(job, fields)
+      job_info = job.GetInfo(fields)
       log_entries = job.GetLogEntries(prev_log_serial)
 
       # Serializing and deserializing data can cause type changes (e.g. from
@@ -1352,54 +1397,6 @@ class JobQueue(object):
 
     return (archived_count, len(all_job_ids) - last_touched)
 
-  @staticmethod
-  def _GetJobInfoUnlocked(job, fields):
-    """Returns information about a job.
-
-    @type job: L{_QueuedJob}
-    @param job: the job which we query
-    @type fields: list
-    @param fields: names of fields to return
-    @rtype: list
-    @return: list with one element for each field
-    @raise errors.OpExecError: when an invalid field
-        has been passed
-
-    """
-    row = []
-    for fname in fields:
-      if fname == "id":
-        row.append(job.id)
-      elif fname == "status":
-        row.append(job.CalcStatus())
-      elif fname == "ops":
-        row.append([op.input.__getstate__() for op in job.ops])
-      elif fname == "opresult":
-        row.append([op.result for op in job.ops])
-      elif fname == "opstatus":
-        row.append([op.status for op in job.ops])
-      elif fname == "oplog":
-        row.append([op.log for op in job.ops])
-      elif fname == "opstart":
-        row.append([op.start_timestamp for op in job.ops])
-      elif fname == "opexec":
-        row.append([op.exec_timestamp for op in job.ops])
-      elif fname == "opend":
-        row.append([op.end_timestamp for op in job.ops])
-      elif fname == "received_ts":
-        row.append(job.received_timestamp)
-      elif fname == "start_ts":
-        row.append(job.start_timestamp)
-      elif fname == "end_ts":
-        row.append(job.end_timestamp)
-      elif fname == "lock_status":
-        row.append(job.lock_status)
-      elif fname == "summary":
-        row.append([op.input.Summary() for op in job.ops])
-      else:
-        raise errors.OpExecError("Invalid job query field '%s'" % fname)
-    return row
-
   @utils.LockedMethod
   @_RequireOpenQueue
   def QueryJobs(self, job_ids, fields):
@@ -1423,7 +1420,7 @@ class JobQueue(object):
       if job is None:
         jobs.append(None)
       else:
-        jobs.append(self._GetJobInfoUnlocked(job, fields))
+        jobs.append(job.GetInfo(fields))
 
     return jobs