diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c
index 656066e..db84caa 100644
--- a/plugins/elements/gstqueue2.c
+++ b/plugins/elements/gstqueue2.c
@@ -835,7 +835,7 @@ get_buffering_percent (GstQueue2 * queue, gboolean * is_buffering,
       *is_buffering = FALSE;
     return FALSE;
   }
-#define GET_PERCENT(format,alt_max) ((queue->max_level.format) > 0 ? (queue->cur_level.format) * 100 / ((alt_max) > 0 ? MIN ((alt_max), (queue->max_level.format)) : (queue->max_level.format)) : 0)
+#define GET_PERCENT(format,alt_max) ((queue->max_level.format) > 0 ? MIN (100, gst_util_uint64_scale(queue->cur_level.format, 100, ((alt_max) > 0 ? MIN ((alt_max), (queue->max_level.format)) : (queue->max_level.format)))) : 0)
 
   if (queue->is_eos) {
     /* on EOS we are always 100% full, we set the var here so that it we can
