diff --git a/OBSW_TmTcClient.py b/OBSW_TmTcClient.py
index a930fc4db8c476c493a2b444ed0d1fc60fcc5624..522d6d93230b559b9922aa1628a6642e40499904 100644
--- a/OBSW_TmTcClient.py
+++ b/OBSW_TmTcClient.py
@@ -157,13 +157,15 @@ def setCommunicationInterface(tmtcPrinter: TmTcPrinterT) -> ComIF_T:
     communicationInterface = None
     try:
         if g.comIF == 0 and g.modeId != g.modeList.UnitTest:
-            communicationInterface = EthernetComIF(tmtcPrinter, g.tmTimeout, g.tcSendTimeoutFactor,
-                                                   g.sockSend, g.sockReceive, g.sendAddress)
+            communicationInterface = EthernetComIF(
+                tmtcPrinter=tmtcPrinter, tmTimeout=g.tmTimeout, tcTimeoutFactor=g.tcSendTimeoutFactor,
+                sendAddress=g.sendAddress, receiveAddress=g.recAddress)
         elif g.modeId != g.modeList.UnitTest:
             comPort = g.comPort
             baudRate = 115200
             g.serialTimeout = 0.05
-            communicationInterface = SerialComIF(tmtcPrinter, comPort, baudRate, g.serialTimeout)
+            communicationInterface = SerialComIF(tmtcPrinter=tmtcPrinter, comPort=comPort, baudRate=baudRate,
+                                                 serialTimeout=g.serialTimeout)
         else:
             print("Could not set up communication interface !")
             exit()
diff --git a/config/OBSW_Config.py b/config/OBSW_Config.py
index 3060081c817e31d0674de14e9489728d952beb7b..d4f1ca66dae854425a44f04958b09f084be1bb58 100644
--- a/config/OBSW_Config.py
+++ b/config/OBSW_Config.py
@@ -6,15 +6,26 @@
 @brief
     Global settings for UDP client
 """
-import socket
 import enum
 from typing import Tuple, TypeVar
 
-# Contains IP address as string and port as int
+"""
+Global type definitions
+"""
 ethernetAddressT = Tuple[str, int]
 socketType = TypeVar['socketType']
 
 
+# Mode options, set by args parser
+class modeList(enum.Enum):
+    GUIMode = 0
+    ListenerMode = 1
+    SingleCommandMode = 2
+    ServiceTestMode = 3
+    SoftwareTestMode = 4
+    UnitTest = 5
+
+
 """
 Mission/Device specific information.
 """
@@ -34,16 +45,6 @@ All global variables, set in main program with arg parser
 """
 
 
-# Mode options, set by args parser
-class modeList(enum.Enum):
-    GUIMode = 0
-    ListenerMode = 1
-    SingleCommandMode = 2
-    ServiceTestMode = 3
-    SoftwareTestMode = 4
-    UnitTest = 5
-
-
 # General Settings
 scriptMode = 1
 modeId = 0
@@ -72,7 +73,7 @@ printRawTmData = False
 # noinspection PyUnusedLocal
 def setGlobals(args):
     global recAddress, sendAddress, scriptMode, modeId, service, displayMode, comIF, comPort, serialTimeout
-    global tmTimeout, tcSendTimeoutFactor, sockSend, sockReceive, printToFile, printHkData, printRawTmData
+    global tmTimeout, tcSendTimeoutFactor, printToFile, printHkData, printRawTmData
     if args.mode == 0:
         print("GUI mode not implemented yet !")
     if args.shortDisplayMode:
@@ -100,8 +101,8 @@ def setGlobals(args):
     recAddress = recAddressToSet
     sendAddress = sendAddressToSet
     comIF = args.comIF
-    sockReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-    sockSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    # sockReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    # sockSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     modeId = modeId
     comPort = args.COM
     printHkData = args.hk
@@ -110,9 +111,3 @@ def setGlobals(args):
     displayMode = displayMode
     service = service
     printToFile = args.printFile
-
-
-def setGlobalsUnitTest():
-    global sockReceive
-    sockReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-
diff --git a/sendreceive/OBSW_CommandSenderReceiver.py b/sendreceive/OBSW_CommandSenderReceiver.py
index e50981c3df412b45f021908eb6c25386fe639646..8695b8bccc9e1db8a436b54dc3945191f0c1c889 100644
--- a/sendreceive/OBSW_CommandSenderReceiver.py
+++ b/sendreceive/OBSW_CommandSenderReceiver.py
@@ -34,17 +34,17 @@ class CommandSenderReceiver:
         self.tmTimeout = tmTimeout
 
         if isinstance(comInterface, CommunicationInterface):
