diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 774c236bcd202eb948548d609bcbfb9ed463744c..4845389be3401ae48ad5d795edfcc438bd7dc73b 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -4360,6 +4360,7 @@ class LUSetNodeParams(LogicalUnit):
     ("vm_capable", None, ht.TMaybeBool),
     ("secondary_ip", None, ht.TMaybeString),
     ("ndparams", None, ht.TOr(ht.TDict, ht.TNone)),
+    ("powered", None, ht.TMaybeBool),
     _PForce,
     ]
   REQ_BGL = False
@@ -4503,11 +4504,16 @@ class LUSetNodeParams(LogicalUnit):
     # away from the respective state, as only real changes are kept
 
     # TODO: We might query the real power state if it supports OOB
-    if _SupportsOob(self.cfg, node) and (self.op.offline is False and
-                                         not node.powered):
-      raise errors.OpPrereqError(("Please power on node %s first before you"
-                                  " can reset offline state") %
-                                 self.op.node_name)
+    if _SupportsOob(self.cfg, node):
+      if self.op.offline is False and not (node.powered or
+                                           self.op.powered == True):
+        raise errors.OpPrereqError(("Please power on node %s first before you"
+                                    " can reset offline state") %
+                                   self.op.node_name)
+    elif self.op.powered is not None:
+      raise errors.OpPrereqError(("Unable to change powered state for node %s"
+                                  " which does not support out-of-band"
+                                  " handling") % self.op.node_name)
 
     # If we're being deofflined/drained, we'll MC ourself if needed
     if (self.op.drained == False or self.op.offline == False or
@@ -4598,6 +4604,9 @@ class LUSetNodeParams(LogicalUnit):
     if self.op.ndparams:
       node.ndparams = self.new_ndparams
 
+    if self.op.powered is not None:
+      node.powered = self.op.powered
+
     for attr in ["master_capable", "vm_capable"]:
       val = getattr(self.op, attr)
       if val is not None:
diff --git a/lib/opcodes.py b/lib/opcodes.py
index 9ce1822aed40ac484ee75ede8c509af5ac0553fa..a5151316ca3d64b9e2fcd6b9574b22971f1081fa 100644
--- a/lib/opcodes.py
+++ b/lib/opcodes.py
@@ -490,6 +490,7 @@ class OpSetNodeParams(OpCode):
     "vm_capable",
     "secondary_ip",
     "ndparams",
+    "powered",
     ]