diff --git a/src/include/switch_core.h b/src/include/switch_core.h
index da673465ac..826b88ebd1 100644
--- a/src/include/switch_core.h
+++ b/src/include/switch_core.h
@@ -905,10 +905,9 @@ SWITCH_DECLARE(switch_status_t) switch_core_timer_step(switch_timer_t *timer);
 /*! 
   \brief Check if the current step has been exceeded
   \param timer the timer to wait on
-  \param diff the remaining number of ms
   \return the newest sample count
 */
-SWITCH_DECLARE(switch_status_t) switch_core_timer_check(switch_timer_t *timer, uint32_t *diff);
+SWITCH_DECLARE(switch_status_t) switch_core_timer_check(switch_timer_t *timer);
 
 /*! 
   \brief Destroy an allocated timer
diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_interfaces.h
index 37bc6497eb..e8abf5efcf 100644
--- a/src/include/switch_module_interfaces.h
+++ b/src/include/switch_module_interfaces.h
@@ -245,7 +245,7 @@ struct switch_timer_interface {
 	/*! function to step the timer one step */
 	switch_status_t (*timer_step)(switch_timer_t *);
 	/*! function to check if the current step has expired */
-	switch_status_t (*timer_check)(switch_timer_t *, uint32_t *);
+	switch_status_t (*timer_check)(switch_timer_t *);
 	/*! function to deallocate the timer */
 	switch_status_t (*timer_destroy)(switch_timer_t *);
 	const struct switch_timer_interface *next;
diff --git a/src/mod/timers/mod_softtimer/mod_softtimer.c b/src/mod/timers/mod_softtimer/mod_softtimer.c
index 10f6bb0741..14e238ff86 100644
--- a/src/mod/timers/mod_softtimer/mod_softtimer.c
+++ b/src/mod/timers/mod_softtimer/mod_softtimer.c
@@ -78,11 +78,8 @@ static inline switch_status_t timer_step(switch_timer_t *timer)
 {
 	timer_private_t *private_info = timer->private_info;
 
-    while(private_info->reference <= TIMER_MATRIX[timer->interval].tick) {
-        private_info->reference += timer->interval;
-    }
-    
-	return SWITCH_STATUS_SUCCESS;
+    private_info->reference += timer->interval;
+    return SWITCH_STATUS_SUCCESS;
 }
 
 
@@ -93,41 +90,31 @@ static inline switch_status_t timer_next(switch_timer_t *timer)
 	timer_step(timer);
 	while (TIMER_MATRIX[timer->interval].tick < private_info->reference) {
         uint64_t diff;
-
-        if ((diff = (private_info->reference - TIMER_MATRIX[timer->interval].tick))) {
-            if (diff == timer->interval) {
-                switch_yield(diff * 500);
-            } else {
-                switch_yield(1000);
-            }
-        } else {
-            break;
-        }
+        switch_yield(timer->interval * 500);
 	}
 	timer->samplecount += timer->samples;
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static inline switch_status_t timer_check(switch_timer_t *timer, uint32_t *diff)
+static inline switch_status_t timer_check(switch_timer_t *timer)
 
 {
 	timer_private_t *private_info = timer->private_info;
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
+    uint64_t diff;
 
 	if (TIMER_MATRIX[timer->interval].tick < private_info->reference) {
-        uint64_t _diff = private_info->reference - TIMER_MATRIX[timer->interval].tick;
-        *diff = (uint32_t) _diff;
+        diff = private_info->reference - TIMER_MATRIX[timer->interval].tick;
 	} else {
-        *diff = 0;
+        diff = 0;
 	}
 
-    if (*diff) {
+    if (diff) {
         status = SWITCH_STATUS_FALSE;
     } else {
         timer_step(timer);
     }
 
-
 	return status;
 }
 
diff --git a/src/switch_core.c b/src/switch_core.c
index 96661f977c..19e8b6debd 100644
--- a/src/switch_core.c
+++ b/src/switch_core.c
@@ -1321,14 +1321,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_timer_step(switch_timer_t *timer)
 	return timer->timer_interface->timer_step(timer);
 }
 
-SWITCH_DECLARE(switch_status_t) switch_core_timer_check(switch_timer_t *timer, uint32_t *diff)
+SWITCH_DECLARE(switch_status_t) switch_core_timer_check(switch_timer_t *timer)
 {
 	if (!timer->timer_interface) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Timer is not initilized!\n");
 		return SWITCH_STATUS_GENERR;
 	}
 
-	return timer->timer_interface->timer_check(timer, diff);
+	return timer->timer_interface->timer_check(timer);
 }
 
 
diff --git a/src/switch_rtp.c b/src/switch_rtp.c
index 81a14f0b6f..23496bb8ab 100644
--- a/src/switch_rtp.c
+++ b/src/switch_rtp.c
@@ -711,7 +711,6 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
 	switch_size_t bytes = 0;
 	switch_status_t status;
 	uint8_t check = 1;
-    uint32_t diff = 0;
 
 	if (!rtp_session->timer.interval) {
 		rtp_session->last_time = switch_time_now();
@@ -758,7 +757,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
 		} 
 
 		if (rtp_session->timer.interval) {
-			check = (uint8_t)(switch_core_timer_check(&rtp_session->timer, &diff) == SWITCH_STATUS_SUCCESS);
+			check = (uint8_t)(switch_core_timer_check(&rtp_session->timer) == SWITCH_STATUS_SUCCESS);
 		}
 
 		if (check) {
@@ -781,7 +780,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
 		
 		if (status == SWITCH_STATUS_BREAK || bytes == 0) {
 			if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_DATAWAIT)) {
-				switch_yield(diff * 500);
+				switch_yield((rtp_session->ms_per_packet / 1000) * 750);
 				continue;
 			}
 			return 0;