diff --git a/aos/linux_code/logging/binary_log_file.cc b/aos/linux_code/logging/binary_log_file.cc
index e1e99b4..05b2d93 100644
--- a/aos/linux_code/logging/binary_log_file.cc
+++ b/aos/linux_code/logging/binary_log_file.cc
@@ -71,6 +71,9 @@
   }
   position_ += sizeof(LogFileMessageHeader) + r->name_size + r->message_size;
   AlignPosition();
+  if (position_ >= kPageSize) {
+    LOG(FATAL, "corrupt log file running over page size\n");
+  }
   return r;
 }
 
@@ -78,15 +81,19 @@
   msync(current_, kPageSize, MS_ASYNC | MS_INVALIDATE);
 }
 
-void LogFileAccessor::MoveToEnd() {
-  Unmap(current_);
+bool LogFileAccessor::IsLastPage() {
+  if (is_last_page_ != 0) {
+    return is_last_page_ == 2;
+  }
+
   struct stat info;
   if (fstat(fd_, &info) == -1) {
     LOG(FATAL, "fstat(%d, %p) failed with %d: %s\n", fd_, &info, errno,
         strerror(errno));
   }
-  offset_ = info.st_size - kPageSize;
-  MapNextPage();
+  bool r = offset_ == info.st_size - kPageSize;
+  is_last_page_ = r ? 2 : 1;
+  return r;
 }
 
 void LogFileAccessor::MapNextPage() {
@@ -116,6 +123,7 @@
     LOG(FATAL, "munmap(%p, %zd) failed with %d: %s. aborting\n", location,
         kPageSize, errno, strerror(errno));
   }
+  is_last_page_ = 0;
 }
 
 }  // namespace linux_code
diff --git a/aos/linux_code/logging/binary_log_file.h b/aos/linux_code/logging/binary_log_file.h
index 58aa792..0f8c3fb 100644
--- a/aos/linux_code/logging/binary_log_file.h
+++ b/aos/linux_code/logging/binary_log_file.h
@@ -93,8 +93,7 @@
   // Asynchronously syncs all open mappings.
   void Sync() const;
 
-  // TODO(brians): This won't work any more.
-  void MoveToEnd();
+  bool IsLastPage();
 
  private:
   // The size of the chunks that get mmaped/munmapped together. Large enough so
@@ -114,6 +113,9 @@
   char *current_;
   size_t position_;
 
+  // 0 = unknown, 1 = no, 2 = yes
+  int is_last_page_ = 0;
+
   void MapNextPage();
   void Unmap(void *location);
 
diff --git a/aos/linux_code/logging/binary_log_writer.cc b/aos/linux_code/logging/binary_log_writer.cc
index aa81521..67cb166 100644
--- a/aos/linux_code/logging/binary_log_writer.cc
+++ b/aos/linux_code/logging/binary_log_writer.cc
@@ -54,6 +54,8 @@
 
   output->type = LogFileMessageHeader::MessageType::kStructType;
   futex_set(&output->marker);
+
+  written_type_ids.insert(type_id);
 }
 
 int BinaryLogReaderMain() {
diff --git a/aos/linux_code/logging/log_displayer.cc b/aos/linux_code/logging/log_displayer.cc
index 7b56f35..98021b5 100644
--- a/aos/linux_code/logging/log_displayer.cc
+++ b/aos/linux_code/logging/log_displayer.cc
@@ -50,11 +50,16 @@
 
 int main(int argc, char **argv) {
   const char *filter_name = NULL;
-  size_t filter_length;
+  size_t filter_length = 0;
   log_level filter_level = INFO;
-  bool follow = false, start_at_beginning = true;
+  bool follow = false;
+  // Whether we need to skip everything until we get to the end of the file.
+  bool skip_to_end = false;
   const char *filename = "aos_log-current";
 
+  ::aos::logging::AddImplementation(
+      new ::aos::logging::StreamLogImplementation(stdout));
+
   while (true) {
     static struct option long_options[] = {
       {"name", required_argument, NULL, 'n'},
@@ -100,16 +105,16 @@
         break;
       case 'f':
         follow = true;
-        start_at_beginning = false;
+        skip_to_end = true;
         break;
       case 't':
         follow = false;
         break;
       case 'b':
-        start_at_beginning = true;
+        skip_to_end = false;
         break;
       case 'e':
-        start_at_beginning = false;
+        skip_to_end = true;
         break;
       case 'm':
         abort();
@@ -145,8 +150,9 @@
     exit(EXIT_FAILURE);
   }
   ::aos::logging::linux_code::LogFileAccessor accessor(fd, false);
-  if (!start_at_beginning) {
-    accessor.MoveToEnd();
+
+  if (skip_to_end) {
+    fputs("skipping old logs...\n", stderr);
   }
 
   const LogFileMessageHeader *msg;
@@ -166,6 +172,15 @@
       continue;
     }
 
+    if (skip_to_end) {
+      if (accessor.IsLastPage()) {
+        fputs("done skipping old logs\n", stderr);
+        skip_to_end = false;
+      } else {
+        continue;
+      }
+    }
+
     if (::aos::logging::log_gt_important(filter_level, msg->level)) continue;
     if (filter_name != NULL) {
       if (filter_length != msg->name_size) continue;
