diff --git a/src/media/media_encoder.cpp b/src/media/media_encoder.cpp
index 8b1336e47a58cf227a89487146842f9f060e3db5..a8ab8131b7211cf11ec7e2362fe07885148914d8 100644
--- a/src/media/media_encoder.cpp
+++ b/src/media/media_encoder.cpp
@@ -213,7 +213,7 @@ MediaEncoder::initStream(const SystemCodecInfo& systemCodecInfo, AVBufferRef* fr
         for (const auto& it : APIs) {
             accel_ = std::make_unique<video::HardwareAccel>(it);    // save accel
             // Init codec need accel_ to init encoderCtx accelerated
-            encoderCtx = initCodec(mediaType, static_cast<AVCodecID>(systemCodecInfo.avcodecId), SystemCodecInfo::DEFAULT_VIDEO_BITRATE);
+            encoderCtx = initCodec(mediaType, static_cast<AVCodecID>(systemCodecInfo.avcodecId), videoOpts_.bitrate);
             encoderCtx->opaque = accel_.get();
             // Check if pixel format from encoder match pixel format from decoder frame context
             // if it mismatch, it means that we are using two different hardware API (nvenc and vaapi for example)
@@ -249,7 +249,7 @@ MediaEncoder::initStream(const SystemCodecInfo& systemCodecInfo, AVBufferRef* fr
 
     if (!encoderCtx) {
         JAMI_WARN("Not using hardware encoding for %s", avcodec_get_name(static_cast<AVCodecID>(systemCodecInfo.avcodecId)));
-        encoderCtx = initCodec(mediaType, static_cast<AVCodecID>(systemCodecInfo.avcodecId), SystemCodecInfo::DEFAULT_VIDEO_BITRATE);
+        encoderCtx = initCodec(mediaType, static_cast<AVCodecID>(systemCodecInfo.avcodecId), videoOpts_.bitrate);
         readConfig(encoderCtx);
         encoders_.push_back(encoderCtx);
         if (avcodec_open2(encoderCtx, outputCodec_, &options_) < 0)
diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp
index 54bd15936ece7c018b5c1859dc45d7fb8abc4b13..c9b53e54396f2023b21bfcf452d7506e9d2a2e30 100644
--- a/src/media/video/video_rtp_session.cpp
+++ b/src/media/video/video_rtp_session.cpp
@@ -51,7 +51,7 @@ static constexpr unsigned MAX_SIZE_HISTO_QUALITY {30};
 static constexpr unsigned MAX_SIZE_HISTO_BITRATE {100};
 static constexpr unsigned MAX_SIZE_HISTO_JITTER {50};
 static constexpr unsigned MAX_SIZE_HISTO_DELAY {25};
-static constexpr unsigned MAX_REMB_DEC {2};
+static constexpr unsigned MAX_REMB_DEC {1};
 
 constexpr auto DELAY_AFTER_RESTART = std::chrono::milliseconds(1000);
 constexpr auto EXPIRY_TIME_RTCP = std::chrono::seconds(2);
@@ -131,6 +131,7 @@ void VideoRtpSession::startSender()
 
         send_.mode = autoQuality ? RateMode::CBR : RateMode::CRF_CONSTRAINED;
         send_.linkableHW = conference_ == nullptr;
+        send_.bitrate = videoBitrateInfo_.videoBitrateCurrent;
 
         if (sender_)
             initSeqVal_ = sender_->getLastSeqValue() + 10; // Skip a few sequences to make nvenc happy on a sender restart
@@ -489,7 +490,7 @@ VideoRtpSession::dropProcessing(RTCPInfo* rtcpi)
     else {
         // If ponderate drops are inferior to 10% that mean drop are not from congestion but from network...
         // ... we can increase
-        if (pondLoss >= 10.0f && rtcpi->packetLoss > 0.0f) {
+        if (pondLoss >= 5.0f && rtcpi->packetLoss > 0.0f) {
             newBitrate *= 1.0f - rtcpi->packetLoss/150.0f;
             histoLoss_.clear();
             lastMediaRestart_ = now;
@@ -515,7 +516,6 @@ VideoRtpSession::delayProcessing(int br)
     setNewBitrate(newBitrate);
 }
 
-
 void
 VideoRtpSession::setNewBitrate(unsigned int newBR)
 {
diff --git a/src/media/video/video_sender.cpp b/src/media/video/video_sender.cpp
index 061e24ce5792be5460c639045a7a58597c8020f6..65a30c3506342b0f899f67e21ce9e3c50dd48c81 100644
--- a/src/media/video/video_sender.cpp
+++ b/src/media/video/video_sender.cpp
@@ -53,7 +53,7 @@ VideoSender::VideoSender(const std::string& dest, const DeviceParams& dev,
 {
     keyFrameFreq_ = dev.framerate.numerator() * KEY_FRAME_PERIOD;
     videoEncoder_->openOutput(dest, "rtp");
-    auto opts = MediaStream("video sender", AV_PIX_FMT_YUV420P, 1 / (rational<int>)dev.framerate, dev.width, dev.height, 1, (rational<int>)dev.framerate);
+    auto opts = MediaStream("video sender", AV_PIX_FMT_YUV420P, 1 / (rational<int>)dev.framerate, dev.width, dev.height, args.bitrate, (rational<int>)dev.framerate);
     videoEncoder_->setOptions(opts);
     videoEncoder_->setOptions(args);
     videoEncoder_->addStream(args.codec->systemCodecInfo);