diff --git a/opal/mca/pmix/s1/pmix_s1.c b/opal/mca/pmix/s1/pmix_s1.c
index 83d87bc..3e78b2f 100644
--- a/opal/mca/pmix/s1/pmix_s1.c
+++ b/opal/mca/pmix/s1/pmix_s1.c
@@ -203,6 +203,15 @@ static int s1_init(void)
         ui32 = strtoul(str, NULL, 10);
         s1_pname.jobid |= (ui32 & 0x0000ffff);
     }
+    /* if we are in a "young" SLURM system, then the domain
+     * ID will be a very low number. This can result in zero
+     * for the job family, causing some subsystems a problem.
+     * So ensure that the job_family is -always- non-zero,
+     * but also non-negative! */
+    if (0 == (s1_pname.jobid & 0xffff0000) ||
+        0 != (s1_pname.jobid & 0x80000000)) {
+        s1_pname.jobid |= 0x01110000;
+    }
     ldr.jobid = s1_pname.jobid;
     s1_pname.vpid = rank;
     /* store our name in the opal_proc_t so that
diff --git a/opal/mca/pmix/s2/pmix_s2.c b/opal/mca/pmix/s2/pmix_s2.c
index 69f510e..2da2a1f 100644
--- a/opal/mca/pmix/s2/pmix_s2.c
+++ b/opal/mca/pmix/s2/pmix_s2.c
@@ -212,6 +212,15 @@ static int s2_init(void)
         stepid = strtoul(str, NULL, 10);
         s2_pname.jobid |= (stepid & 0x0000ffff);
     }
+    /* if we are in a "young" SLURM system, then the domain
+     * ID will be a very low number. This can result in zero
+     * for the job family, causing some subsystems a problem.
+     * So ensure that the job_family is -always- non-zero,
+     * but also non-negative! */
+    if (0 == (s1_pname.jobid & 0xffff0000) ||
+        0 != (s1_pname.jobid & 0x80000000)) {
+        s1_pname.jobid |= 0x01110000;
+    }
     s2_pname.vpid = s2_rank;
     opal_proc_set_name(&s2_pname);
     opal_output_verbose(2, opal_pmix_base_framework.framework_output,
