Index: ammosreader/AbstractAmmosReader.py
===================================================================
--- ammosreader/AbstractAmmosReader.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ ammosreader/AbstractAmmosReader.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -8,4 +8,6 @@
 from ammosreader.AmmosContainer import AmmosContainer
 from ammosreader.AmmosConstants import FrameType
+
+logging.basicConfig(filename='ammos.log', level=logging.DEBUG)
 
 
@@ -96,5 +98,5 @@
             return None
 
-        logging.info("Current global frame header %s", current_global_frame_header)
+        # logging.info("Current global frame header %s", current_global_frame_header)
         return current_global_frame_header
 
Index: ammosreader/AmmosAudioDataBody.py
===================================================================
--- ammosreader/AmmosAudioDataBody.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ ammosreader/AmmosAudioDataBody.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -10,10 +10,10 @@
         self.__samples_per_channel = samples_per_channel
         self.__sample_size = sample_size
-        self.__data = pcm_data
+        self.__payload = pcm_data
 
     @property
-    def data(self):
+    def payload(self):
         """I return the raw pcm data with channels interweaved."""
-        return self.__data
+        return self.__payload
 
     def pcm_for_channel(self, channel_number):
@@ -21,8 +21,8 @@
         start_offset = channel_number * self.__sample_size
         step = self.__sample_size * self.__number_of_channels
-        end = (len(self.__data) // step) * step
+        end = (len(self.__payload) // step) * step
         channel_bytes = b""
         for each in range(start_offset, end, step):
-            channel_bytes += self.__data[each:each+self.__sample_size]
+            channel_bytes += self.__payload[each:each+self.__sample_size]
         return channel_bytes
 
@@ -32,3 +32,3 @@
                 "\nSamples per channel:" + str(self.__samples_per_channel) +
                 "\nSample size:" + str(self.__sample_size) +
-                "\nData size:" + str(len(self.__data)))
+                "\nData size:" + str(len(self.__payload)))
Index: ammosreader/AmmosContainer.py
===================================================================
--- ammosreader/AmmosContainer.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ ammosreader/AmmosContainer.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -30,5 +30,15 @@
 
     def frequencies(self):
-        return set(list(filter(lambda frame: frame.global_frame_body.data_header.frequency, self.__global_frames)))
+        """I return a list of unique frequencies inside this container."""
+        return list({each.global_frame_body.data_header.frequency for each in self.__global_frames})
+
+    def frame_types(self):
+        return list({each.global_frame_header.frame_type for each in self.__global_frames})
+
+    def frame_sizes(self):
+        return list({each.global_frame_header.frame_length*4 for each in self.__global_frames})
+
+    def is_homogenic(self):
+        return (len(self.frame_sizes()) == 1) and (len(self.frame_types()) == 1)
 
     def __str__(self):
Index: ammosreader/AmmosGlobalFrameBody.py
===================================================================
--- ammosreader/AmmosGlobalFrameBody.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ ammosreader/AmmosGlobalFrameBody.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -29,13 +29,5 @@
         self.__data_body = data_bytes
 
-    def data_bytes_only(self):
-
-        byte_string = b""
-
-        for each_block in self.data_body:
-            if not each_block:
-                print("Block is nil")
-
-            byte_string += each_block.data
-
-        return byte_string
+    def payload(self):
+        """I return the payload only."""
+        return b"".join([each_block.data for each_block in self.data_body])
Index: ammosreader/AmmosGlobalFrameHeader.py
===================================================================
--- ammosreader/AmmosGlobalFrameHeader.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ ammosreader/AmmosGlobalFrameHeader.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -1,7 +1,11 @@
+"""I provide an AMMOS global frame header."""
 import struct
+import logging
+
+logging.basicConfig(filename='ammos.log', level=logging.DEBUG)
 
 
 class AmmosGlobalFrameHeader():
-
+    """I implement an AMMOS global frame header."""
     MAGIC_WORD = "726574fb"
     HEADER_SIZE = 24
