diff --git a/src/common/stepd_api.c b/src/common/stepd_api.c
index 19db6469592248575b6262278a0be6aa7f7247a5..9bef125a4a27ed8d9fdb11c6773c6aa3197058bd 100644
--- a/src/common/stepd_api.c
+++ b/src/common/stepd_api.c
@@ -292,18 +292,28 @@ stepd_get_info(int fd)
 
 	info = xmalloc(sizeof(slurmstepd_info_t));
 	safe_write(fd, &req, sizeof(int));
-	safe_read(fd, &protocol_version, sizeof(uint16_t));
+
 	safe_read(fd, &info->uid, sizeof(uid_t));
 	safe_read(fd, &info->jobid, sizeof(uint32_t));
 	safe_read(fd, &info->stepid, sizeof(uint32_t));
-	safe_read(fd, &info->nodeid, sizeof(uint32_t));
-	safe_read(fd, &info->job_mem_limit, sizeof(uint32_t));
-	if (protocol_version >= SLURM_2_2_PROTOCOL_VERSION)
+
+	safe_read(fd, &protocol_version, sizeof(uint16_t));
+	if (protocol_version >= SLURM_2_2_PROTOCOL_VERSION) {
+		safe_read(fd, &info->nodeid, sizeof(uint32_t));
+		safe_read(fd, &info->job_mem_limit, sizeof(uint32_t));
 		safe_read(fd, &info->step_mem_limit, sizeof(uint32_t));
-	else
+	} else {
+		info->nodeid  = protocol_version << 16;
+		safe_read(fd, &protocol_version, sizeof(uint16_t));
+		info->nodeid |= protocol_version;
+		safe_read(fd, &info->job_mem_limit, sizeof(uint32_t));
 		info->step_mem_limit = info->job_mem_limit;
-
+		verbose("Old version slurmstepd for step %u.%u", 
+			info->jobid, info->stepid);
+		verbose("modeid = %u mem limit = %u", info->nodeid, info->job_mem_limit);
+	}
 	return info;
+
 rwfail:
 	xfree(info);
 	return NULL;
diff --git a/src/slurmd/slurmstepd/req.c b/src/slurmd/slurmstepd/req.c
index e36e257c31c5ec3206707a1790077bd5d42e3b4d..6a82076164cce50a3fcaa0933316239de811ba8c 100644
--- a/src/slurmd/slurmstepd/req.c
+++ b/src/slurmd/slurmstepd/req.c
@@ -556,10 +556,16 @@ _handle_info(int fd, slurmd_job_t *job)
 {
 	uint16_t protocol_version = SLURM_PROTOCOL_VERSION;
 
-	safe_write(fd, &protocol_version, sizeof(uint16_t));
 	safe_write(fd, &job->uid, sizeof(uid_t));
 	safe_write(fd, &job->jobid, sizeof(uint32_t));
 	safe_write(fd, &job->stepid, sizeof(uint32_t));
+
+	/* protocol_version was added in SLURM version 2.2, 
+	 * so it needed to be added later in the data sent
+	 * for backward compatability (so that it doesn't 
+	 * get confused for a huge UID, job ID or step ID;
+	 * we should be save in avoiding huge node IDs). */
+	safe_write(fd, &protocol_version, sizeof(uint16_t));
 	safe_write(fd, &job->nodeid, sizeof(uint32_t));
 	safe_write(fd, &job->job_mem, sizeof(uint32_t));
 	safe_write(fd, &job->step_mem, sizeof(uint32_t));