diff --git a/aos/events/logging/log_namer.h b/aos/events/logging/log_namer.h
index 631016b..cec7ad8 100644
--- a/aos/events/logging/log_namer.h
+++ b/aos/events/logging/log_namer.h
@@ -33,17 +33,26 @@
       aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header,
       const Node *node) = 0;
 
-  // Returns a writer for writing data logged on this channel (on the node
-  // provided in the constructor).
+  // Returns a writer for writing data from messages on this channel (on the
+  // primary node).
+  //
+  // The returned pointer will stay valid across rotations, but the object it
+  // points to will be assigned to.
   virtual DetachedBufferWriter *MakeWriter(const Channel *channel) = 0;
 
-  // Returns a writer for writing timestamps logged on this channel (on the node
-  // provided in the constructor).
+  // Returns a writer for writing timestamps from messages on this channel (on
+  // the primary node).
+  //
+  // The returned pointer will stay valid across rotations, but the object it
+  // points to will be assigned to.
   virtual DetachedBufferWriter *MakeTimestampWriter(const Channel *channel) = 0;
 
   // Returns a writer for writing timestamps delivered over the special
   // /aos/remote_timestamps/* channels.  node is the node that the timestamps
-  // are forwarded back from.
+  // are forwarded back from (to the primary node).
+  //
+  // The returned pointer will stay valid across rotations, but the object it
+  // points to will be assigned to.
   virtual DetachedBufferWriter *MakeForwardedTimestampWriter(
       const Channel *channel, const Node *node) = 0;
 
diff --git a/aos/events/logging/logfile_utils.cc b/aos/events/logging/logfile_utils.cc
index 7f53577..0403423 100644
--- a/aos/events/logging/logfile_utils.cc
+++ b/aos/events/logging/logfile_utils.cc
@@ -45,9 +45,11 @@
   *this = std::move(other);
 }
 
+// When other is destroyed "soon" (which it should be because we're getting an
+// rvalue reference to it), it will flush etc all the data we have queued up
+// (because that data will then be its data).
 DetachedBufferWriter &DetachedBufferWriter::operator=(
     DetachedBufferWriter &&other) {
-  Flush();
   std::swap(filename_, other.filename_);
   std::swap(fd_, other.fd_);
   std::swap(queued_size_, other.queued_size_);
@@ -378,7 +380,7 @@
     if (monotonic_start_time() == monotonic_clock::min_time) {
       CHECK_EQ(realtime_start_time(), realtime_clock::min_time);
       // We should only be missing the monotonic start time when logging data
-      // for remote nodes.  We don't have a good way to deteremine the remote
+      // for remote nodes.  We don't have a good way to determine the remote
       // realtime offset, so it shouldn't be filled out.
       // TODO(austin): If we have a good way, feel free to fill it out.  It
       // probably won't be better than we could do in post though with the same
diff --git a/aos/events/logging/logger.cc b/aos/events/logging/logger.cc
index caccf03..424153a 100644
--- a/aos/events/logging/logger.cc
+++ b/aos/events/logging/logger.cc
@@ -296,7 +296,7 @@
     const Node *node, int node_index,
     aos::monotonic_clock::time_point monotonic_start_time,
     aos::realtime_clock::time_point realtime_start_time) {
-  // Bail early if there the start times are already set.
+  // Bail early if the start times are already set.
   if (node_state_[node_index].monotonic_start_time !=
       monotonic_clock::min_time) {
     return false;
@@ -1194,8 +1194,7 @@
         CHECK(channel_data.message().data() != nullptr)
             << ": Got a message without data.  Forwarding entry which was "
                "not matched?  Use --skip_missing_forwarding_entries to "
-               "ignore "
-               "this.";
+               "ignore this.";
 
         if (update_time) {
           // Confirm that the message was sent on the sending node before the
diff --git a/aos/events/logging/logger.h b/aos/events/logging/logger.h
index 32c2022..a3189db 100644
--- a/aos/events/logging/logger.h
+++ b/aos/events/logging/logger.h
@@ -524,7 +524,7 @@
   // constrain our time function.
   //
   // One is simple.  The distributed clock is the average of all the clocks.
-  //   (ta + tb + tc + td) / num_nodex = t_distributed
+  //   (ta + tb + tc + td) / num_nodes = t_distributed
   //
   // The second is a bit more complicated.  Our basic time conversion function
   // is:
@@ -540,7 +540,7 @@
   // per-node times at two set distributed clock times, we will be able to
   // recreate the linear function (we know it is linear).  We can do a similar
   // thing by breaking our equation up into:
-  // 
+  //
   // [1/3  1/3  1/3  ] [ta]   [t_distributed]
   // [ 1  -1-m1  0   ] [tb] = [oab]
   // [ 1    0  -1-m2 ] [tc]   [oac]
diff --git a/aos/flatbuffers.h b/aos/flatbuffers.h
index bd095b8..bab006a 100644
--- a/aos/flatbuffers.h
+++ b/aos/flatbuffers.h
@@ -141,7 +141,7 @@
         std::string(reinterpret_cast<const char *>(other.data()), other.size());
   }
 
-  // Coppies the data from the other flatbuffer.
+  // Copies the data from the other flatbuffer.
   FlatbufferString &operator=(const Flatbuffer<T> &other) {
     data_ = std::string(other.data(), other.size());
     return *this;
diff --git a/aos/network/message_bridge_client_lib.cc b/aos/network/message_bridge_client_lib.cc
index 00040e1..bc05835 100644
--- a/aos/network/message_bridge_client_lib.cc
+++ b/aos/network/message_bridge_client_lib.cc
@@ -130,7 +130,7 @@
 
     if (configuration::ChannelIsSendableOnNode(channel, remote_node_) &&
         configuration::ChannelIsReadableOnNode(channel, event_loop_->node())) {
-      LOG(INFO) << "Reeiving channel "
+      LOG(INFO) << "Receiving channel "
                 << configuration::CleanedChannelToString(channel);
       max_size = std::max(channel->max_size(), max_size);
     }
