+based-on: a01e3b490eb36ccf9e704840e1b6683dab867550
+diff --git a/compat.c b/compat.c
+--- a/compat.c
++++ b/compat.c
+@@ -41,6 +41,7 @@ extern int checksum_seed;
+ extern int basis_dir_cnt;
+ extern int prune_empty_dirs;
+ extern int protocol_version;
++extern int detect_renamed;
+ extern int protect_args;
+ extern int preserve_uid;
+ extern int preserve_gid;
+@@ -121,6 +122,7 @@ void set_allow_inc_recurse(void)
+ allow_inc_recurse = 0;
+ else if (!am_sender
+ && (delete_before || delete_after
++ || detect_renamed
+ || delay_updates || prune_empty_dirs))
+ allow_inc_recurse = 0;
+ else if (am_server && !local_server
+diff --git a/delete.c b/delete.c
+--- a/delete.c
++++ b/delete.c
+@@ -25,6 +25,7 @@
+ extern int am_root;
+ extern int make_backups;
+ extern int max_delete;
++extern int detect_renamed;
+ extern char *backup_dir;
+ extern char *backup_suffix;
+ extern int backup_suffix_len;
+@@ -45,6 +46,8 @@ static inline int is_backup_file(char *fn)
+ * its contents, otherwise just checks for content. Returns DR_SUCCESS or
+ * DR_NOT_EMPTY. Note that fname must point to a MAXPATHLEN buffer! (The
+ * buffer is used for recursion, but returned unchanged.)
++ *
++ * Note: --detect-rename may use this routine with DEL_NO_DELETIONS set!
+ */
+ static enum delret delete_dir_contents(char *fname, uint16 flags)
+ {
+@@ -64,7 +67,9 @@ static enum delret delete_dir_contents(char *fname, uint16 flags)
+ save_filters = push_local_filters(fname, dlen);
+
+ non_perishable_cnt = 0;
++ file_extra_cnt += SUM_EXTRA_CNT;
+ dirlist = get_dirlist(fname, dlen, 0);
++ file_extra_cnt -= SUM_EXTRA_CNT;
+ ret = non_perishable_cnt ? DR_NOT_EMPTY : DR_SUCCESS;
+
+ if (!dirlist->used)
+@@ -104,7 +109,8 @@ static enum delret delete_dir_contents(char *fname, uint16 flags)
+ if (S_ISDIR(fp->mode)) {
+ if (delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS)
+ ret = DR_NOT_EMPTY;
+- }
++ } else if (detect_renamed && S_ISREG(fp->mode))
++ look_for_rename(fp, fname);
+ if (delete_item(fname, fp->mode, flags) != DR_SUCCESS)
+ ret = DR_NOT_EMPTY;
+ }
+@@ -127,6 +133,8 @@ static enum delret delete_dir_contents(char *fname, uint16 flags)
+ *
+ * Note that fbuf must point to a MAXPATHLEN buffer if the mode indicates it's
+ * a directory! (The buffer is used for recursion, but returned unchanged.)
++ *
++ * Also note: --detect-rename may use this routine with DEL_NO_DELETIONS set!
+ */
+ enum delret delete_item(char *fbuf, uint16 mode, uint16 flags)
+ {
+diff --git a/flist.c b/flist.c
+--- a/flist.c
++++ b/flist.c
+@@ -63,6 +63,7 @@ extern int non_perishable_cnt;