diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index a148457f32f883402d290703b932a927aaaffa9b..d80c0da8bce4b3f5f596dc5845554d18d7fc85c8 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -3555,6 +3555,12 @@ class _NodeQuery(_QueryBase):
       node_to_primary = None
       node_to_secondary = None
 
+    if query.NQ_OOB in self.requested_data:
+      oob_support = dict((name, bool(_SupportsOob(lu.cfg, node)))
+                         for name, node in all_info.iteritems())
+    else:
+      oob_support = None
+
     if query.NQ_GROUP in self.requested_data:
       groups = lu.cfg.GetAllNodeGroupsInfo()
     else:
@@ -3562,7 +3568,8 @@ class _NodeQuery(_QueryBase):
 
     return query.NodeQueryData([all_info[name] for name in nodenames],
                                live_data, lu.cfg.GetMasterNode(),
-                               node_to_primary, node_to_secondary, groups)
+                               node_to_primary, node_to_secondary, groups,
+                               oob_support)
 
 
 class LUQueryNodes(NoHooksLU):
diff --git a/lib/query.py b/lib/query.py
index 4afa42f90655ac9f60a3847b0fae7e86730463df..55dc63f8e2be71d0059c995b078cf629071404c4 100644
--- a/lib/query.py
+++ b/lib/query.py
@@ -36,7 +36,8 @@ from ganeti import ht
 (NQ_CONFIG,
  NQ_INST,
  NQ_LIVE,
- NQ_GROUP) = range(1, 5)
+ NQ_GROUP,
+ NQ_OOB) = range(1, 6)
 
 (IQ_CONFIG,
  IQ_LIVE,
@@ -357,7 +358,7 @@ class NodeQueryData:
 
   """
   def __init__(self, nodes, live_data, master_name, node_to_primary,
-               node_to_secondary, groups):
+               node_to_secondary, groups, oob_support):
     """Initializes this class.
 
     """
@@ -367,6 +368,7 @@ class NodeQueryData:
     self.node_to_primary = node_to_primary
     self.node_to_secondary = node_to_secondary
     self.groups = groups
+    self.oob_support = oob_support
 
     # Used for individual rows
     self.curlive_data = None
@@ -429,6 +431,20 @@ def _GetNodeGroup(ctx, node):
   return (constants.QRFS_NORMAL, ng.name)
 
 
+def _GetNodePower(ctx, node):
+  """Returns the node powered state
+
+  @type ctx: L{NodeQueryData}
+  @type node: L{objects.Node}
+  @param node: Node object
+
+  """
+  if ctx.oob_support[node.name]:
+    return (constants.QRFS_NORMAL, node.powered)
+
+  return (constants.QRFS_UNAVAIL, None)
+
+
 def _GetLiveNodeField(field, kind, ctx, node):
   """Gets the value of a "live" field from L{NodeQueryData}.
 
@@ -483,6 +499,8 @@ def _BuildNodeFields():
     (_MakeField("group", "Group", constants.QFT_TEXT), NQ_GROUP, _GetNodeGroup),
     (_MakeField("group.uuid", "GroupUUID", constants.QFT_TEXT),
      NQ_CONFIG, lambda ctx, node: (constants.QRFS_NORMAL, node.group)),
+    (_MakeField("powered", "Powered", constants.QFT_BOOL), NQ_OOB,
+      _GetNodePower),
     ]
 
   def _GetLength(getter):
diff --git a/test/ganeti.query_unittest.py b/test/ganeti.query_unittest.py
index 607239a5cf2fec9c8a9efd3a5a7884d1289b2373..cb296a319d6e67826722db306fdc86d0a9dccf3b 100755
--- a/test/ganeti.query_unittest.py
+++ b/test/ganeti.query_unittest.py
@@ -289,7 +289,7 @@ class TestNodeQuery(unittest.TestCase):
       objects.Node(name="node3", drained=False),
       ]
     for live_data in [None, dict.fromkeys([node.name for node in nodes], {})]:
-      nqd = query.NodeQueryData(nodes, live_data, None, None, None, None)
+      nqd = query.NodeQueryData(nodes, live_data, None, None, None, None, None)
 
       q = self._Create(["name", "drained"])
       self.assertEqual(q.RequestedData(), set([query.NQ_CONFIG]))
@@ -313,7 +313,7 @@ class TestNodeQuery(unittest.TestCase):
     q = self._Create(selected)
     self.assertEqual(q.RequestedData(),
                      set([query.NQ_CONFIG, query.NQ_LIVE, query.NQ_INST,
-                          query.NQ_GROUP]))
+                          query.NQ_GROUP, query.NQ_OOB]))
 
     node_names = ["node%s" % i for i in range(20)]
     master_name = node_names[3]
@@ -376,10 +376,13 @@ class TestNodeQuery(unittest.TestCase):
       ng_uuid: objects.NodeGroup(name="ng1", uuid=ng_uuid),
       }
 
+    oob_support = dict((name, False) for name in node_names)
+
     master_node.group = ng_uuid
 
     nqd = query.NodeQueryData(nodes, live_data, master_name,
-                              node_to_primary, node_to_secondary, groups)
+                              node_to_primary, node_to_secondary, groups,
+                              oob_support)
     result = q.Query(nqd)
     self.assert_(compat.all(len(row) == len(selected) for row in result))
     self.assertEqual([row[field_index["name"]] for row in result],
@@ -442,7 +445,7 @@ class TestNodeQuery(unittest.TestCase):
     live_data = dict.fromkeys([node.name for node in nodes], {})
 
     # No data
-    nqd = query.NodeQueryData(None, None, None, None, None, None)
+    nqd = query.NodeQueryData(None, None, None, None, None, None, None)
     self.assertEqual(query._GetLiveNodeField("hello", constants.QFT_NUMBER,
                                              nqd, nodes[0]),
                      (constants.QRFS_NODATA, None))