diff --git a/src/srun/io.c b/src/srun/io.c
index 8001c4d4b7cf6c5690a9963afd13df004eba6e81..de7788834a1acd3231466f014b609f65e5d84fec 100644
--- a/src/srun/io.c
+++ b/src/srun/io.c
@@ -352,9 +352,29 @@ void report_task_status(job_t *job)
 	}
 }
 
-static char *   _taskid2hostname(int task_id, job_t * job)
+static char *   _taskid2hostname (int task_id, job_t * job)
 {
-	return "TBD";
+	int i, j, id = 0;
+
+	if (opt.distribution == SRUN_DIST_BLOCK) {
+		for (i=0; ((i<job->nhosts) && (id<opt.nprocs)); i++) {
+			id += job->ntask[i];
+			if (task_id < id)
+				return job->host[i];
+		}
+
+	} else {	/* cyclic */
+		for (j=0; (id<opt.nprocs); j++) {	/* cycle counter */
+			for (i=0; ((i<job->nhosts) && (id<opt.nprocs)); i++) {
+				if (j >= job->cpus[i])
+					continue;
+				if (task_id == (id++))
+					return job->host[i];
+			}
+		}
+	}
+
+	return "Unknown";
 }
 
 static char *_task_state_name(task_state_t state_inx)