diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded
index 31a74d5e533ce1231edb874178b52452708456b5..8cdda21dfc27a80a21f39ebf839bc9a85d8a4867 100755
--- a/daemons/ganeti-noded
+++ b/daemons/ganeti-noded
@@ -569,6 +569,16 @@ class NodeDaemonRequestHandler(http.HTTPRequestHandler):
     """
     return backend.JobQueuePurge()
 
+  @staticmethod
+  @_RequireJobQueueLock
+  def perspective_jobqueue_rename(params):
+    """Rename a job queue file.
+
+    """
+    (old, new) = params
+
+    return backend.JobQueueRename(old, new)
+
 
 class NodeDaemonHttpServer(http.HTTPServer):
   def __init__(self, server_address):
diff --git a/lib/backend.py b/lib/backend.py
index f157c196f16151cc802cdbe268384db908bce6a0..2d7f6c9841dd6bf2d86006993df7a623096b267b 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -1690,6 +1690,18 @@ def JobQueuePurge():
   _CleanDirectory(constants.JOB_QUEUE_ARCHIVE_DIR)
 
 
+def JobQueueRename(old, new):
+  """Renames a job queue file.
+
+  """
+  if not (_IsJobQueueFile(old) and _IsJobQueueFile(new)):
+    return False
+
+  os.rename(old, new)
+
+  return True
+
+
 def CloseBlockDevices(disks):
   """Closes the given block devices.
 
diff --git a/lib/rpc.py b/lib/rpc.py
index 368d1f713230ecbc622c04514960e7da8f59e96f..9fd542ccb6e43890b6a8b31839e358f9d8a92ac8 100644
--- a/lib/rpc.py
+++ b/lib/rpc.py
@@ -826,3 +826,16 @@ def call_jobqueue_purge(node):
   c.connect(node)
   c.run()
   return c.getresult().get(node, False)
+
+
+def call_jobqueue_rename(node_list, old, new):
+  """Rename a job queue file.
+
+  This is a multi-node call.
+
+  """
+  c = Client("jobqueue_rename", [old, new])
+  c.connect_list(node_list)
+  c.run()
+  result = c.getresult()
+  return result