diff --git a/lib/watcher/__init__.py b/lib/watcher/__init__.py
index 1dee4f390e4a943dd74cd8ee112f1bd9f0e4ae50..7dee79ec2778da4839a8061e55d59d33232a738e 100644
--- a/lib/watcher/__init__.py
+++ b/lib/watcher/__init__.py
@@ -166,9 +166,7 @@ def GetClusterData():
 
   instances = {}
 
-  # write the instance status file
-  up_data = "".join(["%s %s\n" % (fields[0], fields[1]) for fields in result])
-  utils.WriteFile(file_name=constants.INSTANCE_STATUS_FILE, data=up_data)
+  _UpdateInstanceStatus(client, constants.INSTANCE_STATUS_FILE)
 
   for fields in result:
     (name, status, autostart, snodes) = fields
@@ -437,6 +435,25 @@ def ParseOptions():
   return (options, args)
 
 
+def _UpdateInstanceStatus(cl, filename):
+  """Get a list of instances on this cluster.
+
+  @todo: Think about doing this per nodegroup, too
+
+  """
+  op = opcodes.OpInstanceQuery(output_fields=["name", "status"], names=[],
+                               use_locking=True)
+  job_id = cl.SubmitJob([op])
+  (result, ) = cli.PollJob(job_id, cl=cl, feedback_fn=logging.debug)
+
+  cl.ArchiveJob(job_id)
+
+  logging.debug("Got instance data, writing status file %s", filename)
+
+  utils.WriteFile(filename, data="".join("%s %s\n" % (name, status)
+                                         for (name, status) in result))
+
+
 @rapi.client.UsesRapiClient
 def Main():
   """Main function.