diff --git a/edosl0util/cli/rdr2l0.py b/edosl0util/cli/rdr2l0.py
index e1aaca44a376550ec6df0c5633ef6738bcb97b52..e595f1c967f8dbaa7f2ebe2aeb619b3a04382ced 100644
--- a/edosl0util/cli/rdr2l0.py
+++ b/edosl0util/cli/rdr2l0.py
@@ -47,15 +47,15 @@ def main():
     util.configure_logging(args)
 
     def pdsfilename(product):
-        return 'P157{}{:%y%j%H%M%S}001.PDX'.format(product, args.created)
+        return 'P157{}XT{:%y%j%H%M%S}001.PDS'.format(product, args.created)
 
     def remove_files(files):
         [os.remove(f) for f in files]
 
     science_products = {
-        'RNSCA-RVIRS': '0826VIIRSSCIENCEAT',
-        'RCRIS-RNSCA': '1289CRISSCIENCEAAT',
-        'RATMS-RNSCA': '0515ATMSSCIENCEAAT'}
+        'RNSCA-RVIRS': '0826VIIRSSCIENCE',
+        'RCRIS-RNSCA': '1289CRISSCIENCEA',
+        'RATMS-RNSCA': '0515ATMSSCIENCEA'}
 
     file_type = os.path.basename(args.rdr[0]).split('_')[0]
     LOG.info('File type %s', file_type)
@@ -76,7 +76,7 @@ def main():
     if args.ancillary:
         for apid in (0, 8, 11):
             inputs = sorted(glob.glob('*.anc{:d}.pkts'.format(apid)))
-            product = '{:04d}AAAAAAAAAAAAA'.format(apid)
+            product = '{:04d}AAAAAAAAAAA'.format(apid)
             pdsname = pdsfilename(product)
             LOG.info("merging apid %d to %s", apid, pdsname)
             streams = [stream.jpss_packet_stream(open(f, 'rb')) for f in inputs]
diff --git a/edosl0util/jpssrdr.py b/edosl0util/jpssrdr.py
index 62e9714bccf679ca251dd4e29c722b13e488be52..d27866bebff433303bea7654aad558ef1f3c482e 100644
--- a/edosl0util/jpssrdr.py
+++ b/edosl0util/jpssrdr.py
@@ -152,7 +152,7 @@ def _generate_packet_datasets(group):
     dsnames = group.keys()
     for name in _sorted_packet_dataset_names(dsnames):
         ds = group[name]
-        yield np.array(ds)
+        yield name, np.array(ds)
 
 
 def _find_science_group(fobj):
@@ -164,7 +164,10 @@ def _find_science_group(fobj):
 
 def _rdrs_for_packet_dataset(group):
     if group:
-        for buf in _generate_packet_datasets(group):
+        for name, buf in _generate_packet_datasets(group):
+            if buf.shape[0] < c.sizeof(StaticHeader):
+                LOG.warn('Not enough bytes for %s static header', name)
+                continue
             header = StaticHeader.from_buffer(buf)
             apids = _read_apid_list(header, buf)
             yield CommonRdr(buf, header, list(apids))
@@ -222,21 +225,21 @@ def write_rdr_datasets(filepath, science=True, ancillary=True, skipfill=False):
     rdrs = rdr_datasets(filepath)
 
     if science:
-        dest = open('{}.science.pkts'.format(rdrname), 'wb')
-        for idx, rdr in enumerate(rdrs['science']):
-            LOG.debug(
-                'writing science gran %d %s-%s-%s',
-                idx, rdr.header.satellite, rdr.header.sensor, rdr.header.type_id)
-            _write_packets(rdr.packets(), dest, skipfill)
+        with open('{}.science.pkts'.format(rdrname), 'wb') as dest:
+            for idx, rdr in enumerate(rdrs['science']):
+                LOG.debug(
+                    'writing science gran %d %s-%s-%s',
+                    idx, rdr.header.satellite, rdr.header.sensor, rdr.header.type_id)
+                _write_packets(rdr.packets(), dest, skipfill)
 
     if ancillary:
         for idx, rdr in enumerate(rdrs['ancillary']):
             packets = {a.value: rdr.packets_for_apid(a.value)
                        for a in rdr.apids}
             for apid, packets in packets.items():
-                dest = open('{}.anc{}.pkts'.format(rdrname, apid), 'wb')
                 LOG.debug(
                     'writing ancillary gran %d %s-%s-%s %d',
                     idx, rdr.header.satellite, rdr.header.sensor,
                     rdr.header.type_id, apid.value)
-                _write_packets(packets, dest)
+                with open('{}.anc{}.pkts'.format(rdrname, apid), 'wb') as dest:
+                    _write_packets(packets, dest)