diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py
index a5fde8a68326c841ab292c4cf0d531c7c1c4bebf..093ef809ecf35f0180bfbed7d497d53c9bf89b1e 100644
--- a/Ccs/ccs_function_lib.py
+++ b/Ccs/ccs_function_lib.py
@@ -1729,6 +1729,8 @@ def connect_tc(pool_name, host, port, protocol='PUS', drop_rx=True, timeout=10,
 #  loop to prevent too many packets are being sent over the socket in a too short time interval.
 def Tcsend_DB(cmd, *args, ack=None, pool_name=None, sleep=0., no_check=False, pkt_time=False, **kwargs):
 
+    t1 = time.time()
+
     pmgr = dbus_connection('poolmanager', communication['poolmanager'])
     if not pmgr:
         return
@@ -1741,7 +1743,12 @@ def Tcsend_DB(cmd, *args, ack=None, pool_name=None, sleep=0., no_check=False, pk
     if pool_name is None:
         pool_name = pmgr.Variables('tc_name')
 
-    return _tcsend_common(tc, apid, st, sst, sleep=sleep, pool_name=pool_name, pkt_time=pkt_time)
+    sent = _tcsend_common(tc, apid, st, sst, pool_name=pool_name, pkt_time=pkt_time)
+
+    dt = time.time() - t1
+    time.sleep(max(sleep - dt, 0))
+
+    return sent
 
 
 ##
@@ -2351,7 +2358,7 @@ def _tcsend_common(tc_bytes, apid, st, sst, sleep=0., pool_name='LIVE', pkt_time
     log_dict = dict([('st', st),('sst', sst),('ssc', ssc),('apid', apid),('timestamp', t)])
     json_string = '{} {}'.format('#SENT TC', json.dumps(log_dict))
     logger.info(json_string)
-    time.sleep(sleep)
+    # time.sleep(sleep)
     return apid, ssc, t
 
 
@@ -2690,6 +2697,9 @@ def srectohex(fname, memid, memaddr, segid, tcsend=False, outname=None, linesper
 
     linecount = 0
     while linecount < len(f) - 1:
+
+        t1 = time.time()
+
         linepacklist = []
         for n in range(linesperpack):
             if linecount >= (len(lines) - 1):
@@ -2717,12 +2727,13 @@ def srectohex(fname, memid, memaddr, segid, tcsend=False, outname=None, linesper
             memaddr += len(data)
             continue
         packetdata = struct.pack('>HII', memid, memaddr, len(data)) + data
-        PUS = Tcpack(data=packetdata, st=6, sst=2, sc=pcount, ack=0b1001)
+        PUS = Tcpack(data=packetdata, st=6, sst=2, sc=pcount, apid=apid, ack=0b1001)
         if len(PUS) > 1024:
             logger.warning('Packet length ({:}) exceeding 1024 bytes!'.format(len(PUS)))
         if tcsend:
             Tcsend_bytes(PUS, pool_name=tcsend)
-            time.sleep(sleep)
+            dt = time.time() - t1
+            time.sleep(max(sleep - dt, 0))
         else:
             with open(outname + '%04i.tc' % pcount, 'w') as ofile:
                 # ofile.write(PUS.hex.upper())
@@ -2740,7 +2751,7 @@ def srectohex(fname, memid, memaddr, segid, tcsend=False, outname=None, linesper
             fd.write('\n'.join(source_list))
         return
     packetdata = struct.pack('>HII', memid, memaddr, 12) + bytes(12)
-    PUS = Tcpack(data=packetdata, st=6, sst=2, sc=pcount, ack=0b1001)
+    PUS = Tcpack(data=packetdata, st=6, sst=2, sc=pcount, apid=apid, ack=0b1001)
     if tcsend:
         Tcsend_bytes(PUS, pool_name=tcsend)
     else:
@@ -2787,6 +2798,9 @@ def upload_srec(fname, memid, memaddr, segid, pool_name='LIVE', tcname=None, lin
 
     linecount = 0
     while linecount < len(f) - 1:
+
+        t1 = time.time()
+
         linepacklist = []
         for n in range(linesperpack):
             if linecount >= (len(lines) - 1):
@@ -2815,7 +2829,8 @@ def upload_srec(fname, memid, memaddr, segid, pool_name='LIVE', tcname=None, lin
             logger.warning('Packet length ({}) exceeding MAX_PKT_LEN of {} bytes!'.format(len(puspckt), MAX_PKT_LEN))
 
         Tcsend_bytes(puspckt, pool_name=pool_name)
-        time.sleep(sleep)
+        dt = time.time() - t1
+        time.sleep(max(sleep - dt, 0))
 
         startaddr = newstartaddr
         memaddr += len(data)