diff --git a/internal/bot/bot.go b/internal/bot/bot.go
index 02c12db..6c291b1 100644
--- a/internal/bot/bot.go
+++ b/internal/bot/bot.go
@@ -53,6 +53,8 @@ func (bot *Bot) Connect(server string, ssl bool, maxRetries int) (err error) {
 	}
 	bot.ctx, bot.ctxCancel = context.WithCancel(bot.client.Context())
 
+	bot.channels = make(map[string]*Channel)
+
 	retries := 0
 	for maxRetries == 0 || retries < maxRetries {
 		err = bot.client.Connect(server, ssl)
diff --git a/internal/bot/channel.go b/internal/bot/channel.go
index 6d067e7..887f537 100644
--- a/internal/bot/channel.go
+++ b/internal/bot/channel.go
@@ -29,7 +29,7 @@ type Channel struct {
 }
 
 func newChannel(parent *Bot, name string, client *irc.Client) *Channel {
-	ctx, cancel := context.WithCancel(context.Background())
+	ctx, cancel := context.WithCancel(parent.ctx)
 
 	return &Channel{
 		name:      name,
@@ -266,7 +266,7 @@ func (channel *Channel) loop() {
 				channel.lastPostSessionID = ""
 			}
 
-		case <-channel.parentCtx.Done():
+		case <-channel.ctx.Done():
 			{
 				// Time to pack up shop.
 				return