diff --git a/src/NMS.AMQP/NmsConnection.cs b/src/NMS.AMQP/NmsConnection.cs
index 6ce0903..0d637e5 100644
--- a/src/NMS.AMQP/NmsConnection.cs
+++ b/src/NMS.AMQP/NmsConnection.cs
@@ -416,24 +416,28 @@
 
             lock (syncRoot)
             {
-                if (!closed && connected.CompareAndSet(false, true))
+                if (closed || connected)
+                {
+                    return;
+                }
+                
+                try
+                {
+                    provider.Connect(ConnectionInfo).ConfigureAwait(false).GetAwaiter().GetResult();
+                    connected.Set(true);
+                }
+                catch (Exception e)
                 {
                     try
                     {
-                        provider.Connect(ConnectionInfo).ConfigureAwait(false).GetAwaiter().GetResult();
+                        provider.Close();
                     }
-                    catch (Exception e)
+                    catch
                     {
-                        try
-                        {
-                            provider.Close();
-                        }
-                        catch
-                        {
-                        }
-
-                        throw NMSExceptionSupport.Create(e);
+                        // ignored
                     }
+
+                    throw NMSExceptionSupport.Create(e);
                 }
             }
         }
diff --git a/test/Apache-NMS-AMQP-Interop-Test/NmsSessionTest.cs b/test/Apache-NMS-AMQP-Interop-Test/NmsSessionTest.cs
new file mode 100644
index 0000000..849f684
--- /dev/null
+++ b/test/Apache-NMS-AMQP-Interop-Test/NmsSessionTest.cs
@@ -0,0 +1,22 @@
+using System.Threading.Tasks;
+using Apache.NMS;
+using NUnit.Framework;
+
+namespace NMS.AMQP.Test
+{
+    public class NmsSessionTest : AmqpTestSupport
+    {
+        [Test, Timeout(10_000)]
+        public void TestCreateMultipleSessionsFromDifferentThreadsWhenConnectionNotStarted()
+        {
+            Connection = CreateAmqpConnection();
+            Assert.NotNull(Connection);
+
+            Parallel.For(0, 10, i =>
+            {
+                ISession session = Connection.CreateSession();
+                Assert.NotNull(session);
+            });
+        }
+    }
+}
\ No newline at end of file
