diff --git a/raspberry-dataserver/commsControl.py b/raspberry-dataserver/commsControl.py
index 7f6acecd0a580f5f3390abbba430a8c9dec6fda4..b721cbf7dba7a7f8fd4475eb0aa4cb61819b2c7a 100644
--- a/raspberry-dataserver/commsControl.py
+++ b/raspberry-dataserver/commsControl.py
@@ -48,8 +48,10 @@ class commsControl():
         receivingWorker.start()
         
         self.sending_ = True
-        receivingWorker = threading.Thread(target=self.sender, daemon=True)
-        receivingWorker.start()
+        self._datavalid = threading.Event()  # callback for send process
+        self._dvlock = threading.Lock()      # make callback threadsafe
+        sendingWorker = threading.Thread(target=self.sender, daemon=True)
+        sendingWorker.start()
     
     # open serial port
     def openSerial(self, port, baudrate = 115200, timeout = 2):
@@ -64,12 +66,15 @@ class commsControl():
         
     def sender(self):
         while self.sending_:
+            self._datavalid.wait()
             if not self.serial_ is None:
                 if not self.serial_.in_waiting > 0:
                     self.sendQueue(self.alarms_  ,  10)
                     self.sendQueue(self.commands_,  50)
                     self.sendQueue(self.data_    , 200)
-    
+            with self._dvlock:
+                self._datavalid.clear()
+
     def receiver(self):
         while self.receiving_:
             if not self.serial_ is None:
@@ -86,7 +91,9 @@ class commsControl():
                 with self.lock_:
                     self.timeLastTransmission_ = currentTime
                     queue[0].setSequenceSend(self.sequenceSend_)
-                    self.sendPacket(queue[0])
+                    packet = queue.popleft()
+                    self.sendPacket(packet)
+                    logging.debug(f"Sent packet: {packet}")
                     
     def getQueue(self, packetFlag):
         if   packetFlag == 0xC0:
@@ -146,6 +153,8 @@ class commsControl():
         tmpData = commsFormat.commsDATA()
         tmpData.setInformation(value)
         self.data_.append(tmpData)
+        with self._dvlock:
+            self._datavalid.set()
         
     def sendPacket(self, comms):
         logging.debug("Sending data...")
@@ -191,6 +200,7 @@ class commsControl():
             return result
         except:
             return None
+
     # callback to dependants to read the received payload
     @property
     def payloadrecv(self):
@@ -199,7 +209,7 @@ class commsControl():
     @payloadrecv.setter
     def payloadrecv(self, payload):
         self._payloadrecv.append(payload)
-        logging.info(f"Pushed {payload} to FIFO")
+        logging.debug(f"Pushed {payload} to FIFO")
         for callback in self._observers:
             # peek at the leftmost item, don't pop until receipt confirmed
             callback(self._payloadrecv[0])
@@ -210,7 +220,7 @@ class commsControl():
     def pop_payloadrecv(self):
         # from callback. confirmed receipt, pop value
         poppedval = self._payloadrecv.popleft()
-        logging.info(f"Popped {poppedval} from FIFO")
+        logging.debug(f"Popped {poppedval} from FIFO")
         if len(self._payloadrecv) > 0:
             # purge full queue if Dependant goes down when it comes back up
             for callback in self._observers:
@@ -229,6 +239,7 @@ if __name__ == "__main__" :
             self._llipacket = payload
             # pop from queue - protects against Dependant going down and not receiving packets
             self._lli.pop_payloadrecv()
+
     # get port number for arduino, mostly for debugging
     for port in list_ports.comports():
         try:
@@ -242,9 +253,12 @@ if __name__ == "__main__" :
 
     commsCtrl.payloadrecv = "testpacket1"
     commsCtrl.payloadrecv = "testpacket2"
+
     LEDs = [3,5,7]
+    for _ in range(30):
+        for led in LEDs:
+            commsCtrl.registerData(led)
+        time.sleep(5)
+
     while True:
-        pass
-#         for led in LEDs:
-#             commsCtrl.registerData(led)
-#         time.sleep(5)
+        pass
\ No newline at end of file