diff --git a/NEWS b/NEWS
index 5315e8f68255aaa625b052e1b2f04ad6b64ebad5..dcc584333f98503cc82b84ef989226f346bd8557 100644
--- a/NEWS
+++ b/NEWS
@@ -49,6 +49,8 @@ documents those changes that are of interest to users and administrators.
  -- Add null check for step_ptr->step_node_bitmap in _pick_step_nodes.
  -- Fix multi-cluster srun issue after 'scontrol reconfigure' was called.
  -- Fix accessing response_cluster_rec outside of write locks.
+ -- Fix Lua user messages not showing up on rejected submissions.
+ -- Fix printing multi-line error messages on rejected submissions.
 
 * Changes in Slurm 18.08.5-2
 ============================
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index 8358ba304357caa28070a2d33a4eacf0d0247512..71ba3453636b7dc30f47fd5db3f567da3fb008e4 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -10028,6 +10028,27 @@ _pack_return_code2_msg(return_code2_msg_t * msg, Buf buffer,
 	packstr(msg->err_msg,    buffer);
 }
 
+/*
+ * See print_multi_line_string()
+ *
+ * Will refactor in 19.05.
+ */
+static void _print_multi_line_error_string(char *user_msg)
+{
+	char *line, *buf, *ptrptr = NULL;
+
+	if (!user_msg)
+		return;
+
+	buf = xstrdup(user_msg);
+	line = strtok_r(buf, "\n", &ptrptr);
+	while (line) {
+		error("%s", line);
+		line = strtok_r(NULL, "\n", &ptrptr);
+	}
+	xfree(buf);
+}
+
 /* Log error message, otherwise replicate _unpack_return_code_msg() */
 static int
 _unpack_return_code2_msg(return_code_msg_t ** msg, Buf buffer,
@@ -10044,7 +10065,7 @@ _unpack_return_code2_msg(return_code_msg_t ** msg, Buf buffer,
 	safe_unpack32(&return_code_msg->return_code, buffer);
 	safe_unpackstr_xmalloc(&err_msg, &uint32_tmp, buffer);
 	if (err_msg) {
-		error("%s", err_msg);
+		_print_multi_line_error_string(err_msg);
 		xfree(err_msg);
 	}
 	return SLURM_SUCCESS;
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index 871a5f2b7dce7f37d181ec39fb8355a01caf258f..843589428564b8957266584d17198c8b9e962268 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -1514,7 +1514,31 @@ static void _slurm_rpc_allocate_pack(slurm_msg_t * msg)
 			_kill_job_on_msg_fail(pack_job_id);
 		list_destroy(resp);
 	} else {
+		char *aggregate_user_msg = NULL;
+
 send_msg:	info("%s: %s ", __func__, slurm_strerror(error_code));
+
+		/*
+		 * If job is rejected, add the job submit message to the error
+		 * message to avoid it getting lost. Was saved off earlier.
+		 */
+		for (inx = 0; inx < pack_cnt; inx++) {
+			if (!job_submit_user_msg[inx])
+				continue;
+
+			xstrfmtcat(aggregate_user_msg, "%s%d: %s",
+				   (aggregate_user_msg ? "\n" : ""),
+				    inx, job_submit_user_msg[inx]);
+		}
+		if (aggregate_user_msg) {
+			char *tmp_err_msg = err_msg;
+			err_msg = aggregate_user_msg;
+			if (tmp_err_msg) {
+				xstrfmtcat(err_msg, "\n%s", tmp_err_msg);
+				xfree(tmp_err_msg);
+			}
+		}
+
 		if (err_msg)
 			slurm_send_rc_err_msg(msg, error_code, err_msg);
 		else
@@ -1711,6 +1735,21 @@ send_msg:
 			_throttle_fini(&active_rpc_cnt);
 		}
 		info("%s: %s ", __func__, slurm_strerror(error_code));
+
+		/*
+		 * If job is rejected, add the job submit message to the error
+		 * message to avoid it getting lost. Was saved off earlier.
+		 */
+		if (job_submit_user_msg) {
+			char *tmp_err_msg = err_msg;
+			err_msg = job_submit_user_msg;
+			job_submit_user_msg = NULL;
+			if (tmp_err_msg) {
+				xstrfmtcat(err_msg, "\n%s", tmp_err_msg);
+				xfree(tmp_err_msg);
+			}
+		}
+
 		if (err_msg)
 			slurm_send_rc_err_msg(msg, error_code, err_msg);
 		else
@@ -4093,6 +4132,21 @@ send_msg:
 
 	if (reject_job) {
 		info("%s: %s", __func__, slurm_strerror(error_code));
+
+		/*
+		 * If job is rejected, add the job submit message to the error
+		 * message to avoid it getting lost. Was saved off earlier.
+		 */
+		if (job_submit_user_msg) {
+			char *tmp_err_msg = err_msg;
+			err_msg = job_submit_user_msg;
+			job_submit_user_msg = NULL;
+			if (tmp_err_msg) {
+				xstrfmtcat(err_msg, "\n%s", tmp_err_msg);
+				xfree(tmp_err_msg);
+			}
+		}
+
 		if (err_msg)
 			slurm_send_rc_err_msg(msg, error_code, err_msg);
 		else
@@ -4371,6 +4425,21 @@ send_msg:
 	END_TIMER2("_slurm_rpc_submit_batch_pack_job");
 	if (reject_job) {
 		info("%s: %s", __func__, slurm_strerror(error_code));
+
+		/*
+		 * If job is rejected, add the job submit message to the error
+		 * message to avoid it getting lost. Was saved off earlier.
+		 */
+		if (job_submit_user_msg) {
+			char *tmp_err_msg = err_msg;
+			err_msg = job_submit_user_msg;
+			job_submit_user_msg = NULL;
+			if (tmp_err_msg) {
+				xstrfmtcat(err_msg, "\n%s", tmp_err_msg);
+				xfree(tmp_err_msg);
+			}
+		}
+
 		if (err_msg)
 			slurm_send_rc_err_msg(msg, error_code, err_msg);
 		else