diff --git a/NEWS b/NEWS
index 3c9a7b68d2638be7389f8065464307bf1ba528b5..3f09dbbe0e5cc1766f089665dfd5c107144193f0 100644
--- a/NEWS
+++ b/NEWS
@@ -21,6 +21,8 @@ documents those changes that are of interest to users and admins.
  -- Cray BASIL API: basic support added to the select/cray plugin.
     01_Cray-BASIL-basic-support.diff plus
     01_changes-from-first-revision-of-patch-01.diff
+ -- Prevent changing a node's Reason or State on a Cray system.
+    02_salloc-no-node-update.diff
 
 * Changes in SLURM 2.3.0.pre1
 =============================
diff --git a/doc/man/man1/scontrol.1 b/doc/man/man1/scontrol.1
index 86c1a6f5b4cb6ab87d25d2594ce34d2e79228229..3cd31504ddd14a5c751875cabd56b40e92cdfd47 100644
--- a/doc/man/man1/scontrol.1
+++ b/doc/man/man1/scontrol.1
@@ -751,6 +751,7 @@ changing its underlying state.
 While all of the above states are valid, some of them are not valid new
 node states given their prior state.
 Generally only "DRAIN", "FAIL" and "RESUME" should be used.
+(This control is not supported on ALPS\-based Cray systems.)
 
 .TP
 \fIWeight\fP=<weight>
@@ -774,7 +775,7 @@ Identify the front end node to be updated. This specification is required.
 \fIReason\fP=<reason>
 Identify the reason the node is in a "DOWN" or "DRAIN" state.
 Use quotes to enclose a reason having more than one word.
-
+(Not supported on ALPS\-based Cray systems.)
 .TP
 \fIState\fP=<state>
 Identify the state to be assigned to the front end node. Possible values are
diff --git a/src/scontrol/update_node.c b/src/scontrol/update_node.c
index ddd55497d62e88e1b2faf6b01239fd46efb4f705..edc18aaa6782b385e25d64b846d8cd7371b3e85a 100644
--- a/src/scontrol/update_node.c
+++ b/src/scontrol/update_node.c
@@ -115,7 +115,8 @@ scontrol_update_node (int argc, char *argv[])
 			}
 			node_msg.weight = num;
 			update_cnt++;
-		} else if (strncasecmp(tag, "Reason", MAX(tag_len, 1)) == 0) {
+		} else if (strncasecmp(tag, "Reason", MAX(tag_len, 1)) == 0 &&
+			   !(cluster_flags & CLUSTER_FLAG_CRAYXT)) {
 			int len = strlen(val);
 			reason_str = xmalloc(len+1);
 			if (*val == '"')
@@ -134,8 +135,8 @@ scontrol_update_node (int argc, char *argv[])
 				node_msg.reason_uid = getuid();
 			}
 			update_cnt++;
-		}
-		else if (strncasecmp(tag, "State", MAX(tag_len, 1)) == 0) {
+		} else if (strncasecmp(tag, "State", MAX(tag_len, 1)) == 0 &&
+			   !(cluster_flags & CLUSTER_FLAG_CRAYXT)) {
 			if (strncasecmp(val, "NoResp",
 				        MAX(val_len, 3)) == 0) {
 				node_msg.node_state = NODE_STATE_NO_RESPOND;