Index: ammosreader/AbstractAmmosReader.py
===================================================================
--- ammosreader/AbstractAmmosReader.py	(revision 1de11fa895fecafff8913af733b4ce838d476c97)
+++ ammosreader/AbstractAmmosReader.py	(revision d6535bd3f1f9fea90622c8508ef7f1f45259b9c2)
@@ -45,4 +45,8 @@
         assert a_key not in self.__tags
         self.__tags[a_key] = a_value
+
+    def resync(self):
+        """I try to resync, when reading from source was garbled."""
+        self.source.resync()
 
     def read_all_frames_left(self):
Index: mosreader/AmmosAudioFileReader.py
===================================================================
--- ammosreader/AmmosAudioFileReader.py	(revision 1de11fa895fecafff8913af733b4ce838d476c97)
+++ 	(revision )
@@ -1,10 +1,0 @@
-from ammosreader.AmmosAudioReader import AmmosAudioReader
-
-class AmmosAudioFileReader(AmmosAudioReader):
-
-    def read_bytes(self, bytes_to_read):
-        in_bytes = self.source.read(bytes_to_read)
-        if ((not in_bytes) or (len(in_bytes) < bytes_to_read)):
-            logger.debug("Can not read all %s bytes", bytes_to_read)
-            return None
-        return in_bytes
Index: ammosreader/AmmosSocketSource.py
===================================================================
--- ammosreader/AmmosSocketSource.py	(revision 1de11fa895fecafff8913af733b4ce838d476c97)
+++ ammosreader/AmmosSocketSource.py	(revision d6535bd3f1f9fea90622c8508ef7f1f45259b9c2)
@@ -11,17 +11,27 @@
 
     def read_bytes(self, bytes_to_read):
+        """
+        I read bytes_to_read bytes from my socket. Incomplete reads get discarded.
+
+        :param bytes_to_read: the number of bytes to read
+        :type bytes_to_read: int
+
+        :return: the complete byte string or None if not all the bytes are read
+        :rtype: bytes
+        """
+
+        assert bytes_to_read > 0
         byte_array = []
         logger.info("Start reading bytes from socket")
         try:
-            while len(b''.join(byte_array)) < bytes_to_read:
-                logger.info("Remaining Bytes: %s", bytes_to_read - len(b''.join(byte_array)))
-                self.source.settimeout(5)
-                new_bytes = self.source.recv(bytes_to_read - len(b''.join(byte_array)), socket.MSG_WAITALL)
+            while len(byte_array) < bytes_to_read:
+                logger.info("Remaining Bytes: %s", bytes_to_read - len(byte_array))
+                self.source.settimeout(self.timeout)
+                new_bytes = self.source.recv(bytes_to_read - len(byte_array), socket.MSG_WAITALL)
 
                 if not new_bytes:
                     raise TimeoutError("Socket timed out while reading data")
-                logger.info("Got %s bytes of %s remaining", len(new_bytes), bytes_to_read - len(b''.join(byte_array)))
+                logger.info("Got %s bytes of %s remaining", len(new_bytes), bytes_to_read - len(byte_array))
                 byte_array.append(new_bytes)
-                print(byte_array)
         except TimeoutError:
             logger.info("Timeout error while reading from socket")
Index: ammosreader/AmmosSource.py
===================================================================
--- ammosreader/AmmosSource.py	(revision 1de11fa895fecafff8913af733b4ce838d476c97)
+++ ammosreader/AmmosSource.py	(revision d6535bd3f1f9fea90622c8508ef7f1f45259b9c2)
@@ -1,4 +1,6 @@
 from abc import ABC, abstractmethod
 from collections import deque
+from ammosreader.AmmosGlobalFrameHeader import AmmosGlobalFrameHeader
+
 
 class AmmosSource(ABC):
@@ -6,8 +8,17 @@
         self.__source = source
         self.__name = ""
+        self.__timeout = 5
+
+    @property
+    def timeout(self):
+        return self.__timeout
+
+    @timeout.setter
+    def timeout(self, a_timeout):
+        self.__timeout = a_timeout
 
     @property
     def name(self):
-        return self.__name 
+        return self.__name
 
     @name.setter
@@ -22,5 +33,5 @@
     def source(self, a_source):
         self.__source = a_source
-        
+
     @abstractmethod
     def read_bytes(self, bytes_to_read):
@@ -31,6 +42,6 @@
         while True:
             try:
-                magic_word_que.append(self.read_bytes(1))
-            except TimeOutError:
+                magic_word_queue.append(self.read_bytes(1))
+            except TimeoutError:
                 result = False
                 break
