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)