diff --git a/src/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/src/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index 97e699a..92c9e0d 100644
--- a/src/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/src/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -2476,8 +2476,8 @@
 {
     WebRtc_Word32 numBoundingSet = 0;
     WebRtc_Word32 newBitrates = 0;
-    WebRtc_UWord32 minBitrateKbit = 0;
-    WebRtc_UWord32 maxBitrateKbit = 0;
+    int minBitrateKbit = 0;
+    int maxBitrateKbit = 0;
 
     if(_defaultModule)
     {
@@ -2589,9 +2589,9 @@
 
     // Get net bitrate from bounding set depending on sent packet rate
     newBitrates = CalcMinMaxBitRate(_rtpSender.PacketRate(),
-                                    (WebRtc_UWord32)numBoundingSet,
-                                    minBitrateKbit,
-                                    maxBitrateKbit);
+                                    numBoundingSet,
+                                    &minBitrateKbit,
+                                    &maxBitrateKbit);
 
     // no critsect when calling out to "unknown" code
     if(newBitrates == 0) // we have new bitrates
diff --git a/src/modules/rtp_rtcp/source/tmmbr_help.cc b/src/modules/rtp_rtcp/source/tmmbr_help.cc
index 43537f8..f08eb1b 100644
--- a/src/modules/rtp_rtcp/source/tmmbr_help.cc
+++ b/src/modules/rtp_rtcp/source/tmmbr_help.cc
@@ -435,11 +435,11 @@
     return false;
 }
 
-WebRtc_Word32
-TMMBRHelp::CalcMinMaxBitRate(const WebRtc_UWord32 totalPacketRate,
-                             const WebRtc_UWord32 lengthOfBoundingSet,
-                             WebRtc_UWord32& minBitrateKbit,
-                             WebRtc_UWord32& maxBitrateKbit) const
+
+int TMMBRHelp::CalcMinMaxBitRate(int totalPacketRate,
+                                 int lengthOfBoundingSet,
+                                 int* minBitrateKbit,
+                                 int* maxBitrateKbit) const
 {
     CriticalSectionScoped lock(_criticalSection);
 
@@ -449,59 +449,63 @@
         return -1;
     }
 
-    minBitrateKbit = 0xFFFFFFFF;
-    maxBitrateKbit = 0;
+    int myMinBitrateKbit = 0xFFFFFFFF;
+    int myMaxBitrateKbit = 0;
 
     for (WebRtc_UWord32 i = 0; i < _candidateSet.sizeOfSet; ++i)
     {
         if (_candidateSet.ptrTmmbrSet[i])
         {
-            WebRtc_Word32 curNetBitRate = static_cast<WebRtc_Word32>((_candidateSet.ptrTmmbrSet[i]*1000.0
+            int curNetBitRate = static_cast<WebRtc_Word32>((_candidateSet.ptrTmmbrSet[i]*1000.0
                             - (totalPacketRate * (_candidateSet.ptrPacketOHSet[i] << 3)))/1000 + 0.5);
 
-        if (curNetBitRate < 0)
-        {
-            // could be negative for a large packet rate
-            if(_audio)
+            if (curNetBitRate < 0)
             {
-                curNetBitRate = MIN_AUDIO_BW_MANAGEMENT_BITRATE;
-            }else
-            {
-                curNetBitRate = MIN_VIDEO_BW_MANAGEMENT_BITRATE;
+                // could be negative for a large packet rate
+                if(_audio)
+                {
+                    curNetBitRate = MIN_AUDIO_BW_MANAGEMENT_BITRATE;
+                }else
+                {
+                    curNetBitRate = MIN_VIDEO_BW_MANAGEMENT_BITRATE;
+                }
             }
-        }
-            minBitrateKbit = (WebRtc_UWord32(curNetBitRate) < minBitrateKbit) ? curNetBitRate : minBitrateKbit;
+            myMinBitrateKbit = curNetBitRate < myMinBitrateKbit ?
+                               curNetBitRate : myMinBitrateKbit;
         }
     }
-    maxBitrateKbit = minBitrateKbit;
+    myMaxBitrateKbit = myMinBitrateKbit;
 
-    if (maxBitrateKbit == 0 || maxBitrateKbit < minBitrateKbit)
+    if (myMaxBitrateKbit == 0 || myMaxBitrateKbit < myMinBitrateKbit)
     {
         return -1;
     }
 
     if(_audio)
     {
-        if (minBitrateKbit < MIN_AUDIO_BW_MANAGEMENT_BITRATE)
+        if (myMinBitrateKbit < MIN_AUDIO_BW_MANAGEMENT_BITRATE)
         {
-            minBitrateKbit = MIN_AUDIO_BW_MANAGEMENT_BITRATE;
+            myMinBitrateKbit = MIN_AUDIO_BW_MANAGEMENT_BITRATE;
         }
-        if (maxBitrateKbit < MIN_AUDIO_BW_MANAGEMENT_BITRATE)
+        if (myMaxBitrateKbit < MIN_AUDIO_BW_MANAGEMENT_BITRATE)
         {
-            maxBitrateKbit = MIN_AUDIO_BW_MANAGEMENT_BITRATE;
+            myMaxBitrateKbit = MIN_AUDIO_BW_MANAGEMENT_BITRATE;
         }
     }else
     {
-        if (minBitrateKbit < MIN_VIDEO_BW_MANAGEMENT_BITRATE)
+        if (myMinBitrateKbit < MIN_VIDEO_BW_MANAGEMENT_BITRATE)
         {
-            minBitrateKbit = MIN_VIDEO_BW_MANAGEMENT_BITRATE;
+            myMinBitrateKbit = MIN_VIDEO_BW_MANAGEMENT_BITRATE;
         }
-        if (maxBitrateKbit < MIN_VIDEO_BW_MANAGEMENT_BITRATE)
+        if (myMaxBitrateKbit < MIN_VIDEO_BW_MANAGEMENT_BITRATE)
         {
-            maxBitrateKbit = MIN_VIDEO_BW_MANAGEMENT_BITRATE;
+            myMaxBitrateKbit = MIN_VIDEO_BW_MANAGEMENT_BITRATE;
         }
     }
 
+    *maxBitrateKbit = myMaxBitrateKbit;
+    *minBitrateKbit = myMinBitrateKbit;
+
     return 0;
 }
 } // namespace webrtc
diff --git a/src/modules/rtp_rtcp/source/tmmbr_help.h b/src/modules/rtp_rtcp/source/tmmbr_help.h
index 0575f1d..ad3ef31 100644
--- a/src/modules/rtp_rtcp/source/tmmbr_help.h
+++ b/src/modules/rtp_rtcp/source/tmmbr_help.h
@@ -53,10 +53,10 @@
     bool        IsOwner(const WebRtc_UWord32 ssrc,
                         const WebRtc_UWord32 length) const;
 
-    WebRtc_Word32 CalcMinMaxBitRate(const WebRtc_UWord32 totalPacketRate,
-                                  const WebRtc_UWord32 lengthOfBoundingSet,
-                                  WebRtc_UWord32& minBitrateKbit,
-                                  WebRtc_UWord32& maxBitrateKbit) const;
+    int CalcMinMaxBitRate(int totalPacketRate,
+                          int lengthOfBoundingSet,
+                          int* minBitrateKbit,
+                          int* maxBitrateKbit) const;
 
 protected:
     TMMBRSet*   VerifyAndAllocateBoundingSet(WebRtc_UWord32 minimumSize);
