diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp
index 4114a7ef4a30a7eea1c9e52b9db31cd802028866..c250885295274b4396ace9a63a9ded2380df890a 100644
--- a/src/sip/sipcall.cpp
+++ b/src/sip/sipcall.cpp
@@ -842,12 +842,17 @@ SIPCall::startAllMedia()
 #endif
 
         rtp->updateMedia(remote, local);
-        if (isIceRunning()) {
-            rtp->start(newIceSocket(ice_comp_id + 0),
-                       newIceSocket(ice_comp_id + 1));
-            ice_comp_id += 2;
-        } else
-            rtp->start();
+
+        // Not restarting media loop on hold as it's a huge waste of CPU ressources
+        // because of the audio loop
+        if (getState() != CallState::HOLD) {
+            if (isIceRunning()) {
+                rtp->start(newIceSocket(ice_comp_id + 0),
+                           newIceSocket(ice_comp_id + 1));
+                ice_comp_id += 2;
+            } else
+                rtp->start();
+        }
 
         switch (local.type) {
 #ifdef RING_VIDEO