diff --git a/daemon/src/audio/audiortp/audio_rtp_factory.cpp b/daemon/src/audio/audiortp/audio_rtp_factory.cpp
index 2170b06e52a77e238fa1c4241ec4cc4bac363218..4747834738279838373248fd141c762bbfbafd5b 100644
--- a/daemon/src/audio/audiortp/audio_rtp_factory.cpp
+++ b/daemon/src/audio/audiortp/audio_rtp_factory.cpp
@@ -51,8 +51,6 @@ AudioRtpFactory::AudioRtpFactory(SIPCall *ca) : rtpSession_(NULL),
 AudioRtpFactory::~AudioRtpFactory()
 {
     delete rtpSession_;
-    delete cachedLocalContext_;
-    delete cachedRemoteContext_;
 }
 
 void AudioRtpFactory::initConfig()
diff --git a/daemon/src/audio/audiortp/audio_srtp_session.cpp b/daemon/src/audio/audiortp/audio_srtp_session.cpp
index 38567d1b629cdbe7dbc29971401039429b9b3cc3..f08b570af2443f38f67a1d2a7941eaf2496d61ed 100644
--- a/daemon/src/audio/audiortp/audio_srtp_session.cpp
+++ b/daemon/src/audio/audiortp/audio_srtp_session.cpp
@@ -158,7 +158,7 @@ std::vector<std::string> AudioSrtpSession::getLocalCryptoInfo()
     // cryptographic context tagged 1, 2, 3...
     std::string tag = "1";
 
-    std::string crypto_suite = sfl::CryptoSuites[localCryptoSuite_].name;
+    std::string crypto_suite(sfl::CryptoSuites[localCryptoSuite_].name);
 
     // srtp keys formated as the following  as the following
     // inline:keyParameters|keylifetime|MasterKeyIdentifier
