diff --git a/src/providers/irc/Irc2.cpp b/src/providers/irc/Irc2.cpp
index d2857b433..a0f9378ab 100644
--- a/src/providers/irc/Irc2.cpp
+++ b/src/providers/irc/Irc2.cpp
@@ -158,14 +158,15 @@ Irc &Irc::getInstance()
 
 int Irc::uniqueId()
 {
-    /// XXX: also check for channels
     int i = this->currentId_ + 1;
     auto it = this->servers_.find(i);
+    auto it2 = this->abandonedChannels_.find(i);
 
-    while (it != this->servers_.end())
+    while (it != this->servers_.end() || it2 != this->abandonedChannels_.end())
     {
         i++;
         it = this->servers_.find(i);
+        it2 = this->abandonedChannels_.find(i);
     }
 
     return (this->currentId_ = i);
diff --git a/src/singletons/WindowManager.cpp b/src/singletons/WindowManager.cpp
index bef99f77b..4adb08e74 100644
--- a/src/singletons/WindowManager.cpp
+++ b/src/singletons/WindowManager.cpp
@@ -4,6 +4,9 @@
 #include "debug/AssertInGuiThread.hpp"
 #include "debug/Log.hpp"
 #include "messages/MessageElement.hpp"
+#include "providers/irc/Irc2.hpp"
+#include "providers/irc/IrcChannel2.hpp"
+#include "providers/irc/IrcServer.hpp"
 #include "providers/twitch/TwitchServer.hpp"
 #include "singletons/Fonts.hpp"
 #include "singletons/Paths.hpp"
@@ -612,6 +615,17 @@ void WindowManager::encodeChannel(IndirectChannel channel, QJsonObject &obj)
             obj.insert("type", "whispers");
         }
         break;
+        case Channel::Type::Irc:
+        {
+            if (auto ircChannel =
+                    dynamic_cast<IrcChannel *>(channel.get().get()))
+            {
+                obj.insert("type", "irc");
+                obj.insert("server", ircChannel->server()->id());
+                obj.insert("channel", ircChannel->getName());
+            }
+        }
+        break;
     }
 }
 
@@ -639,6 +653,11 @@ IndirectChannel WindowManager::decodeChannel(const QJsonObject &obj)
     {
         return app->twitch.server->whispersChannel;
     }
+    else if (type == "irc")
+    {
+        return Irc::getInstance().getOrAddChannel(
+            obj.value("server").toInt(-1), obj.value("channel").toString());
+    }
 
     return Channel::getEmpty();
 }