diff --git a/io_u.c b/io_u.c
index 6290ebb..586542f 100644
--- a/io_u.c
+++ b/io_u.c
@@ -649,7 +649,7 @@ void io_u_log_error(struct thread_data *td, struct io_u *io_u)
 static void io_completed(struct thread_data *td, struct io_u *io_u,
 			 struct io_completion_data *icd)
 {
-	unsigned long msec;
+	unsigned long usec;
 
 	assert(io_u->flags & IO_U_F_FLIGHT);
 	io_u->flags &= ~IO_U_F_FLIGHT;
@@ -673,11 +673,11 @@ static void io_completed(struct thread_data *td, struct io_u *io_u,
 
 		io_u->file->last_completed_pos = io_u->endpos;
 
-		msec = mtime_since(&io_u->issue_time, &icd->time);
+		usec = utime_since(&io_u->issue_time, &icd->time);
 
-		add_clat_sample(td, idx, msec);
+		add_clat_sample(td, idx, usec);
 		add_bw_sample(td, idx, &icd->time);
-		io_u_mark_latency(td, msec);
+		io_u_mark_latency(td, usec);
 
 		if (td_write(td) && idx == DDIR_WRITE &&
 		    td->o.verify != VERIFY_NONE)
@@ -774,7 +774,7 @@ void io_u_queued(struct thread_data *td, struct io_u *io_u)
 {
 	unsigned long slat_time;
 
-	slat_time = mtime_since(&io_u->start_time, &io_u->issue_time);
+	slat_time = utime_since(&io_u->start_time, &io_u->issue_time);
 	add_slat_sample(td, io_u->ddir, slat_time);
 }
 
diff --git a/stat.c b/stat.c
index 0c2e01b..783b8ba 100644
--- a/stat.c
+++ b/stat.c
@@ -170,12 +170,30 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
 	free(bw_p);
 	free(iops_p);
 
-	if (calc_lat(&ts->slat_stat[ddir], &min, &max, &mean, &dev))
-		log_info("    slat (msec): min=%5lu, max=%5lu, avg=%5.02f, stdev=%5.02f\n", min, max, mean, dev);
-
-	if (calc_lat(&ts->clat_stat[ddir], &min, &max, &mean, &dev))
-		log_info("    clat (msec): min=%5lu, max=%5lu, avg=%5.02f, stdev=%5.02f\n", min, max, mean, dev);
-
+	if (calc_lat(&ts->slat_stat[ddir], &min, &max, &mean, &dev)) {
+		const char *base = "(usec)";
+
+		if (min > 1000 && max > 1000 && mean > 1000.0 && dev > 1000.0) {
+			min /= 1000;
+			max /= 1000;
+			mean /= 1000.0;
+			dev /= 1000.0;
+			base = "(msec)";
+		}
+		log_info("    slat %s: min=%5lu, max=%5lu, avg=%5.02f, stdev=%5.02f\n", base, min, max, mean, dev);
+	}
+	if (calc_lat(&ts->clat_stat[ddir], &min, &max, &mean, &dev)) {
+		const char *base = "(usec)";
+
+		if (min > 1000 && max > 1000 && mean > 1000.0 && dev > 1000.0) {
+                        min /= 1000;
+                        max /= 1000;
+                        mean /= 1000.0;
+                        dev /= 1000.0;
+                        base = "(msec)";
+                }
+		log_info("    clat %s: min=%5lu, max=%5lu, avg=%5.02f, stdev=%5.02f\n", base, min, max, mean, dev);
+	}
 	if (calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev)) {
 		double p_of_agg;
 
@@ -551,25 +569,25 @@ void add_agg_sample(unsigned long val, enum fio_ddir ddir)
 }
 
 void add_clat_sample(struct thread_data *td, enum fio_ddir ddir,
-		     unsigned long msec)
+		     unsigned long usec)
 {
 	struct thread_stat *ts = &td->ts;
 
-	add_stat_sample(&ts->clat_stat[ddir], msec);
+	add_stat_sample(&ts->clat_stat[ddir], usec);
 
 	if (ts->clat_log)
-		add_log_sample(td, ts->clat_log, msec, ddir);
+		add_log_sample(td, ts->clat_log, usec, ddir);
 }
 
 void add_slat_sample(struct thread_data *td, enum fio_ddir ddir,
-		     unsigned long msec)
+		     unsigned long usec)
 {
 	struct thread_stat *ts = &td->ts;
 
-	add_stat_sample(&ts->slat_stat[ddir], msec);
+	add_stat_sample(&ts->slat_stat[ddir], usec);
 
 	if (ts->slat_log)
-		add_log_sample(td, ts->slat_log, msec, ddir);
+		add_log_sample(td, ts->slat_log, usec, ddir);
 }
 
 void add_bw_sample(struct thread_data *td, enum fio_ddir ddir,
