-+ if (preserve_atimes)
-+ set_file_attrs(fname, file, stp, 0);
- if (preserve_hard_links && file->link_u.links) {
- if (dry_run)
- file->link_u.links->link_dest_used = j + 1;
---- old/log.c
-+++ new/log.c
-@@ -37,6 +37,7 @@ extern int msg_fd_out;
- extern int allow_8bit_chars;
- extern int protocol_version;
- extern int preserve_times;
-+extern int preserve_atimes;
- extern int stdout_format_has_i;
- extern int stdout_format_has_o_or_i;
- extern int logfile_format_has_i;
-@@ -606,7 +607,8 @@ static void log_formatted(enum logcode c
- n[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p';
- n[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o';
- n[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g';
-- n[8] = '.';
-+ n[8] = !(iflags & ITEM_REPORT_ATIME) ? '.'
-+ : S_ISLNK(file->mode) ? 'U' : 'u';
- n[9] = '\0';
++ if (atimes_ndx)
++ set_file_attrs(fname, file, sxp, NULL, 0);
+ if (preserve_hard_links && F_IS_HLINKED(file))
+ finish_hard_link(file, fname, ndx, &sxp->st, itemizing, code, j);
+ if (!maybe_ATTRS_REPORT && (verbose > 1 || stdout_format_has_i > 1)) {
+@@ -1200,6 +1206,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
+ static void list_file_entry(struct file_struct *f)
+ {
+ char permbuf[PERMSTRING_SIZE];
++ time_t atime = atimes_ndx ? f_atime(f) : 0;
+ double len;
+
+ if (!F_IS_ACTIVE(f)) {
+@@ -1214,14 +1221,16 @@ static void list_file_entry(struct file_struct *f)
+
+ #ifdef SUPPORT_LINKS
+ if (preserve_links && S_ISLNK(f->mode)) {
+- rprintf(FINFO, "%s %11.0f %s %s -> %s\n",
++ rprintf(FINFO, "%s %11.0f %s %s %s -> %s\n",
+ permbuf, len, timestring(f->modtime),
++ atimes_ndx ? timestring(atime) : "",
+ f_name(f, NULL), F_SYMLINK(f));
+ } else
+ #endif
+ {
+- rprintf(FINFO, "%s %11.0f %s %s\n",
++ rprintf(FINFO, "%s %11.0f %s %s %s\n",
+ permbuf, len, timestring(f->modtime),
++ atimes_ndx ? timestring(atime) : "",
+ f_name(f, NULL));
+ }
+ }
+@@ -2056,7 +2065,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+ STRUCT_STAT st;
+ if (link_stat(fname, &st, 0) == 0
+ && cmp_time(st.st_mtime, file->modtime) != 0)
+- set_modtime(fname, file->modtime, file->mode);
++ set_times(fname, file->modtime, file->modtime, file->mode);
+ }
+ if (counter >= loopchk_limit) {
+ if (allowed_lull)
+diff --git a/ifuncs.h b/ifuncs.h
+--- a/ifuncs.h
++++ b/ifuncs.h
+@@ -67,6 +67,28 @@ d_name(struct dirent *di)
+ #endif
+ }