diff --git a/Tools/PyUtils/python/MetaReader.py b/Tools/PyUtils/python/MetaReader.py
index 9a6842406a6eb9997591a417288642f946a9ef28..186cd6550fda612358711dfc207dfab3af93a9dd 100644
--- a/Tools/PyUtils/python/MetaReader.py
+++ b/Tools/PyUtils/python/MetaReader.py
@@ -3,12 +3,11 @@ import logging
 msg = logging.getLogger('MetaReader')
 
 import re
-import ast
 import sys
 
-
 from PyCool import coral
 
+
 def read_metadata(filenames, file_type=None, mode='lite'):
     """
     This tool is independent of Athena framework and returns the metadata from a given file.
@@ -22,9 +21,16 @@ def read_metadata(filenames, file_type=None, mode='lite'):
     # Check if the input is a file or a list of files.
     if isinstance(filenames, basestring):
         filenames = [filenames]
+
+    # Check if fil_type is an allowed value
+    if file_type not in ('POOL', 'BS'):
+        raise NameError('Allowed values for \'file_type\' parameter are: \'POOL\' or \'BS\'')
+    else:
+        msg.info('Forced file_type: {0}'.format(file_type))
+
     # Check the value of mode parameter
-    if mode not in ['tiny', 'lite', 'full']:
-        raise NameError('Allowed values for mode are: tiny, lite or full')
+    if mode not in ('tiny', 'lite', 'full'):
+        raise NameError('Allowed values for \'mode\' parameter are: \'tiny\', \'lite\' or \'full\'')
     msg.info('Current mode used: {0}'.format(mode))
     # create the storage object for metadata.
     metaDict = {}
@@ -38,18 +44,10 @@ def read_metadata(filenames, file_type=None, mode='lite'):
 
                 if magic_file == 'root':
                     current_file_type = 'POOL'
-                    # check if ROOT module is not imported previously.
-                    if 'ROOT' not in sys.modules:
-                        global ROOT
-                        import ROOT
-
                 else:
                     current_file_type = 'BS'
-                    # check if 'eformat' module is not imported previously.
-                    if 'eformat' not in sys.modules:
-                        global eformat
-                        import eformat
-
+        else:
+            current_file_type = file_type
 
         metaDict[filename] = {
             'file_size': os.path.getsize(filename),
@@ -58,6 +56,7 @@ def read_metadata(filenames, file_type=None, mode='lite'):
         # ----------------------------------------------------------------------------------------------------------------#
         # retrieves metadata from POOL files.
         if current_file_type == 'POOL':
+            import ROOT
             from CLIDComps.clidGenerator import clidGenerator
             global clidgen
             clidgen = clidGenerator(db = None)
@@ -153,6 +152,8 @@ def read_metadata(filenames, file_type=None, mode='lite'):
         # ----------------------------------------------------------------------------------------------------------------#
         # retrieves metadata from bytestream (BS) files (RAW, DRAW)
         elif current_file_type == 'BS':
+            import eformat
+
             # store the file_type of the input filename
             metaDict[filename]['file_type'] = 'bs'
 
@@ -207,31 +208,56 @@ def read_metadata(filenames, file_type=None, mode='lite'):
                         k, v = md.split('=')
                         bs_metadata[k] = v
 
-                for key_name, fn_name in (
-                        ('Stream', 'stream'),
-                        ('Project', 'projectTag'),
-                        ('LumiBlock', 'lumiblockNumber'),
-                        ('run_number', 'runNumber'),
-                    ):
-                        if key_name in bs_metadata:
-                            # no need: already in bs metadata dict
-                            continue
-                        if hasattr(data_reader, fn_name):
-                            bs_metadata[key_name] = getattr(data_reader, fn_name)()
+
+                bs_metadata['runNumber'] = getattr(data_reader, 'runNumber')()
+                bs_metadata['lumiblockNumber'] = getattr(data_reader, 'lumiblockNumber')()
+                bs_metadata['projectTag'] = getattr(data_reader, 'projectTag')()
+                bs_metadata['stream'] = getattr(data_reader, 'stream')()
+                bs_metadata['beamType'] = getattr(data_reader, 'beamType')()
+                bs_metadata['beamEnergy'] = getattr(data_reader, 'beamEnergy')()
 
                 metaDict[filename]['evt_type'] = bs_metadata.get('evt_type', [])
                 metaDict[filename]['geometry'] = bs_metadata.get('geometry', None)
                 metaDict[filename]['conditions_tag'] = bs_metadata.get('conditions_tag', None)
-                metaDict[filename].update(bs_metadata)
+
+                # Promote up one level
+                metaDict[filename]['run_number'] = [bs_metadata.get('runNumber', None)]
+                metaDict[filename]['lumi_block'] = [bs_metadata.get('lumiblockNumber', None)]
+                metaDict[filename]['beam_type'] = [bs_metadata.get('beamType', None)]
+                metaDict[filename]['beam_energy'] = [bs_metadata.get('beamEnergy', None)]
 
                 if not data_reader.good():
                     # event-less file...
                     metaDict[filename]['run_number'].append(bs_metadata.get('run_number', 0))
                     metaDict[filename]['lumi_block'].append(bs_metadata.get('LumiBlock', 0))
 
-                if mode == 'lite':
-                    print('This is the lite version for BS files')
-                    pass
+                ievt = iter(bs)
+                evt = ievt.next()
+                evt.check()  # may raise a RuntimeError
+                stream_tags = [dict(stream_type = tag.type, stream_name = tag.name, obeys_lbk = bool(tag.obeys_lumiblock)) for tag in evt.stream_tag()]
+                metaDict[filename]['stream_tags'] = stream_tags
+                metaDict[filename]['evt_number'] = [evt.global_id()]
+                metaDict[filename]['run_type'] = [eformat.helper.run_type2string(evt.run_type())]
+
+
+                # fix for ATEAM-122
+                if len(bs_metadata.get('evt_type', '')) == 0:  # see: ATMETADATA-6
+                    evt_type = ['IS_DATA', 'IS_ATLAS']
+                    if bs_metadata.get('stream', '').startswith('physics_'):
+                        evt_type.append('IS_PHYSICS')
+                    elif bs_metadata.get('stream', '').startswith('calibration_'):
+                        evt_type.append('IS_CALIBRATION')
+                    elif bs_metadata.get('projectTag', '').endswith('_calib'):
+                        evt_type.append('IS_CALIBRATION')
+                    else:
+                        evt_type.append('Unknown')
+
+                    metaDict[filename]['evt_type'] = evt_type
+
+
+                if mode == 'full':
+                    metaDict[filename]['bs_metadata'] = bs_metadata
+
 
         # ----------------------------------------------------------------------------------------------------------------#
         # Thow an error if the user provide other file types
@@ -318,6 +344,8 @@ def __read_guid(filename):
     :param filename: the input file
     :return: the guid value
     """
+    import ROOT
+
     root_file = ROOT.TFile(filename)
     params = root_file.Get('##Params')