diff --git a/src/org/jitsi/impl/neomedia/transform/dtls/DtlsPacketTransformer.java b/src/org/jitsi/impl/neomedia/transform/dtls/DtlsPacketTransformer.java
index 8d1f065684150c8fe14e4ba43b043a4fe2cbedd2..c4fecd447659ebe03fe43e68e9ef7492d55781df 100644
--- a/src/org/jitsi/impl/neomedia/transform/dtls/DtlsPacketTransformer.java
+++ b/src/org/jitsi/impl/neomedia/transform/dtls/DtlsPacketTransformer.java
@@ -227,10 +227,13 @@ private void closeDatagramTransport()
      * to try to establish a DTLS connection.
      *
      * @param i the number of tries remaining after the current one
+     * @param datagramTransport
      * @return <tt>true</tt> to try to establish a DTLS connection; otherwise,
      * <tt>false</tt>
      */
-    private boolean enterRunInConnectThreadLoop(int i)
+    private boolean enterRunInConnectThreadLoop(
+            int i,
+            DatagramTransport datagramTransport)
     {
         if ((i < 0) || (i > CONNECT_TRIES))
         {
@@ -654,7 +657,7 @@ private void runInConnectThread(
 
             for (int i = CONNECT_TRIES - 1; i >= 0; i--)
             {
-                if (!enterRunInConnectThreadLoop(i))
+                if (!enterRunInConnectThreadLoop(i, datagramTransport))
                     break;
                 try
                 {
@@ -694,7 +697,7 @@ else if (dtlsProtocol instanceof DTLSServerProtocol)
 
             for (int i = CONNECT_TRIES - 1; i >= 0; i--)
             {
-                if (!enterRunInConnectThreadLoop(i))
+                if (!enterRunInConnectThreadLoop(i, datagramTransport))
                     break;
                 try
                 {
diff --git a/src/org/jitsi/impl/neomedia/transform/dtls/DtlsTransformEngine.java b/src/org/jitsi/impl/neomedia/transform/dtls/DtlsTransformEngine.java
index 30fada3d789da8eeb12d4930ea3ac0d1656948c4..fa146a377436ab13eec4076379cf48e840c05c19 100644
--- a/src/org/jitsi/impl/neomedia/transform/dtls/DtlsTransformEngine.java
+++ b/src/org/jitsi/impl/neomedia/transform/dtls/DtlsTransformEngine.java
@@ -25,6 +25,13 @@ public class DtlsTransformEngine
      */
     private AbstractRTPConnector connector;
 
+    /**
+     * The indicator which determines whether
+     * {@link SrtpControl.TransformEngine#cleanup()} has been invoked on this
+     * instance to prepare it for garbage collection.
+     */
+    private boolean disposed = false;
+
     /**
      * The <tt>DtlsControl</tt> which has initialized this instance.
      */
@@ -62,8 +69,11 @@ public DtlsTransformEngine(DtlsControlImpl dtlsControl)
     /**
      * {@inheritDoc}
      */
+    @Override
     public void cleanup()
     {
+        disposed = true;
+
         for (int i = 0; i < packetTransformers.length; i++)
         {
             DtlsPacketTransformer packetTransformer = packetTransformers[i];
@@ -123,7 +133,7 @@ private DtlsPacketTransformer getPacketTransformer(int componentID)
         int index = componentID - 1;
         DtlsPacketTransformer packetTransformer = packetTransformers[index];
 
-        if (packetTransformer == null)
+        if ((packetTransformer == null) && !disposed)
         {
             packetTransformer = createPacketTransformer(componentID);
             if (packetTransformer != null)
diff --git a/src/org/jitsi/impl/neomedia/transform/zrtp/ZRTPTransformEngine.java b/src/org/jitsi/impl/neomedia/transform/zrtp/ZRTPTransformEngine.java
index 4991b9252dfe9f8cec2b45851b07e0ea59c28a62..292975f70e2fdb58dabdd0937b6ec1fca218859a 100644
--- a/src/org/jitsi/impl/neomedia/transform/zrtp/ZRTPTransformEngine.java
+++ b/src/org/jitsi/impl/neomedia/transform/zrtp/ZRTPTransformEngine.java
@@ -396,6 +396,16 @@ public void run()
      */
     private long zrtpUnprotect;
 
+    /**
+     * The indicator which determines whether
+     * {@link SrtpControl.TransformEngine#cleanup()} has been invoked on this
+     * instance to prepare it for garbage collection. Disallows
+     * {@link #getRTCPTransformer()} to initialize a new
+     * <tt>ZRTCPTransformer</tt> instance which cannot possibly be correctly
+     * used after the disposal of this instance anyway.
+     */
+    private boolean disposed = false;
+
     /**
      * Construct a ZRTPTransformEngine.
      *
@@ -418,7 +428,7 @@ public ZRTPTransformEngine()
      */
     public ZRTCPTransformer getRTCPTransformer()
     {
-        if(zrtcpTransformer == null)
+        if ((zrtcpTransformer == null) && !disposed)
             zrtcpTransformer = new ZRTCPTransformer();
         return zrtcpTransformer;
     }
@@ -670,8 +680,11 @@ public void stopZrtp()
     /**
      * Cleanup function for any remaining timers
      */
+    @Override
     public void cleanup()
     {
+        disposed = true;
+
         stopZrtp();
 
         if (timeoutProvider != null)