-            self.comInterface = comInterface
+            self._comInterface = comInterface
         else:
             raise TypeError("Invalid communication interface type!")
 
         if isinstance(tmtcPrinter, TmTcPrinter):
-            self.tmtcPrinter = tmtcPrinter
+            self._tmtcPrinter = tmtcPrinter
         else:
             raise TypeError("Invalid TMTC Printer type!")
 
         if isinstance(tmListener, TmListener):
-            self.tmListener = tmListener
+            self._tmListener = tmListener
         else:
             raise TypeError("Invalid TM Listener type!")
 
@@ -61,8 +61,8 @@ class CommandSenderReceiver:
         self.queueEntryIsTelecommand = True
 
         # needed to store last actual tc packet from queue
-        self.lastTc = []
-        self.lastTcInfo = []
+        self.lastTc = bytearray()
+        self.lastTcInfo = dict()
         # ignore periodic packets for timeout when checking a sequence
         self.isPacketToIgnore = False
 
@@ -71,9 +71,9 @@ class CommandSenderReceiver:
         Checks for replies. If no reply is received, send telecommand again in checkForTimeout()
         :return: None
         """
-        if self.tmListener.replyEvent.is_set():
+        if self._tmListener.replyEvent.is_set():
             self.replyReceived = True
-            self.tmListener.replyEvent.clear()
+            self._tmListener.replyEvent.clear()
         else:
             if len(self.pusPacket) == 0:
                 print("Command Sender Receiver: No command has been sent yet")
@@ -90,11 +90,11 @@ class CommandSenderReceiver:
             time.sleep(waitTime)
         elif self.pusPacketInfo == "print":
             printString = self.pusPacket
-            self.tmtcPrinter.printString(printString)
+            self._tmtcPrinter.printString(printString)
         elif self.pusPacketInfo == "export":
             exportName = self.pusPacket
             if self.doPrintToFile:
-                self.tmtcPrinter.printToFile(exportName, True)
+                self._tmtcPrinter.printToFile(exportName, True)
         elif self.pusPacketInfo == "timeout":
             self.tmTimeout = self.pusPacket
         else:
@@ -114,7 +114,7 @@ class CommandSenderReceiver:
             self.elapsed_time = time.time() - self.start_time
         if self.elapsed_time > self.tmTimeout * self.tcSendTimeoutFactor:
             print("Command Sender Receiver: Timeout, sending TC again !")
-            self.comInterface.sendTelecommand(self.lastTc, self.lastTcInfo)
+            self._comInterface.sendTelecommand(self.lastTc, self.lastTcInfo)
             self.timeoutCounter = self.timeoutCounter + 1
             self.start_time = time.time()
         time.sleep(1)
diff --git a/sendreceive/OBSW_MultipleCommandsSenderReceiver.py b/sendreceive/OBSW_MultipleCommandsSenderReceiver.py
index fc3e866c21041e3ae9848fccef1acf63027cfe67..f9243b3123fc8b4b3303c5845319590eb049ee85 100644
--- a/sendreceive/OBSW_MultipleCommandsSenderReceiver.py
+++ b/sendreceive/OBSW_MultipleCommandsSenderReceiver.py
@@ -55,11 +55,11 @@ class MultipleCommandSenderReceiver(SequentialCommandSenderReceiver):
         try:
             self.sendAllQueue()
             self.handleLastRepliesListening(self.tmTimeout/2.0)
-            self.tmListener.modeOpFinished.set()
-            self.tmInfoQueue = self.tmListener.retrieveTmInfoQueue()
+            self._tmListener.modeOpFinished.set()
+            self.tmInfoQueue = self._tmListener.retrieveTmInfoQueue()
             # self.handleTcResending() Turned off for now, not needed
             if self.doPrintToFile:
-                self.tmtcPrinter.printToFile()
+                self._tmtcPrinter.printToFile()
         except (KeyboardInterrupt, SystemExit):
             print("Keyboard Interrupt or System Exit detected")
             exit()
@@ -80,7 +80,7 @@ class MultipleCommandSenderReceiver(SequentialCommandSenderReceiver):
         self.checkQueueEntry(self.tcQueue.pop())
         if self.queueEntryIsTelecommand:
             self.tcInfoQueue.append(self.pusPacketInfo)
-            self.comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
+            self._comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
             self.handleWaiting()
 
     def handleWaiting(self):
@@ -92,8 +92,8 @@ class MultipleCommandSenderReceiver(SequentialCommandSenderReceiver):
                 time.sleep(self.waitTime)
 
     def retrieveTmInfoQueue(self):
-        if self.tmListener.replyEvent.is_set():
-            return self.tmListener.tmInfoQueue
+        if self._tmListener.replyEvent.is_set():
+            return self._tmListener.tmInfoQueue
         else:
             print("Multiple Command SenderReceiver: Configuration error, reply event not set in TM listener")
 
diff --git a/sendreceive/OBSW_SequentialSenderReceiver.py b/sendreceive/OBSW_SequentialSenderReceiver.py
index c7c7e432357988473500e18fb0112eccc3c2c43f..a39966eeff11654cb1ba7fbaaf62994baa636661 100644
--- a/sendreceive/OBSW_SequentialSenderReceiver.py
+++ b/sendreceive/OBSW_SequentialSenderReceiver.py
@@ -43,8 +43,8 @@ class SequentialCommandSenderReceiver(CommandSenderReceiver):
         self.abortFlag = False
 
     def sendQueueTcAndReceiveTmSequentially(self):
-        self.tmListener.modeId = g.modeList.ServiceTestMode
-        self.tmListener.modeChangeEvent.set()
+        self._tmListener.modeId = g.modeList.ServiceTestMode
+        self._tmListener.modeChangeEvent.set()
         self.sendAndReceiveFirstPacket()
         # this flag is set in the separate thread !
         try:
@@ -62,16 +62,16 @@ class SequentialCommandSenderReceiver(CommandSenderReceiver):
                     self.start_time = time.time()
             self.checkForTimeout()
         print("Sequential SenderReceiver: All replies received!")
-        self.tmListener.modeOpFinished.set()
+        self._tmListener.modeOpFinished.set()
         if self.doPrintToFile:
             print("Sequential SenderReceiver: Exporting output to log file.")
-            self.tmtcPrinter.printToFile()
+            self._tmtcPrinter.printToFile()
         print("Listening for packages ...")
 
     def performNextTcSend(self):
-        if self.tmListener.replyEvent.is_set():
+        if self._tmListener.replyEvent.is_set():
             self.replyReceived = True
-            self.tmListener.replyEvent.clear()
+            self._tmListener.replyEvent.clear()
         # this flag is set in the separate receiver thread too
         if self.replyReceived:
             self.sendNextTelecommand()
@@ -83,7 +83,7 @@ class SequentialCommandSenderReceiver(CommandSenderReceiver):
     def sendAndReceiveFirstPacket(self):
         self.checkQueueEntry(self.tcQueue.pop())
         if self.queueEntryIsTelecommand:
-            self.comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
+            self._comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
         else:
             self.sendAndReceiveFirstPacket()
 
@@ -91,7 +91,7 @@ class SequentialCommandSenderReceiver(CommandSenderReceiver):
         self.checkQueueEntry(self.tcQueue.pop())
         if self.queueEntryIsTelecommand:
             self.start_time = time.time()
-            self.comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
+            self._comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
         elif self.tcQueue.__len__() == 0:
             # Special case: Last queue entry is not a Telecommand
             self.allRepliesReceived = True
diff --git a/sendreceive/OBSW_SingleCommandSenderReceiver.py b/sendreceive/OBSW_SingleCommandSenderReceiver.py
index 0c670dbfb4a6f48c123c707774f6f7b85e31e5dc..8280333ac196c33893b8aaaa2b5866ed5af3a9d0 100644
--- a/sendreceive/OBSW_SingleCommandSenderReceiver.py
+++ b/sendreceive/OBSW_SingleCommandSenderReceiver.py
@@ -39,14 +39,14 @@ class SingleCommandSenderReceiver(CommandSenderReceiver):
             exit()
 
     def sendSingleTcAndReceiveTm(self):
-        self.tmListener.modeId = g.modeList.SingleCommandMode
-        self.tmListener.modeChangeEvent.set()
-        self.comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
+        self._tmListener.modeId = g.modeList.SingleCommandMode
+        self._tmListener.modeChangeEvent.set()
+        self._comInterface.sendTelecommand(self.pusPacket, self.pusPacketInfo)
         while not self.replyReceived:
             # wait until reply is received
             super().checkForFirstReply()
         if self.replyReceived:
             print("Single Command SenderReceiver: Reply received")
-            self.tmListener.modeOpFinished.set()
+            self._tmListener.modeOpFinished.set()
             print("Listening for packages ...")
 
diff --git a/tc/OBSW_TcService200.py b/tc/OBSW_TcService200.py
index b37942a41a8d90407681bb55262cfe689dae9d59..ee4d20c1f047c67653cdceeef3028628a8e9e4c7 100644
--- a/tc/OBSW_TcService200.py
+++ b/tc/OBSW_TcService200.py
@@ -13,7 +13,6 @@ Run script with -s <Service or Device> -m 3 with optional -p parameter for file
 """
 from tc.OBSW_TcPacket import PUSTelecommand
 from tc.OBSW_TcPacker import tcQueueT