@@ -262,9 +262,10 @@ void AudioSrtpSession::initializeRemoteCryptoContext()
 {
     DEBUG("AudioSrtp: Initialize remote crypto context");
 
-    CryptoSuiteDefinition crypto = sfl::CryptoSuites[remoteCryptoSuite_];
+    const CryptoSuiteDefinition &crypto = sfl::CryptoSuites[remoteCryptoSuite_];
 
-    delete remoteCryptoCtx_;
+    // delete this crypto context from the internal map
+    removeInQueueCryptoContext(remoteCryptoCtx_);
     remoteCryptoCtx_ = new ost::CryptoContext(0x0,
                                               0,    // roc,
                                               0L,   // keydr,
@@ -285,9 +286,10 @@ void AudioSrtpSession::initializeLocalCryptoContext()
 {
     DEBUG("AudioSrtp: Initialize local crypto context");
 
-    CryptoSuiteDefinition crypto = sfl::CryptoSuites[localCryptoSuite_];
+    const CryptoSuiteDefinition &crypto = sfl::CryptoSuites[localCryptoSuite_];
 
-    delete localCryptoCtx_;
+    // delete this crypto context from the internal map
+    removeOutQueueCryptoContext(localCryptoCtx_);
     localCryptoCtx_ = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(),
                                              0,     // roc,
                                              0L,    // keydr,
@@ -306,12 +308,16 @@ void AudioSrtpSession::initializeLocalCryptoContext()
 void AudioSrtpSession::restoreCryptoContext(ost::CryptoContext *localContext,
                                             ost::CryptoContext *remoteContext)
 {
-    delete remoteCryptoCtx_;
-    remoteCryptoCtx_ = remoteContext;
-    delete localCryptoCtx_;
-    localCryptoCtx_ = localContext;
-    setInQueueCryptoContext(remoteCryptoCtx_);
-    setOutQueueCryptoContext(localCryptoCtx_);
+    if (remoteCryptoCtx_ != remoteContext) {
+        removeInQueueCryptoContext(remoteCryptoCtx_);
+        remoteCryptoCtx_ = remoteContext;
+        setInQueueCryptoContext(remoteCryptoCtx_);
+    }
+    if (localCryptoCtx_ != localContext) {
+        removeOutQueueCryptoContext(localCryptoCtx_);
+        localCryptoCtx_ = localContext;
+        setOutQueueCryptoContext(localCryptoCtx_);
+    }
 }
 
 }
diff --git a/daemon/src/audio/pulseaudio/pulselayer.cpp b/daemon/src/audio/pulseaudio/pulselayer.cpp
index a930f5a10997ec6684ee6f9662365607c9508b14..ec672a8ba6754af53cf68731cc18bdae1ddbd8fe 100644
--- a/daemon/src/audio/pulseaudio/pulselayer.cpp
+++ b/daemon/src/audio/pulseaudio/pulselayer.cpp
@@ -398,7 +398,7 @@ void PulseLayer::readFromMic()
     size_t bytes;
 
     if (pa_stream_peek(record_->pulseStream() , (const void**) &data , &bytes) < 0 or !data) {
-        ERROR("Audio: Error capture stream peek failed: %s" , pa_strerror(pa_context_errno(context_)));
+        // ERROR("Audio: Error capture stream peek failed: %s" , pa_strerror(pa_context_errno(context_)));
         return;
     }
 
diff --git a/daemon/src/sip/sdes_negotiator.cpp b/daemon/src/sip/sdes_negotiator.cpp
index a8eed12a7dc671daaef40ff38a78b0e962ab01ab..8bf4cc12db3a1905f37f7771f02343dc1a4bd7ca 100644
--- a/daemon/src/sip/sdes_negotiator.cpp
+++ b/daemon/src/sip/sdes_negotiator.cpp
@@ -91,7 +91,6 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse()
     // Take each line from the vector
     // and parse its content
 
-
     std::vector<CryptoAttribute *> cryptoAttributeVector;
 
     for (std::vector<std::string>::iterator iter = remoteAttribute_.begin();
@@ -174,8 +173,7 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse()
 
 bool SdesNegotiator::negotiate()
 {
-
-    std::vector<CryptoAttribute *> cryptoAttributeVector = parse();
+    std::vector<CryptoAttribute *> cryptoAttributeVector(parse());
     std::vector<CryptoAttribute *>::iterator iter_offer = cryptoAttributeVector.begin();
 
     std::vector<CryptoSuiteDefinition>::const_iterator iter_local = localCapabilities_.begin();
@@ -194,7 +192,7 @@ bool SdesNegotiator::negotiate()
                     cryptoSuite_ = (*iter_offer)->getCryptoSuite();
                     srtpKeyMethod_ = (*iter_offer)->getSrtpKeyMethod();
                     srtpKeyInfo_ = (*iter_offer)->getSrtpKeyInfo();
-                    authTagLength_ = cryptoSuite_.substr(cryptoSuite_.size()-2, 2);
+                    authTagLength_ = cryptoSuite_.substr(cryptoSuite_.size() - 2, 2);
                 }
 
                 ++iter_local;
diff --git a/daemon/src/sip/sdes_negotiator.h b/daemon/src/sip/sdes_negotiator.h
index 416f940b011eecd97d00e196a44e07cb146e688f..c6d575da1d224ded4fe91c0735b2b84081f6eba1 100644
--- a/daemon/src/sip/sdes_negotiator.h
+++ b/daemon/src/sip/sdes_negotiator.h
@@ -62,7 +62,7 @@ enum KeyMethod {
 };
 
 struct CryptoSuiteDefinition {
-    char * name;
+    const char *name;
     int masterKeyLength;
     int masterSaltLength;
     int srtpLifetime;
@@ -81,9 +81,9 @@ struct CryptoSuiteDefinition {
 * as defined in RFC4568 (6.2)
 */
 static const CryptoSuiteDefinition CryptoSuites[] = {
-    { (char*) "AES_CM_128_HMAC_SHA1_80", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 80, 80, 160, 160 },
-    { (char*) "AES_CM_128_HMAC_SHA1_32", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 32, 80, 160, 160 },
-    { (char*) "F8_128_HMAC_SHA1_80", 128, 112, 48, 31, AESF8Mode, 128, HMACSHA1, 80, 80, 160, 160 }
+    { "AES_CM_128_HMAC_SHA1_80", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 80, 80, 160, 160 },
+    { "AES_CM_128_HMAC_SHA1_32", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 32, 80, 160, 160 },
+    { "F8_128_HMAC_SHA1_80", 128, 112, 48, 31, AESF8Mode, 128, HMACSHA1, 80, 80, 160, 160 }
 };
 
 
diff --git a/daemon/src/sip/sdp.cpp b/daemon/src/sip/sdp.cpp
index 8fa3010bc0075fe67be38fd585440987b8fd2cc3..76ab9c86221538b29d54980b3f63c2bfb293096a 100644
--- a/daemon/src/sip/sdp.cpp
+++ b/daemon/src/sip/sdp.cpp
@@ -401,8 +401,6 @@ void Sdp::setMediaTransportInfoFromRemoteSdp()
 
 void Sdp::getRemoteSdpCryptoFromOffer(const pjmedia_sdp_session* remote_sdp, CryptoOffer& crypto_offer)
 {
-    CryptoOffer remoteOffer;
-
     for (unsigned i = 0; i < remote_sdp->media_count; ++i) {
         pjmedia_sdp_media *media = remote_sdp->media[i];
 
diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index 1dc9c62250745c6e30371bd2f5ac8f2954b8f2dd..6df415e3ffa0d09c3fd3056d78e64367c5d5429a 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -38,6 +38,7 @@
 #include "sip_utils.h"
 
 #include "sipvoiplink.h"
+#include "array_size.h"
 #include "manager.h"
 #include "logger.h"
 
@@ -1329,9 +1330,6 @@ void sdp_create_offer_cb(pjsip_inv_session *inv, pjmedia_sdp_session **p_offer)
 // This callback is called after SDP offer/answer session has completed.
 void sdp_media_update_cb(pjsip_inv_session *inv, pj_status_t status)
 {
-    const pjmedia_sdp_session *remote_sdp;
-    const pjmedia_sdp_session *local_sdp;
-
     SIPCall *call = static_cast<SIPCall *>(inv->mod_data[mod_ua_.id]);
 
     if (call == NULL) {
@@ -1355,17 +1353,19 @@ void sdp_media_update_cb(pjsip_inv_session *inv, pj_status_t status)
     Sdp *sdpSession = call->getLocalSDP();
 
     // Get active session sessions
+    const pjmedia_sdp_session *remote_sdp;
     pjmedia_sdp_neg_get_active_remote(inv->neg, &remote_sdp);
+    const pjmedia_sdp_session *local_sdp;
     pjmedia_sdp_neg_get_active_local(inv->neg, &local_sdp);
 
     // Print SDP session
     char buffer[1000];
     memset(buffer, 0, sizeof buffer);
-    pjmedia_sdp_print(remote_sdp, buffer, 1000);
+    pjmedia_sdp_print(remote_sdp, buffer, sizeof buffer);
     DEBUG("SDP: Remote active SDP Session:\n%s", buffer);
 
-    memset(buffer, 0, 1000);
-    pjmedia_sdp_print(local_sdp, buffer, 1000);
+    memset(buffer, 0, sizeof buffer);
+    pjmedia_sdp_print(local_sdp, buffer, sizeof buffer);
     DEBUG("SDP: Local active SDP Session:\n%s", buffer);
 
     // Set active SDP sessions
@@ -1385,9 +1385,9 @@ void sdp_media_update_cb(pjsip_inv_session *inv, pj_status_t status)
     bool nego_success = false;
 
     if (!crypto_offer.empty()) {
-        std::vector<sfl::CryptoSuiteDefinition>localCapabilities;
+        std::vector<sfl::CryptoSuiteDefinition> localCapabilities;
 
-        for (int i = 0; i < 3; i++)
+        for (size_t i = 0; i < ARRAYSIZE(sfl::CryptoSuites); ++i)
             localCapabilities.push_back(sfl::CryptoSuites[i]);
 
         sfl::SdesNegotiator sdesnego(localCapabilities, crypto_offer);
@@ -1402,9 +1402,13 @@ void sdp_media_update_cb(pjsip_inv_session *inv, pj_status_t status)
 
             Manager::instance().getDbusManager()->getCallManager()->secureSdesOn(call->getCallId());
         } else {
+            ERROR("UserAgent: SDES negotiation failure");
             Manager::instance().getDbusManager()->getCallManager()->secureSdesOff(call->getCallId());
         }
     }
+    else {
+        DEBUG("UserAgent: No crypto offer available");
+    }
 
     // We did not find any crypto context for this media, RTP fallback
     if (!nego_success && call->getAudioRtp().isSdesEnabled()) {