diff --git a/muted.c b/muted.c
index 135a4164bbb8acef6808524e9a3c2c728e60fcab..73eb649a61eb24b6608edde5132d4518f791ef9f 100755
--- a/muted.c
+++ b/muted.c
@@ -428,6 +428,8 @@ static void append_sub(struct channel *chan, char *name)
 static void hangup_chan(char *channel)
 {
 	struct channel *chan;
+	if (debug)
+		printf("Hangup '%s'\n", channel);
 	chan = find_channel(channel);
 	if (chan)
 		delete_sub(chan, channel);
@@ -437,6 +439,8 @@ static void hangup_chan(char *channel)
 static void offhook_chan(char *channel)
 {
 	struct channel *chan;
+	if (debug)
+		printf("Offhook '%s'\n", channel);
 	chan = find_channel(channel);
 	if (chan)
 		append_sub(chan, channel);
@@ -446,8 +450,10 @@ static void offhook_chan(char *channel)
 static int wait_event(void)
 {
 	char *resp;
-	char event[80]="";
-	char channel[80]="";
+	char event[120]="";
+	char channel[120]="";
+	char oldname[120]="";
+	char newname[120]="";
 	resp = get_line();
 	if (!resp) {
 		fprintf(stderr, "disconnected (6)\n");
@@ -459,6 +465,10 @@ static int wait_event(void)
 		while((resp = get_line()) && strlen(resp)) {
 			if (!strncasecmp(resp, "Channel: ", strlen("Channel: ")))
 				strncpy(channel, resp + strlen("Channel: "), sizeof(channel));
+			if (!strncasecmp(resp, "Newname: ", strlen("Newname: ")))
+				strncpy(newname, resp + strlen("Newname: "), sizeof(newname));
+			if (!strncasecmp(resp, "Oldname: ", strlen("Oldname: ")))
+				strncpy(oldname, resp + strlen("Oldname: "), sizeof(oldname));
 		}
 		if (strlen(channel)) {
 			if (!strcasecmp(event, "Hangup")) 
@@ -466,6 +476,12 @@ static int wait_event(void)
 			else
 				offhook_chan(channel);
 		}
+		if (strlen(newname) && strlen(oldname)) {
+			if (!strcasecmp(event, "Rename")) {
+				hangup_chan(oldname);
+				offhook_chan(newname);
+			}
+		}
 	} else {
 		/* Consume the rest of the non-event */
 		while((resp = get_line()) && strlen(resp));