diff --git a/google3/third_party/libsrtp/include/srtp_priv.h b/google3/third_party/libsrtp/include/srtp_priv.h
index cf2274e..3bed757 100644
--- a/google3/third_party/libsrtp/include/srtp_priv.h
+++ b/google3/third_party/libsrtp/include/srtp_priv.h
@@ -189,6 +189,13 @@ srtp_stream_init(srtp_stream_t srtp,
 
 
 /*
+ * Uninitializes and Deallocates a stream.
+ */
+err_status_t
+srtp_stream_uninit_and_dealloc(srtp_stream_t stream,
+                               srtp_stream_t stream_template);
+
+/*
  * libsrtp internal datatypes 
  */
 
diff --git a/google3/third_party/libsrtp/srtp/srtp.c b/google3/third_party/libsrtp/srtp/srtp.c
index 3fc52ee..314c3e4 100644
--- a/google3/third_party/libsrtp/srtp/srtp.c
+++ b/google3/third_party/libsrtp/srtp/srtp.c
@@ -92,35 +92,31 @@ srtp_stream_alloc(srtp_stream_ctx_t **str_ptr,
   str = (srtp_stream_ctx_t *) crypto_alloc(sizeof(srtp_stream_ctx_t));
   if (str == NULL)
     return err_status_alloc_fail;
-  *str_ptr = str;  
-  
+  *str_ptr = str;
+
   /* allocate cipher */
   stat = crypto_kernel_alloc_cipher(p->rtp.cipher_type, 
 				    &str->rtp_cipher, 
 				    p->rtp.cipher_key_len); 
   if (stat) {
-    crypto_free(str);
-    return stat;
+    goto err_rtp_cipher_alloc;
   }
 
   /* allocate auth function */
   stat = crypto_kernel_alloc_auth(p->rtp.auth_type, 
 				  &str->rtp_auth,
 				  p->rtp.auth_key_len, 
-				  p->rtp.auth_tag_len); 
+				  p->rtp.auth_tag_len);
+
   if (stat) {
-    cipher_dealloc(str->rtp_cipher);
-    crypto_free(str);
-    return stat;
+    goto err_rtp_auth_alloc;
   }
-  
+
   /* allocate key limit structure */
   str->limit = (key_limit_ctx_t*) crypto_alloc(sizeof(key_limit_ctx_t));
   if (str->limit == NULL) {
-    auth_dealloc(str->rtp_auth);
-    cipher_dealloc(str->rtp_cipher);
-    crypto_free(str); 
-    return err_status_alloc_fail;
+    stat = err_status_alloc_fail;
+    goto err_limit_alloc;
   }
 
   /*
@@ -129,13 +125,9 @@ srtp_stream_alloc(srtp_stream_ctx_t **str_ptr,
    */
   stat = crypto_kernel_alloc_cipher(p->rtcp.cipher_type, 
 				    &str->rtcp_cipher, 
-				    p->rtcp.cipher_key_len); 
+				    p->rtcp.cipher_key_len);
   if (stat) {
-    auth_dealloc(str->rtp_auth);
-    cipher_dealloc(str->rtp_cipher);
-    crypto_free(str->limit);
-    crypto_free(str);
-    return stat;
+    goto err_rtcp_cipher_alloc;
   }
 
   /* allocate auth function */
@@ -144,33 +136,37 @@ srtp_stream_alloc(srtp_stream_ctx_t **str_ptr,
 				  p->rtcp.auth_key_len, 
 				  p->rtcp.auth_tag_len); 
   if (stat) {
-    cipher_dealloc(str->rtcp_cipher);
-    auth_dealloc(str->rtp_auth);
-    cipher_dealloc(str->rtp_cipher);
-    crypto_free(str->limit);
-    crypto_free(str);
-   return stat;
-  }  
+    goto err_rtcp_auth_alloc;
+  }
 
   /* allocate ekt data associated with stream */
   stat = ekt_alloc(&str->ekt, p->ekt);
   if (stat) {
-    auth_dealloc(str->rtcp_auth);
-    cipher_dealloc(str->rtcp_cipher);
-    auth_dealloc(str->rtp_auth);
-    cipher_dealloc(str->rtp_cipher);
-    crypto_free(str->limit);
-    crypto_free(str);
-   return stat;    
+    goto err_ekt_alloc;
   }
 
   return err_status_ok;
+
+err_ekt_alloc:
+  auth_dealloc(str->rtcp_auth);
+err_rtcp_auth_alloc:
+  cipher_dealloc(str->rtcp_cipher);
+err_rtcp_cipher_alloc:
+  crypto_free(str->limit);
+err_limit_alloc:
+  auth_dealloc(str->rtp_auth);
+err_rtp_auth_alloc:
+  cipher_dealloc(str->rtp_cipher);
+err_rtp_cipher_alloc:
+  crypto_free(str);
+  return stat;
 }
 
 err_status_t
