diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c
index be749de..3a1ba67 100644
--- a/gst/rtpmanager/gstrtpsession.c
+++ b/gst/rtpmanager/gstrtpsession.c
@@ -751,6 +751,9 @@ rtcp_thread (GstRtpSession * rtpsession)
   GstClockTime current_time;
   GstClockTime next_timeout;
   guint64 ntpnstime;
+  GstClock *clock;
+  GTimeVal current;
+  guint64 pipelinetime;
 
   GST_DEBUG_OBJECT (rtpsession, "entering RTCP thread");
 
@@ -789,7 +792,13 @@ rtcp_thread (GstRtpSession * rtpsession)
     current_time = gst_clock_get_time (rtpsession->priv->sysclock);
 
     /* get current NTP time */
-    get_current_times (rtpsession, NULL, &ntpnstime);
+     g_get_current_time (&current);
+     ntpnstime = GST_TIMEVAL_TO_TIME (current);
+     ntpnstime += (2208988800LL * GST_SECOND);
+
+     /* get current pipeline time */
+     clock = GST_ELEMENT_CLOCK (rtpsession);
+     pipelinetime = gst_clock_get_time (clock);
 
     /* we get unlocked because we need to perform reconsideration, don't perform
      * the timeout but get a new reporting estimate. */
@@ -798,7 +807,8 @@ rtcp_thread (GstRtpSession * rtpsession)
 
     /* perform actions, we ignore result. Release lock because it might push. */
     GST_RTP_SESSION_UNLOCK (rtpsession);
-    rtp_session_on_timeout (rtpsession->priv->session, current_time, ntpnstime);
+    rtp_session_on_timeout (rtpsession->priv->session, current_time, ntpnstime,
+        pipelinetime);
     GST_RTP_SESSION_LOCK (rtpsession);
   }
   /* mark the thread as stopped now */
@@ -1605,6 +1615,8 @@ gst_rtp_session_chain_send_rtp_common (GstPad * pad, gpointer data,
   GstClockTime timestamp;
   GstClockTime current_time;
   guint64 ntpnstime;
+  guint64 pipelinetime;
+  GstClock *clock;
 
   rtpsession = GST_RTP_SESSION (gst_pad_get_parent (pad));
   priv = rtpsession->priv;
@@ -1638,10 +1650,12 @@ gst_rtp_session_chain_send_rtp_common (GstPad * pad, gpointer data,
     ntpnstime = -1;
   }
 
+  clock = GST_ELEMENT_CLOCK (rtpsession);
+  pipelinetime = gst_clock_get_time (clock);
   current_time = gst_clock_get_time (priv->sysclock);
   ret =
       rtp_session_send_rtp (priv->session, data, is_list, current_time,
-      ntpnstime);
+      ntpnstime, pipelinetime);
   if (ret != GST_FLOW_OK)
     goto push_error;
 
diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c
index 7f39155..bb05fdd 100644
--- a/gst/rtpmanager/rtpsession.c
+++ b/gst/rtpmanager/rtpsession.c
@@ -1937,7 +1937,7 @@ ignore:
  */
 GstFlowReturn
 rtp_session_send_rtp (RTPSession * sess, gpointer data, gboolean is_list,
-    GstClockTime current_time, guint64 ntpnstime)
+    GstClockTime current_time, guint64 ntpnstime, guint64 pipelinetime)
 {
   GstFlowReturn result;
   RTPSource *source;
@@ -1967,7 +1967,7 @@ rtp_session_send_rtp (RTPSession * sess, gpointer data, gboolean is_list,
   prevsender = RTP_SOURCE_IS_SENDER (source);
 
   /* we use our own source to send */
-  result = rtp_source_send_rtp (source, data, is_list, ntpnstime);
+  result = rtp_source_send_rtp (source, data, is_list, ntpnstime, pipelinetime);
 
   if (RTP_SOURCE_IS_SENDER (source) && !prevsender)
     sess->stats.sender_sources++;
@@ -2145,6 +2145,7 @@ typedef struct
   GstBuffer *rtcp;
   GstClockTime current_time;
   guint64 ntpnstime;
+  guint64 pipelinetime;
   GstClockTime interval;
   GstRTCPPacket packet;
   gboolean is_bye;
@@ -2169,8 +2170,8 @@ session_start_rtcp (RTPSession * sess, ReportData * data)
     gst_rtcp_buffer_add_packet (data->rtcp, GST_RTCP_TYPE_SR, packet);
 
     /* get latest stats */
-    rtp_source_get_new_sr (own, data->ntpnstime, &ntptime, &rtptime,
-        &packet_count, &octet_count);
+    rtp_source_get_new_sr (own, data->ntpnstime, data->pipelinetime, &ntptime,
+        &rtptime, &packet_count, &octet_count);
     /* store stats */
     rtp_source_process_sr (own, data->current_time, ntptime, rtptime,
         packet_count, octet_count);
@@ -2401,7 +2402,7 @@ is_rtcp_time (RTPSession * sess, GstClockTime current_time, ReportData * data)
  */
 GstFlowReturn
 rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
-    guint64 ntpnstime)
+    guint64 ntpnstime, guint64 pipelinetime)
 {
   GstFlowReturn result = GST_FLOW_OK;
   GList *item;
@@ -2418,6 +2419,7 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
   data.rtcp = NULL;
   data.current_time = current_time;
   data.ntpnstime = ntpnstime;
+  data.pipelinetime = pipelinetime;
   data.is_bye = FALSE;
   data.has_sdes = FALSE;
 
diff --git a/gst/rtpmanager/rtpsession.h b/gst/rtpmanager/rtpsession.h
index 25e228b..dde40bf 100644
--- a/gst/rtpmanager/rtpsession.h
+++ b/gst/rtpmanager/rtpsession.h
@@ -292,7 +292,8 @@ GstFlowReturn   rtp_session_process_rtcp           (RTPSession *sess, GstBuffer
 
 /* processing packets for sending */
 GstFlowReturn   rtp_session_send_rtp               (RTPSession *sess, gpointer data, gboolean is_list,
-                                                    GstClockTime current_time, guint64 ntpnstime);
+                                                    GstClockTime current_time, guint64 ntpnstime,
+                                                    guint64 pipelinetime);
 
 /* stopping the session */
 GstFlowReturn   rtp_session_schedule_bye           (RTPSession *sess, const gchar *reason,
@@ -301,6 +302,6 @@ GstFlowReturn   rtp_session_schedule_bye           (RTPSession *sess, const gcha
 /* get interval for next RTCP interval */
 GstClockTime    rtp_session_next_timeout           (RTPSession *sess, GstClockTime current_time);
 GstFlowReturn   rtp_session_on_timeout             (RTPSession *sess, GstClockTime current_time,
-                                                    guint64 ntpnstime);
+                                                    guint64 ntpnstime, guint64 pipelinetime);
 
 #endif /* __RTP_SESSION_H__ */
diff --git a/gst/rtpmanager/rtpsource.c b/gst/rtpmanager/rtpsource.c
index 03e5ae5..2afec9a 100644
--- a/gst/rtpmanager/rtpsource.c
+++ b/gst/rtpmanager/rtpsource.c
@@ -1130,7 +1130,7 @@ set_ssrc (GstBuffer ** buffer, guint group, guint idx, RTPSource * src)
  */
 GstFlowReturn
 rtp_source_send_rtp (RTPSource * src, gpointer data, gboolean is_list,
-    guint64 ntpnstime)
+    guint64 ntpnstime, guint64 pipelinetime)
 {
   GstFlowReturn result;
   guint len;
@@ -1229,6 +1229,7 @@ rtp_source_send_rtp (RTPSource * src, gpointer data, gboolean is_list,
    * NTP timestamp so that we can use this info when constructing SR reports */
   src->last_rtptime = ext_rtptime;
   src->last_ntpnstime = ntpnstime;
+  src->last_pipelinetime = pipelinetime;
 
   /* push packet */
   if (!src->callbacks.push_rtp)
@@ -1395,8 +1396,8 @@ rtp_source_process_rb (RTPSource * src, GstClockTime time, guint8 fractionlost,
  */
 gboolean
 rtp_source_get_new_sr (RTPSource * src, guint64 ntpnstime,
-    guint64 * ntptime, guint32 * rtptime, guint32 * packet_count,
-    guint32 * octet_count)
+    guint64 pipelinetime, guint64 * ntptime, guint32 * rtptime,
+    guint32 * packet_count, guint32 * octet_count)
 {
   guint64 t_rtp;
   guint64 t_current_ntp;
@@ -1416,7 +1417,7 @@ rtp_source_get_new_sr (RTPSource * src, guint64 ntpnstime,
 
   if (src->clock_rate != -1) {
     /* get the diff with the SR time */
-    diff = GST_CLOCK_DIFF (src->last_ntpnstime, ntpnstime);
+    diff = GST_CLOCK_DIFF (src->last_pipelinetime, pipelinetime);
 
     /* now translate the diff to RTP time, handle positive and negative cases.
      * If there is no diff, we already set rtptime correctly above. */
diff --git a/gst/rtpmanager/rtpsource.h b/gst/rtpmanager/rtpsource.h
index 8355bc0..1195257 100644
--- a/gst/rtpmanager/rtpsource.h
+++ b/gst/rtpmanager/rtpsource.h
@@ -139,6 +139,7 @@ struct _RTPSource {
 
   GstClockTime  last_rtptime;
   GstClockTime  last_ntpnstime;
+  GstClockTime  last_pipelinetime;
 
   /* for bitrate estimation */
   guint64       bitrate;
@@ -197,7 +198,8 @@ void            rtp_source_set_rtcp_from       (RTPSource *src, GstNetAddress *a
 /* handling RTP */
 GstFlowReturn   rtp_source_process_rtp         (RTPSource *src, GstBuffer *buffer, RTPArrivalStats *arrival);
 
-GstFlowReturn   rtp_source_send_rtp            (RTPSource *src, gpointer data, gboolean is_list, guint64 ntpnstime);
+GstFlowReturn   rtp_source_send_rtp            (RTPSource *src, gpointer data, gboolean is_list,
+                                                guint64 ntpnstime, guint64 pipelinetime);
 
 /* RTCP messages */
 void            rtp_source_process_bye         (RTPSource *src, const gchar *reason);
@@ -207,9 +209,9 @@ void            rtp_source_process_rb          (RTPSource *src, GstClockTime tim
                                                 gint32 packetslost, guint32 exthighestseq, guint32 jitter,
                                                 guint32 lsr, guint32 dlsr);
 
-gboolean        rtp_source_get_new_sr          (RTPSource *src, guint64 ntpnstime, guint64 *ntptime,
-		                                guint32 *rtptime, guint32 *packet_count,
-						guint32 *octet_count);
+gboolean        rtp_source_get_new_sr          (RTPSource *src, guint64 ntpnstime, guint64 pipelinetime,
+                                                guint64 *ntptime, guint32 *rtptime, guint32 *packet_count,
+                                                guint32 *octet_count);
 gboolean        rtp_source_get_new_rb          (RTPSource *src, GstClockTime time, guint8 *fractionlost,
                                                 gint32 *packetslost, guint32 *exthighestseq, guint32 *jitter,
                                                 guint32 *lsr, guint32 *dlsr);
