diff --git a/README b/README
index 4eb72cf106cc9c9a0f6a15450a691dc24ed8f6e1..9051216825c2ffb43ea0709b89e34a895e939bd7 100644
--- a/README
+++ b/README
@@ -22,6 +22,9 @@ parsing use the ``PacketStream`` class as an iterator.
         <Packet apid=826 seqid=13072 stamp=2015-10-13 00:22:04.042798>
     >>> packets = list(stream)
     >>> first, last, info = stream.info()
+    >>> print("First:{}\nLast:{}".format(first, last))
+        First:2015-10-13 00:22:04.042798
+        Last:2015-10-13 02:04:58.107582
     >>> print info
         defaultdict(<function edosl0util.stream.<lambda>>,
                 {800: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
diff --git a/edosl0util/cli.py b/edosl0util/cli.py
index 262c667ce6a38994dd8218be017a430405587f01..51059c4c270a52698dce30964fc5899fbea61474 100644
--- a/edosl0util/cli.py
+++ b/edosl0util/cli.py
@@ -80,9 +80,10 @@ def cmd_info():
             first = min(packet.stamp, first)
             last = max(packet.stamp, last)
     total = 0
+    first, last, info = packets.info()
     LOG.info("First: %s", first)
     LOG.info("Last: %s", last)
-    for apid, dat in packets.info().items():
+    for apid, dat in info.items():
         total += dat['count']
         LOG.info("%d: count=%d missing=%d", apid, dat['count'], dat['num_missing'])
     LOG.info("{} total packets".format(total))
diff --git a/edosl0util/stream.py b/edosl0util/stream.py
index bb5bda63c91f2a1100edfaec564777496a26e9e0..f06ac8491dfa52e0b46581bdda164922c61d2f07 100644
--- a/edosl0util/stream.py
+++ b/edosl0util/stream.py
@@ -170,8 +170,12 @@ class PacketStream(object):
         """
         self._stream = jpss_full_stream(fobj)
         self._seek_cache = deque()
+        self._first = None
+        self._last = None
         self._apid_info = defaultdict(
-                lambda: {'count': 0, 'last_seqid': self.SEQID_NOTSET, 'num_missing': 0})
+                lambda: {'count': 0,
+                         'last_seqid': self.SEQID_NOTSET,
+                         'num_missing': 0})
         self._fail_on_missing = fail_on_missing
 
     def __iter__(self):
@@ -199,6 +203,15 @@ class PacketStream(object):
     def _update_info(self, packet):
         have_missing = False
         apid = self._apid_info[packet.apid]
+        if packet.stamp:
+            if self._first is None:
+                self._first = packet.stamp
+            else:
+                self._first = min(packet.stamp, self._first)
+            if self._last is None:
+                self._last = packet.stamp
+            else:
+                self._last = max(packet.stamp, self._last)
         apid['count'] += 1
         if apid['last_seqid'] != self.SEQID_NOTSET:
             if packet.seqid > apid['last_seqid']:
@@ -211,7 +224,7 @@ class PacketStream(object):
         return have_missing
 
     def info(self):
-        return self._apid_info
+        return self._first, self._last, self._apid_info
 
     def seek_to(self, stamp, apid=None):
         """