-srtp_stream_dealloc(srtp_t session, srtp_stream_ctx_t *stream) { 
+srtp_stream_dealloc(srtp_stream_ctx_t *stream,
+                    srtp_stream_ctx_t *stream_template) {
   err_status_t status;
-  
+
   /*
    * we use a conservative deallocation strategy - if any deallocation
    * fails, then we report that fact without trying to deallocate
@@ -178,41 +174,29 @@ srtp_stream_dealloc(srtp_t session, srtp_stream_ctx_t *stream) {
    */
 
   /* deallocate cipher, if it is not the same as that in template */
-  if (session->stream_template
-      && stream->rtp_cipher == session->stream_template->rtp_cipher) {
-    /* do nothing */
-  } else {
+  if (!stream_template || stream->rtp_cipher != stream_template->rtp_cipher) {
     status = cipher_dealloc(stream->rtp_cipher); 
     if (status) 
       return status;
   }
 
   /* deallocate auth function, if it is not the same as that in template */
-  if (session->stream_template
-      && stream->rtp_auth == session->stream_template->rtp_auth) {
-    /* do nothing */
-  } else {
+  if (!stream_template || stream->rtp_auth != stream_template->rtp_auth) {
     status = auth_dealloc(stream->rtp_auth);
     if (status)
       return status;
   }
 
   /* deallocate key usage limit, if it is not the same as that in template */
-  if (session->stream_template
-      && stream->limit == session->stream_template->limit) {
-    /* do nothing */
-  } else {
+  if (!stream_template || stream->limit != stream_template->limit) {
     crypto_free(stream->limit);
-  }   
+  }
 
-  /* 
+  /*
    * deallocate rtcp cipher, if it is not the same as that in
-   * template 
+   * template
    */
-  if (session->stream_template
-      && stream->rtcp_cipher == session->stream_template->rtcp_cipher) {
-    /* do nothing */
-  } else {
+  if (!stream_template || stream->rtcp_cipher != stream_template->rtcp_cipher) {
     status = cipher_dealloc(stream->rtcp_cipher); 
     if (status) 
       return status;
@@ -222,17 +206,14 @@ srtp_stream_dealloc(srtp_t session, srtp_stream_ctx_t *stream) {
    * deallocate rtcp auth function, if it is not the same as that in
    * template 
    */
-  if (session->stream_template
-      && stream->rtcp_auth == session->stream_template->rtcp_auth) {
-    /* do nothing */
-  } else {
+  if (!stream_template || stream->rtcp_auth != stream_template->rtcp_auth) {
     status = auth_dealloc(stream->rtcp_auth);
     if (status)
       return status;
   }
 
   /* DAM - need to deallocate EKT here */
-  
+
   /* deallocate srtp stream context */
   crypto_free(stream);
 
@@ -549,7 +530,12 @@ srtp_stream_init(srtp_stream_ctx_t *srtp,
    }
 
    return err_status_ok;  
- }
+}
+
+err_status_t
+srtp_stream_uninit(srtp_stream_ctx_t *srtp) {
+  return rdbx_uninit(&srtp->rtp_rdbx);
+}
 
 
  /*
@@ -1201,28 +1187,16 @@ srtp_dealloc(srtp_t session) {
   stream = session->stream_list;
   while (stream != NULL) {
     srtp_stream_t next = stream->next;
-    status = srtp_stream_dealloc(session, stream);
-    if (status)
+    status = srtp_stream_uninit_and_dealloc(stream, session->stream_template);
+    if (status) {
       return status;
+    }
     stream = next;
   }
-  
+
   /* deallocate stream template, if there is one */
   if (session->stream_template != NULL) {
-    status = auth_dealloc(session->stream_template->rtcp_auth); 
-    if (status) 
-      return status; 
-    status = cipher_dealloc(session->stream_template->rtcp_cipher); 
-    if (status) 
-      return status; 
-    crypto_free(session->stream_template->limit);
-    status = cipher_dealloc(session->stream_template->rtp_cipher); 
-    if (status) 
-      return status; 
-    status = auth_dealloc(session->stream_template->rtp_auth);
-    if (status)
-      return status;
-    crypto_free(session->stream_template);
+    status = srtp_stream_uninit_and_dealloc(session->stream_template, NULL);
   }
 
   /* deallocate session context */
@@ -1287,7 +1261,6 @@ srtp_add_stream(srtp_t session,
     crypto_free(tmp);
     return err_status_bad_param;
   }
-    
   return err_status_ok;
 }
 
@@ -1334,12 +1307,11 @@ srtp_create(srtp_t *session,               /* handle for session     */
 err_status_t
 srtp_remove_stream(srtp_t session, uint32_t ssrc) {
   srtp_stream_ctx_t *stream, *last_stream;
-  err_status_t status;
 
   /* sanity check arguments */
   if (session == NULL)
     return err_status_bad_param;
-  
+
   /* find stream in list; complain if not found */
   last_stream = stream = session->stream_list;
   while ((stream != NULL) && (ssrc != stream->ssrc)) {
@@ -1352,8 +1324,20 @@ srtp_remove_stream(srtp_t session, uint32_t ssrc) {
   /* remove stream from the list */
   last_stream->next = stream->next;
 
+  return srtp_stream_uninit_and_dealloc(stream, session->stream_template);
+}
+
+err_status_t
+srtp_stream_uninit_and_dealloc(srtp_stream_ctx_t *stream,
+                               srtp_stream_ctx_t *stream_template) {
+  err_status_t status;
+  /* deallocate rdbx data */
+  status = srtp_stream_uninit(stream);
+  if (status)
+    return status;
+
   /* deallocate the stream */
-  status = srtp_stream_dealloc(session, stream);
+  status = srtp_stream_dealloc(stream, stream_template);
   if (status)
     return status;
 
