diff --git a/sys/src/cmd/diff/diff.h b/sys/src/cmd/diff/diff.h
index 370dccb20..8aca0439f 100644
--- a/sys/src/cmd/diff/diff.h
+++ b/sys/src/cmd/diff/diff.h
@@ -23,8 +23,8 @@ void *emalloc(unsigned);
 void *erealloc(void *, unsigned);
 void diff(char *, char *, int);
 void diffdir(char *, char *, int);
-void diffreg(char *, char *);
-Biobuf *prepare(int, char *);
+void diffreg(char *, char *, char *, char *);
+Biobuf *prepare(int, char *, char *);
 void panic(int, char *, ...);
 void check(Biobuf *, Biobuf *);
 void change(int, int, int, int);
diff --git a/sys/src/cmd/diff/diffio.c b/sys/src/cmd/diff/diffio.c
index b5b4964c1..f9608d8d5 100644
--- a/sys/src/cmd/diff/diffio.c
+++ b/sys/src/cmd/diff/diffio.c
@@ -104,7 +104,7 @@ readhash(Biobuf *bp, char *buf)
 }
 
 Biobuf *
-prepare(int i, char *arg)
+prepare(int i, char *arg, char *orig)
 {
 	Line *p;
 	int j, h;
@@ -143,11 +143,10 @@ prepare(int i, char *arg)
 	file[i] = p;
 	input[i] = bp;			/*fix*/
 	if (i == 0) {			/*fix*/
-		file1 = arg;
+		file1 = orig;
 		firstchange = 0;
-	}
-	else
-		file2 = arg;
+	} else
+		file2 = orig;
 	return bp;
 }
 
diff --git a/sys/src/cmd/diff/diffreg.c b/sys/src/cmd/diff/diffreg.c
index 1b8f4e5be..4d90c40ca 100644
--- a/sys/src/cmd/diff/diffreg.c
+++ b/sys/src/cmd/diff/diffreg.c
@@ -363,16 +363,16 @@ cmp(Biobuf* b1, Biobuf* b2)
 }
 
 void
-diffreg(char *f, char *t)
+diffreg(char *f, char *fo, char *t, char *to)
 {
 	Biobuf *b0, *b1;
 	int k;
 
 	binary = 0;
-	b0 = prepare(0, f);
+	b0 = prepare(0, f, fo);
 	if (!b0)
 		return;
-	b1 = prepare(1, t);
+	b1 = prepare(1, t, to);
 	if (!b1) {
 		Bterm(b0);
 		return;
diff --git a/sys/src/cmd/diff/main.c b/sys/src/cmd/diff/main.c
index d91c85561..385537207 100644
--- a/sys/src/cmd/diff/main.c
+++ b/sys/src/cmd/diff/main.c
@@ -149,7 +149,7 @@ diff(char *f, char *t, int level)
 			Bprint(&stdout, "Common subdirectories: %s and %s\n", fp, tp);
 	}
 	else if (REGULAR_FILE(fsb) && REGULAR_FILE(tsb))
-		diffreg(fp, tp);
+		diffreg(fp, f, tp, t);
 	else {
 		if (REGULAR_FILE(fsb)) {
 			if ((p = utfrrune(f, '/')) == 0)
@@ -157,14 +157,14 @@ diff(char *f, char *t, int level)
 			else
 				p++;
 			if (mkpathname(tb, tp, p) == 0)
-				diffreg(fp, tb);
+				diffreg(fp, f, tb, t);
 		} else {
 			if ((p = utfrrune(t, '/')) == 0)
 				p = t;
 			else
 				p++;
 			if (mkpathname(fb, fp, p) == 0)
-				diffreg(fb, tp);
+				diffreg(fb, f, tp, t);
 		}
 	}
 	free(fsb);