-from typing import Deque
 import struct
 
 
diff --git a/test/OBSW_PusServiceTest.py b/test/OBSW_PusServiceTest.py
index 3e9310d230fada96f365f1639603ce758f116cb1..0583ce939cb0c33cf8a55cd66222ef1ae8bc6db7 100644
--- a/test/OBSW_PusServiceTest.py
+++ b/test/OBSW_PusServiceTest.py
@@ -1,5 +1,6 @@
 import unittest
-from test.OBSW_UnitTest import TestService, TmInfoQueueT
+from test.OBSW_UnitTest import TestService
+from tm.OBSW_PusTm import pusTmInfoQueueT
 from tc.OBSW_TcPacker import packService17TestInto, packService5TestInto, packService2TestInto
 import config.OBSW_Config as g
 
@@ -20,7 +21,7 @@ class TestService2(TestService):
         self.miscExpected = 4
         super().performGenericAssertionTest(assertionDict)
 
-    def analyseTmInfo(self, tmInfoQueue: TmInfoQueueT, assertionDict: dict):
+    def analyseTmInfo(self, tmInfoQueue: pusTmInfoQueueT, assertionDict: dict):
         while not tmInfoQueue.__len__() == 0:
             currentTmInfo = tmInfoQueue.pop()
             # Tc verification scanning is generic and has been moved to the superclass