@@ -9,8 +13,13 @@
     @classmethod
     def from_bytes(cls, bytes):
+        """I create a new AmmosGlobalFrameHeader from bytes."""
+        assert len(bytes) == cls.HEADER_SIZE
 
         elements = struct.unpack('<4s4s4s4s4s4s', bytes)
 
         magic_word = elements[0].hex()
+
+        if magic_word != cls.MAGIC_WORD:
+            return None
 
         frame_length = (int.from_bytes(elements[1], byteorder='little')*4)
@@ -28,7 +37,7 @@
 
     def __init__(self, magic_word, frame_length, running_frame_number, frame_type, data_header_length, reserved):
-
+        """I return a new instance of myself initialized with above parameters."""
         if magic_word != type(self).MAGIC_WORD:
-            print("Wrong magic word")
+            logging.error("Wrong magic word found")
             self.magic_word = magic_word
         else:
@@ -41,4 +50,5 @@
 
     def __str__(self):
+        """I return the string representation of myself."""
         output = ("Global frame header info\n" +
                   "------------------------\n" +
@@ -49,5 +59,2 @@
                   "Data header length:" + str(self.data_header_length) + "\n")
         return output
-
-    def size(self):
-        return 24
Index: ammosreader/AmmosIFDataBlock.py
===================================================================
--- ammosreader/AmmosIFDataBlock.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ ammosreader/AmmosIFDataBlock.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -10,4 +10,4 @@
 
     @property
-    def data(self):
+    def payload(self):
         return self.__data
Index: ammosreader/AmmosIFDataBody.py
===================================================================
--- ammosreader/AmmosIFDataBody.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ ammosreader/AmmosIFDataBody.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -21,4 +21,4 @@
 
     @property
-    def data(self):
-        return b"".join([each.data for each in self.data_blocks])
+    def payload(self):
+        return b"".join([each.payload for each in self.data_blocks])
Index: ammosreader/AmmosIFReader.py
===================================================================
--- ammosreader/AmmosIFReader.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ ammosreader/AmmosIFReader.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -103,4 +103,4 @@
         return AmmosGlobalFrameBody(if_data_header, if_data_body)
 
-    def data(self):
-        return b"".join([each.global_frame_body.data_body.data for each in self.container.global_frames])
+    def payload(self):
+        return b"".join([each.global_frame_body.data_body.payload for each in self.container.global_frames])
Index: sample_scripts/audio_reader.py
===================================================================
--- sample_scripts/audio_reader.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ sample_scripts/audio_reader.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -1,9 +1,6 @@
 import sys
-import os
 import io
 from pydub import AudioSegment
 from pydub.playback import play
-
-sys.path.append('../src/')
 
 from ammosreader.AmmosAudioReader import AmmosAudioReader
@@ -23,4 +20,8 @@
     print("Sample rate:", dat_file.container.global_frames[0].global_frame_body.data_header.sample_rate)
     print("Container size:", dat_file.container.size())
+    print("Frequencies", dat_file.container.frequencies())
+    print("Frame types:", dat_file.container.frame_types())
+    print("Frame sizes:", dat_file.container.frame_sizes())
+    print("Homogenic:", dat_file.container.is_homogenic())
     pcm_data = dat_file.pcm_for_channel(0)
     print("PCM data size total:", len(pcm_data))
Index: sample_scripts/iqdw_reader.py
===================================================================
--- sample_scripts/iqdw_reader.py	(revision 809cb1603ded0de64dbfb27f1cee38fa8e392e8e)
+++ sample_scripts/iqdw_reader.py	(revision 6d0f203c72c4b9addbb6f5ab435afc5b784aece1)
@@ -18,3 +18,6 @@
 
     dat_file.read_all_frames_left()
-    print(len(dat_file.data()))
+    print("Frequencies", dat_file.container.frequencies())
+    print("Frame types:", dat_file.container.frame_types())
+    print("Frame sizes:", dat_file.container.frame_sizes())
+    print("Homogenic:", dat_file.container.is_homogenic())
