diff --git a/builtin-archive.c b/builtin-archive.c
index 6dabdee2019d15d7deadfc094d0c1e5f101d09ca..9177379122ea29152e1213cc533f7cd7c569f8d3 100644
--- a/builtin-archive.c
+++ b/builtin-archive.c
@@ -75,7 +75,7 @@ static int run_remote_archiver(const char *remote, int argc,
 		die("git-archive: expected a flush");
 
 	/* Now, start reading from fd[0] and spit it out to stdout */
-	rv = recv_sideband("archive", fd[0], 1, 2, buf, sizeof(buf));
+	rv = recv_sideband("archive", fd[0], 1, 2);
 	close(fd[0]);
 	rv |= finish_connect(pid);
 
diff --git a/fetch-clone.c b/fetch-clone.c
index b632ca0438b378944b37a7d64fd508ea3f7f470f..76b99afcdb8556fec284a621bbdc76223845877e 100644
--- a/fetch-clone.c
+++ b/fetch-clone.c
@@ -115,12 +115,10 @@ static pid_t setup_sideband(int sideband, const char *me, int fd[2], int xd[2])
 		die("%s: unable to fork off sideband demultiplexer", me);
 	if (!side_pid) {
 		/* subprocess */
-		char buf[LARGE_PACKET_MAX];
-
 		close(fd[0]);
 		if (xd[0] != xd[1])
 			close(xd[1]);
-		if (recv_sideband(me, xd[0], fd[1], 2, buf, sizeof(buf)))
+		if (recv_sideband(me, xd[0], fd[1], 2))
 			exit(1);
 		exit(0);
 	}
diff --git a/sideband.c b/sideband.c
index 1b14ff88924668e6803229d4d2cef981823522fb..277fa3c10d19ee7997ee5b38c5f77a6cd04576f1 100644
--- a/sideband.c
+++ b/sideband.c
@@ -11,10 +11,13 @@
  * stream, aka "verbose").  A message over band #3 is a signal that
  * the remote died unexpectedly.  A flush() concludes the stream.
  */
-int recv_sideband(const char *me, int in_stream, int out, int err, char *buf, int bufsz)
+int recv_sideband(const char *me, int in_stream, int out, int err)
 {
+	char buf[7 + LARGE_PACKET_MAX + 1];
+	strcpy(buf, "remote:");
 	while (1) {
-		int len = packet_read_line(in_stream, buf, bufsz);
+		int band, len;
+		len	= packet_read_line(in_stream, buf+7, LARGE_PACKET_MAX);
 		if (len == 0)
 			break;
 		if (len < 1) {
@@ -22,25 +25,26 @@ int recv_sideband(const char *me, int in_stream, int out, int err, char *buf, in
 			safe_write(err, buf, len);
 			return SIDEBAND_PROTOCOL_ERROR;
 		}
+		band = buf[7] & 0xff;
 		len--;
-		switch (buf[0] & 0xFF) {
+		switch (band) {
 		case 3:
-			safe_write(err, "remote: ", 8);
-			safe_write(err, buf+1, len);
-			safe_write(err, "\n", 1);
+			buf[7] = ' ';
+			buf[8+len] = '\n';
+			safe_write(err, buf, 8+len+1);
 			return SIDEBAND_REMOTE_ERROR;
 		case 2:
-			safe_write(err, "remote: ", 8);
-			safe_write(err, buf+1, len);
+			buf[7] = ' ';
+			safe_write(err, buf, 8+len);
 			continue;
 		case 1:
-			safe_write(out, buf+1, len);
+			safe_write(out, buf+8, len);
 			continue;
 		default:
-			len = sprintf(buf + 1,
+			len = sprintf(buf,
 				      "%s: protocol error: bad band #%d\n",
-				      me, buf[0] & 0xFF);
-			safe_write(err, buf+1, len);
+				      me, band);
+			safe_write(err, buf, len);
 			return SIDEBAND_PROTOCOL_ERROR;
 		}
 	}
diff --git a/sideband.h b/sideband.h
index 4872106fa0881a4ccb6fbaf6343d63bd31effd8c..a84b6917c7a17b5f8a922540801e98d46aa24431 100644
--- a/sideband.h
+++ b/sideband.h
@@ -7,7 +7,7 @@
 #define DEFAULT_PACKET_MAX 1000
 #define LARGE_PACKET_MAX 65520
 
-int recv_sideband(const char *me, int in_stream, int out, int err, char *, int);
+int recv_sideband(const char *me, int in_stream, int out, int err);
 ssize_t send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max);
 
 #endif