diff --git a/src/media/audio/audio_rtp_session.cpp b/src/media/audio/audio_rtp_session.cpp
index f0bf91a6109328603552e2fc05d230191e5e2306..3f41848160b979f3d754fb1e65c3e268e00fa4a6 100644
--- a/src/media/audio/audio_rtp_session.cpp
+++ b/src/media/audio/audio_rtp_session.cpp
@@ -48,7 +48,8 @@ class AudioSender {
                     const std::string& dest,
                     const MediaDescription& args,
                     SocketPair& socketPair,
-                    const uint16_t seqVal);
+                    const uint16_t seqVal,
+                    bool muteState);
         ~AudioSender();
 
         void setMuted(bool isMuted);
@@ -69,6 +70,7 @@ class AudioSender {
         AudioBuffer micData_;
         AudioBuffer resampledData_;
         const uint16_t seqVal_;
+        bool muteState_ = false;
 
         using seconds = std::chrono::duration<double, std::ratio<1>>;
         const seconds secondsPerPacket_ {0.02}; // 20 ms
@@ -82,11 +84,13 @@ AudioSender::AudioSender(const std::string& id,
                          const std::string& dest,
                          const MediaDescription& args,
                          SocketPair& socketPair,
-                         const uint16_t seqVal) :
+                         const uint16_t seqVal,
+                         bool muteState) :
     id_(id),
     dest_(dest),
     args_(args),
     seqVal_(seqVal),
+    muteState_(muteState),
     loop_([&] { return setup(socketPair); },
           std::bind(&AudioSender::process, this),
           std::bind(&AudioSender::cleanup, this))
@@ -108,6 +112,7 @@ AudioSender::setup(SocketPair& socketPair)
     try {
         /* Encoder setup */
         RING_DBG("audioEncoder_->openOutput %s", dest_.c_str());
+        audioEncoder_->setMuted(muteState_);
         audioEncoder_->openOutput(dest_.c_str(), args_);
         audioEncoder_->setInitSeqVal(seqVal_);
         audioEncoder_->setIOContext(muxContext_);
@@ -178,6 +183,7 @@ AudioSender::process()
 void
 AudioSender::setMuted(bool isMuted)
 {
+    muteState_ = isMuted;
     audioEncoder_->setMuted(isMuted);
 }
 
@@ -385,7 +391,7 @@ AudioRtpSession::startSender()
         sender_.reset();
         socketPair_->stopSendOp(false);
         sender_.reset(new AudioSender(callID_, getRemoteRtpUri(), send_,
-                                      *socketPair_, initSeqVal_));
+                                      *socketPair_, initSeqVal_, muteState_));
     } catch (const MediaEncoderException &e) {
         RING_ERR("%s", e.what());
         send_.enabled = false;
@@ -480,8 +486,10 @@ void
 AudioRtpSession::setMuted(bool isMuted)
 {
     std::lock_guard<std::recursive_mutex> lock(mutex_);
-    if (sender_)
+    if (sender_) {
+        muteState_ = isMuted;
         sender_->setMuted(isMuted);
+    }
 }
 
 } // namespace ring
diff --git a/src/media/audio/audio_rtp_session.h b/src/media/audio/audio_rtp_session.h
index add163b1d2a21079c6c3dc6c7747a5166229b29f..a19f4dee2100e1884990d2a62c6cb87804846a23 100644
--- a/src/media/audio/audio_rtp_session.h
+++ b/src/media/audio/audio_rtp_session.h
@@ -56,6 +56,7 @@ class AudioRtpSession : public RtpSession {
         std::unique_ptr<AudioReceiveThread> receiveThread_;
         std::shared_ptr<RingBuffer> ringbuffer_;
         uint16_t initSeqVal_ = 0;
+        bool muteState_ = false;
 };
 
 } // namespace ring