diff --git a/mRemoteNGTests/Config/Serializers/ConfConsEnsureConnectionsHaveIdsTests.cs b/mRemoteNGTests/Config/Serializers/ConfConsEnsureConnectionsHaveIdsTests.cs
new file mode 100644
index 000000000..cc6c0f903
--- /dev/null
+++ b/mRemoteNGTests/Config/Serializers/ConfConsEnsureConnectionsHaveIdsTests.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Xml.Linq;
+using mRemoteNG.Config.Serializers;
+using NUnit.Framework;
+
+
+namespace mRemoteNGTests.Config.Serializers
+{
+ public class ConfConsEnsureConnectionsHaveIdsTests
+ {
+ private ConfConsEnsureConnectionsHaveIds _consEnsureConnectionsHaveIds;
+
+ [SetUp]
+ public void Setup()
+ {
+ _consEnsureConnectionsHaveIds = new ConfConsEnsureConnectionsHaveIds();
+ }
+
+ [Test]
+ public void IdAttributeIsAddedIfItDidntExist()
+ {
+ var xdoc = CreateTestDocument();
+ _consEnsureConnectionsHaveIds.EnsureElementsHaveIds(xdoc);
+ var attribute = xdoc.Root?.Element("Node")?.Attribute("Id");
+ Assert.That(attribute, Is.Not.Null);
+ }
+
+ [Test]
+ public void NewIdAttributeShouldNotBeAnEmptyGuid()
+ {
+ var xdoc = CreateTestDocument();
+ _consEnsureConnectionsHaveIds.EnsureElementsHaveIds(xdoc);
+ var attribute = xdoc.Root?.Element("Node")?.Attribute("Id");
+ Assert.That(attribute?.Value, Is.Not.EqualTo(Guid.Empty.ToString()));
+ }
+
+ private XDocument CreateTestDocument()
+ {
+ var xdoc = new XDocument();
+ xdoc.Add(new XElement("Root",
+ new XElement("Node",
+ new XAttribute("Thingy",""))));
+ return xdoc;
+ }
+ }
+}
diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj
index 96673c9d7..8c5bc2b02 100644
--- a/mRemoteNGTests/mRemoteNGTests.csproj
+++ b/mRemoteNGTests/mRemoteNGTests.csproj
@@ -112,6 +112,7 @@
+
diff --git a/mRemoteV1/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs b/mRemoteV1/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs
new file mode 100644
index 000000000..085d948ab
--- /dev/null
+++ b/mRemoteV1/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Xml.Linq;
+
+
+namespace mRemoteNG.Config.Serializers
+{
+ public class ConfConsEnsureConnectionsHaveIds
+ {
+ public void EnsureElementsHaveIds(XDocument xdoc)
+ {
+ foreach (var element in xdoc.Descendants("Node"))
+ {
+ if (element.Attribute("Id") != null) continue;
+ var id = Guid.NewGuid();
+ element.Add(new XAttribute("Id", id));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj
index f08f32e73..aecb83070 100644
--- a/mRemoteV1/mRemoteV1.csproj
+++ b/mRemoteV1/mRemoteV1.csproj
@@ -168,6 +168,7 @@
+