diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java
index 64eb2ca..4efc055 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java
@@ -130,10 +130,7 @@
             PrivateKeyInfoClassResult = Class.forName("org.bouncycastle.asn1.pkcs.PrivateKeyInfo");
             getPrivateKeyMethodResult = jcaPEMKeyConverterClass.getMethod("getPrivateKey", PrivateKeyInfoClassResult);
 
-            // Try loading BC as a provider
-            Class<?> klass = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
-            Provider provider = (Provider) klass.getConstructor().newInstance();
-            Security.addProvider(provider);
+            registerBouncyCastleProvider();
         }
         catch (Exception e)
         {
@@ -155,6 +152,23 @@
         }
     }
 
+    static void registerBouncyCastleProvider()
+            throws ClassNotFoundException, InstantiationException, IllegalAccessException,
+                   InvocationTargetException, NoSuchMethodException
+    {
+        // Try loading BC as a provider
+        Class<?> klass = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
+
+        Provider bouncyCastleProvider = (Provider) klass.getConstructor().newInstance();
+        synchronized (Security.class)
+        {
+            if(Security.getProvider(bouncyCastleProvider.getName()) == null)
+            {
+                Security.addProvider(bouncyCastleProvider);
+            }
+        }
+    }
+
     SslEngineFacadeFactory()
     {
     }
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java
index 84ba8cb..e43988e 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.qpid.proton.engine.impl.ssl;
 
+import static junit.framework.TestCase.fail;
 import static org.junit.Assert.assertNotNull;
 
 import java.net.URL;
@@ -29,6 +30,21 @@
     private static final String PASSWORD = "unittest";
 
     @Test
+    public void testDuplicateRegistrationOfSecurityProvider() {
+        // ensure the provider is already registered
+        SslEngineFacadeFactory factory = new SslEngineFacadeFactory();
+
+        try
+        {
+            SslEngineFacadeFactory.registerBouncyCastleProvider();
+        }
+        catch (Exception e)
+        {
+            fail("Exception thrown when re-registering BouncyCastle provider " + e.getMessage());
+        }
+    }
+    
+    @Test
     public void testCertifcateLoad() {
         String ipFile = resolveFilename("cert.pem.txt");
         SslEngineFacadeFactory factory = new SslEngineFacadeFactory();
