diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 1a1dcc857237d5eec50694099daa0a86597af131..e8379d64a26de0ba1be2df915d735df6f713767c 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -2091,7 +2091,7 @@ class LUQueryInstances(NoHooksLU):
   """Logical unit for querying instances.
 
   """
-  _OP_REQP = ["output_fields"]
+  _OP_REQP = ["output_fields", "names"]
 
   def CheckPrereq(self):
     """Check prerequisites.
@@ -2107,11 +2107,13 @@ class LUQueryInstances(NoHooksLU):
                        dynamic=self.dynamic_fields,
                        selected=self.op.output_fields)
 
+    self.wanted = _GetWantedInstances(self, self.op.names)
+
   def Exec(self, feedback_fn):
     """Computes the list of nodes and their attributes.
 
     """
-    instance_names = utils.NiceSort(self.cfg.GetInstanceList())
+    instance_names = self.wanted
     instance_list = [self.cfg.GetInstanceInfo(iname) for iname
                      in instance_names]
 
diff --git a/lib/opcodes.py b/lib/opcodes.py
index b75600c8b52b4e06512968021e0028ddc93fab47..c306ec39f3e9d5edfe9c030f7bfc4147b4661347 100644
--- a/lib/opcodes.py
+++ b/lib/opcodes.py
@@ -202,7 +202,7 @@ class OpDeactivateInstanceDisks(OpCode):
 class OpQueryInstances(OpCode):
   """Compute the list of instances."""
   OP_ID = "OP_INSTANCE_QUERY"
-  __slots__ = ["output_fields"]
+  __slots__ = ["output_fields", "names"]
 
 
 class OpQueryInstanceData(OpCode):
diff --git a/scripts/gnt-instance b/scripts/gnt-instance
index bfbf59f7b71eafd46e899c2443e149a26d5de8f2..a408d74e320da2676b5f57c75f745bee7d787e6e 100755
--- a/scripts/gnt-instance
+++ b/scripts/gnt-instance
@@ -41,7 +41,7 @@ def ListInstances(opts, args):
   else:
     selected_fields = opts.output.split(",")
 
-  op = opcodes.OpQueryInstances(output_fields=selected_fields)
+  op = opcodes.OpQueryInstances(output_fields=selected_fields, names=[])
   output = SubmitOpCode(op)
 
   if not opts.no_headers: