diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 0334461383f8aad400b244c248562cea622c434c..e53e6e75f8da0f6d1bdcd2805fbf5fd0e6da848d 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -198,7 +198,7 @@ void ManagerImpl::terminate ()
 
     _debug ("Manager: Unload audio codecs ");
     _audioCodecFactory.deleteHandlePointer();
-
+    audioLayerMutexUnlock();
 }
 
 bool ManagerImpl::isCurrentCall (const std::string& callId)
diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index 91e44a92d27fc0dee23f12a632ffc21233032d47..8c4b23fba6736aed0516f08cc9a0c60210d7f139 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -648,7 +648,6 @@ Sdp::~Sdp()
 
     for (iter = localAudioMediaCap_.begin(); iter != localAudioMediaCap_.end(); ++iter)
         delete *iter;
-    pj_pool_release (memPool_);
 }
 
 
diff --git a/sflphone-common/src/sip/sipcall.cpp b/sflphone-common/src/sip/sipcall.cpp
index b577d77c6ef42760d9c18214d43da06ac8e31225..f68b1f465199d6106ad24f065d5d16635091d3b2 100644
--- a/sflphone-common/src/sip/sipcall.cpp
+++ b/sflphone-common/src/sip/sipcall.cpp
@@ -48,7 +48,7 @@ SIPCall::SIPCall (const std::string& id, Call::CallType type, pj_caching_pool *c
     , _invSession (NULL)
 	, pool_(pj_pool_create(&caching_pool->factory, id.c_str(), CALL_MEMPOOL_INIT_SIZE,
                             CALL_MEMPOOL_INC_SIZE, NULL))
-    , local_sdp_(pool_)
+    , local_sdp_(new Sdp(pool_))
 {
     _debug ("SIPCall: Create new call %s", id.c_str());
 }
@@ -58,6 +58,8 @@ SIPCall::~SIPCall()
     _debug ("SIPCall: Delete call");
     _debug ("SDP: pool capacity %d", pj_pool_get_capacity (pool_));
     _debug ("SDP: pool size %d", pj_pool_get_used_size (pool_));
+    delete local_sdp_;
+    pj_pool_release (pool_);
 
     delete _audiortp;
 }
diff --git a/sflphone-common/src/sip/sipcall.h b/sflphone-common/src/sip/sipcall.h
index 083cc6f386fc6478b7df0bf0ab9eddbbb1bce437..40c451dfadc6bf87cc1e4ed9b342b6fe4d481b46 100644
--- a/sflphone-common/src/sip/sipcall.h
+++ b/sflphone-common/src/sip/sipcall.h
@@ -33,13 +33,13 @@
 #define SIPCALL_H
 
 #include "call.h"
-#include "sdp.h"
 #include <cassert>
 
 class pjsip_evsub;
 class pj_caching_pool;
 class pj_pool_t;
 class pjsip_inv_session;
+class Sdp;
 
 namespace sfl
 {
@@ -96,7 +96,7 @@ class SIPCall : public Call
          * Return the local SDP session
          */
         Sdp* getLocalSDP (void) {
-            return &local_sdp_;
+            return local_sdp_;
         }
 
         /**
@@ -169,7 +169,7 @@ class SIPCall : public Call
         /**
          * The SDP session
          */
-        Sdp local_sdp_;
+        Sdp *local_sdp_;
 };
 
 #endif
diff --git a/sflphone-common/test/sdptest.cpp b/sflphone-common/test/sdptest.cpp
index e701b79b297196591cf3ee3f49745e1a7f7a134a..9f4a61047979af0f487ac8ae419208dee6859da8 100644
--- a/sflphone-common/test/sdptest.cpp
+++ b/sflphone-common/test/sdptest.cpp
@@ -114,6 +114,7 @@ void SDPTest::tearDown()
 {
 	delete _session;
 	_session = NULL;
+    pj_pool_release (_testPool);
 }