diff --git a/lib/liblzma/config.h b/lib/liblzma/config.h
index 2a0087bd70e1..29b7fdb8d71f 100644
--- a/lib/liblzma/config.h
+++ b/lib/liblzma/config.h
@@ -26,6 +26,7 @@
 #define HAVE_ENCODER_SPARC 1
 #define HAVE_ENCODER_X86 1
 #define HAVE_FCNTL_H 1
+#define HAVE_FUTIMENS 1
 #define HAVE_FUTIMES 1
 #define HAVE_GETOPT_H 1
 #define HAVE_GETOPT_LONG 1
diff --git a/usr.bin/compress/compress.c b/usr.bin/compress/compress.c
index 1f458e59e88f..2d2efb3a7bfc 100644
--- a/usr.bin/compress/compress.c
+++ b/usr.bin/compress/compress.c
@@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$");
 
 #include <err.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -360,14 +361,14 @@ err:	if (ofp) {
 static void
 setfile(const char *name, struct stat *fs)
 {
-	static struct timeval tv[2];
+	static struct timespec tspec[2];
 
 	fs->st_mode &= S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO;
 
-	TIMESPEC_TO_TIMEVAL(&tv[0], &fs->st_atim);
-	TIMESPEC_TO_TIMEVAL(&tv[1], &fs->st_mtim);
-	if (utimes(name, tv))
-		cwarn("utimes: %s", name);
+	tspec[0] = fs->st_atim;
+	tspec[1] = fs->st_mtim;
+	if (utimensat(AT_FDCWD, name, tspec, 0))
+		cwarn("utimensat: %s", name);
 
 	/*
 	 * Changing the ownership probably won't succeed, unless we're root
diff --git a/usr.bin/gzip/gzip.c b/usr.bin/gzip/gzip.c
index 9f92b6af8108..f197f186c95c 100644
--- a/usr.bin/gzip/gzip.c
+++ b/usr.bin/gzip/gzip.c
@@ -1070,7 +1070,7 @@ out2:
 static void
 copymodes(int fd, const struct stat *sbp, const char *file)
 {
-	struct timeval times[2];
+	struct timespec times[2];
 	struct stat sb;
 
 	/*
@@ -1098,10 +1098,10 @@ copymodes(int fd, const struct stat *sbp, const char *file)
 	if (fchmod(fd, sb.st_mode) < 0)
 		maybe_warn("couldn't fchmod: %s", file);
 
-	TIMESPEC_TO_TIMEVAL(&times[0], &sb.st_atim);
-	TIMESPEC_TO_TIMEVAL(&times[1], &sb.st_mtim);
-	if (futimes(fd, times) < 0)
-		maybe_warn("couldn't utimes: %s", file);
+	times[0] = sb.st_atim;
+	times[1] = sb.st_mtim;
+	if (futimens(fd, times) < 0)
+		maybe_warn("couldn't futimens: %s", file);
 
 	/* only try flags if they exist already */
         if (sb.st_flags != 0 && fchflags(fd, sb.st_flags) < 0)