diff --git a/lib/cli.py b/lib/cli.py
index edb817c38179845289bcb3d6750cd04d7e1c7851..ce1277d1ecf891e8257eafa892510d2404147d11 100644
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -944,9 +944,8 @@ def GetOnlineNodes(nodes, cl=None, nowarn=False):
   if cl is None:
     cl = GetClient()
 
-  op = opcodes.OpQueryNodes(output_fields=["name", "offline"],
-                            names=nodes)
-  result = SubmitOpCode(op, cl=cl)
+  result = cl.QueryNodes(names=nodes, fields=["name", "offline"],
+                         use_locking=False)
   offline = [row[0] for row in result if row[1]]
   if offline and not nowarn:
     ToStderr("Note: skipping offline node(s): %s" % ", ".join(offline))
diff --git a/scripts/gnt-cluster b/scripts/gnt-cluster
index 5c9f2c2cd8a4022d42d85b7ddc565c8cac271844..7bc85d5ca229dcecdc060b03bee6bc99804ce92b 100755
--- a/scripts/gnt-cluster
+++ b/scripts/gnt-cluster
@@ -202,8 +202,8 @@ def ShowClusterVersion(opts, args):
   @return: the desired exit code
 
   """
-  op = opcodes.OpQueryClusterInfo()
-  result = SubmitOpCode(op)
+  cl = GetClient()
+  result = cl.QueryClusterInfo()
   ToStdout("Software version: %s", result["software_version"])
   ToStdout("Internode protocol: %s", result["protocol_version"])
   ToStdout("Configuration format: %s", result["config_version"])
@@ -236,8 +236,8 @@ def ShowClusterConfig(opts, args):
   @return: the desired exit code
 
   """
-  op = opcodes.OpQueryClusterInfo()
-  result = SubmitOpCode(op)
+  cl = GetClient()
+  result = cl.QueryClusterInfo()
 
   ToStdout("Cluster name: %s", result["name"])
 
diff --git a/scripts/gnt-node b/scripts/gnt-node
index 8c5ad972331a45ce4d8775ad49ff6085c11f302a..606b7c87402bdb05df631702fa22ee413d6da577 100755
--- a/scripts/gnt-node
+++ b/scripts/gnt-node
@@ -182,7 +182,6 @@ def EvacuateNode(opts, args):
   selected_fields = ["name", "sinst_list"]
   src_node = args[0]
 
-  op = opcodes.OpQueryNodes(output_fields=selected_fields, names=[src_node])
   result = cl.QueryNodes(names=[src_node], fields=selected_fields,
                          use_locking=True)
   src_node, sinst = result[0]
@@ -238,8 +237,10 @@ def FailoverNode(opts, args):
   force = opts.force
   selected_fields = ["name", "pinst_list"]
 
-  op = opcodes.OpQueryNodes(output_fields=selected_fields, names=args)
-  result = SubmitOpCode(op, cl=cl)
+  # these fields are static data anyway, so it doesn't matter, but
+  # locking=True should be safer
+  result = cl.QueryNodes(names=args, fields=selected_fields,
+                         use_locking=True)
   node, pinst = result[0]
 
   if not pinst:
@@ -320,10 +321,10 @@ def ShowNodeConfig(opts, args):
   @return: the desired exit code
 
   """
-  op = opcodes.OpQueryNodes(output_fields=["name", "pip", "sip",
-                                           "pinst_list", "sinst_list"],
-                            names=args)
-  result = SubmitOpCode(op)
+  cl = GetClient()
+  result = cl.QueryNodes(fields=["name", "pip", "sip",
+                                 "pinst_list", "sinst_list"],
+                         names=args, use_locking=True)
 
   for name, primary_ip, secondary_ip, pinst, sinst in result:
     ToStdout("Node name: %s", name)