diff --git a/src/irc/core/channel-events.c b/src/irc/core/channel-events.c
index 81a87f26..aa80a0f5 100644
--- a/src/irc/core/channel-events.c
+++ b/src/irc/core/channel-events.c
@@ -156,14 +156,17 @@ static void event_topic_get(IRC_SERVER_REC *server, const char *data)
 }
 
 static void event_topic(IRC_SERVER_REC *server, const char *data,
-			const char *nick)
+			const char *nick, const char *addr)
 {
-	char *params, *channel, *topic;
+	char *params, *channel, *topic, *mask;
 
 	g_return_if_fail(data != NULL);
 
 	params = event_get_params(data, 2, &channel, &topic);
-	channel_change_topic(server, channel, topic, nick, time(NULL));
+	mask = addr == NULL ? g_strdup(nick) :
+		g_strconcat(nick, "!", addr, NULL);
+	channel_change_topic(server, channel, topic, mask, time(NULL));
+	g_free(mask);
 	g_free(params);
 }