diff --git a/test/OBSW_UnitTest.py b/test/OBSW_UnitTest.py
index 1bc09609fbf088e590b397408b830ca0d8714452..06cfb9745b218bd4d27f6de54cb7d455958e0657 100644
--- a/test/OBSW_UnitTest.py
+++ b/test/OBSW_UnitTest.py
@@ -30,7 +30,6 @@ from collections import deque
 from typing import Deque
 
 from tc.OBSW_TcPacker import packDummyDeviceTestInto
-from tm.OBSW_PusTm import pusPacketInfoT
 from tm.OBSW_TmService1 import pusPacketInfoService1T
 from sendreceive.OBSW_TmListener import TmListener
 from abc import abstractmethod
@@ -40,7 +39,6 @@ from comIF.OBSW_Ethernet_ComIF import EthernetComIF
 from comIF.OBSW_Serial_ComIF import SerialComIF
 from config import OBSW_Config as g
 
-TmInfoQueueT = Deque[pusPacketInfoT]
 TmInfoQueueService1T = Deque[pusPacketInfoService1T]
 
 
@@ -75,12 +73,15 @@ class TestService(unittest.TestCase):
         cls.tmtcPrinter = TmTcPrinter(cls._displayMode, cls.printFile, True)
         cls.communicationInterface = None
         if g.comIF == 0:
-            cls.communicationInterface = EthernetComIF(cls.tmtcPrinter, g.tmTimeout, g.tcSendTimeoutFactor,
-                                                       g.sockSend, g.sockReceive, g.sendAddress)
+            cls.communicationInterface = EthernetComIF(
+                tmtcPrinter=cls.tmtcPrinter,tmTimeout=g.tmTimeout, tcTimeoutFactor=g.tcSendTimeoutFactor,
+                sendAddress=g.sendAddress, receiveAddress=g.recAddress)
         else:
             baudRate = 115200
-            cls.communicationInterface = SerialComIF(cls.tmtcPrinter, g.comPort, baudRate, g.serialTimeout)
-        cls.tmListener = TmListener(cls.communicationInterface, g.tmTimeout, cls.tcTimeoutFactor)
+            cls.communicationInterface = SerialComIF(
+                tmtcPrinter=cls.tmtcPrinter, comPort=g.comPort, baudRate=baudRate, serialTimeout=g.serialTimeout)
+        cls.tmListener = TmListener(
+            comInterface=cls.communicationInterface, tmTimeout=g.tmTimeout, tcTimeoutFactor=cls.tcTimeoutFactor)
         # connectToBoard()
 
     # This function should be called in each individual test to send the actual telecommands