diff --git a/aos/linux_code/starter/starter.sh b/aos/linux_code/starter/starter.sh
index 33906c3..62338af 100755
--- a/aos/linux_code/starter/starter.sh
+++ b/aos/linux_code/starter/starter.sh
@@ -17,4 +17,4 @@
 #DUMPCAP_STDOUT_FILE=$(date "/home/driver/tmp/robot_logs/stdout_dumpcap.%F_%H-%M-%S")
 #chrt -o 0 bash -c "dumpcap -i eth0 -w ${DUMPCAP_LOG_FILE} -f 'not port 8080 and not net 10.9.71.13' > ${DUMPCAP_STDOUT_FILE}" &
 
-chrt -o 0 bash -c 'while true; /home/driver/robot_code/bin/netconsole /home/driver/tmp/robot_logs/netconsole-`date +%s`; done' &
+chrt -o 0 bash -c 'while true; do /home/driver/robot_code/bin/netconsole /home/driver/tmp/robot_logs/netconsole-`date +%s`; done' &
diff --git a/bbb_cape/src/bbb/cape_manager.cc b/bbb_cape/src/bbb/cape_manager.cc
index d9b1e28..923021b 100644
--- a/bbb_cape/src/bbb/cape_manager.cc
+++ b/bbb_cape/src/bbb/cape_manager.cc
@@ -22,14 +22,14 @@
 }
 
 void CapeManager::DoReset(bool bootloader) {
-  static constexpr ::aos::time::Time kTimeout =
+  static constexpr ::aos::time::Time kWaitTime =
       ::aos::time::Time::InSeconds(0.1);
   reset_.Set(false);
-  ::aos::time::SleepFor(kTimeout);
-  custom_bootloader_.Set(bootloader);
-  ::aos::time::SleepFor(kTimeout);
+  ::aos::time::SleepFor(kWaitTime);
+  custom_bootloader_.Set(!bootloader);
+  ::aos::time::SleepFor(kWaitTime);
   reset_.Set(true);
-  ::aos::time::SleepFor(kTimeout);
+  ::aos::time::SleepFor(kWaitTime);
 }
 
 }  // namespace bbb
diff --git a/bbb_cape/src/bbb/gpios.cc b/bbb_cape/src/bbb/gpios.cc
index 0aca731..3584d06 100644
--- a/bbb_cape/src/bbb/gpios.cc
+++ b/bbb_cape/src/bbb/gpios.cc
@@ -48,6 +48,15 @@
     LOG(WARNING, "fclose(%p) failed with %d: %s\n", direction_handle, errno,
         strerror(errno));
   }
+
+  char value_path[64];
+  snprintf(value_path, sizeof(value_path),
+           "/sys/class/gpio/gpio%d/value", kernel_pin_);
+  value_handle_ = fopen(value_path, "w+");
+  if (value_handle_ == NULL) {
+    LOG(FATAL, "fopen(%s, \"rw\") failed with %d: %s\n",
+        value_path, errno, strerror(errno));
+  }
 }
 
 GpioPin::~GpioPin() {
diff --git a/bbb_cape/src/bbb/gpo.cc b/bbb_cape/src/bbb/gpo.cc
index f02ded3..d17abe7 100644
--- a/bbb_cape/src/bbb/gpo.cc
+++ b/bbb_cape/src/bbb/gpo.cc
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <errno.h>
 #include <string.h>
+#include <unistd.h>
 
 #include "aos/common/logging/logging.h"
 
@@ -12,11 +13,13 @@
     : GpioPin(bank, pin, false, initial_value) {}
 
 void Gpo::Set(bool high) {
-  rewind(value_handle_);
-  if (fputc(high ? '1' : '0', value_handle_) < 0) {
+  // TODO(brians): Figure out why this breaks it.
+  //rewind(value_handle_);
+  if (fputc(high ? '1' : '0', value_handle_) == EOF) {
     LOG(FATAL, "fputc(%c, %p) for pin (%d,%d) failed with %d: %s\n",
         high ? '1': '0', value_handle_, bank_, pin_, errno, strerror(errno));
   }
+  sync();
 }
 
 }  // namespace bbb
diff --git a/bbb_cape/src/bbb/hex_byte_reader.cc b/bbb_cape/src/bbb/hex_byte_reader.cc
index 968e771..7c6a28f 100644
--- a/bbb_cape/src/bbb/hex_byte_reader.cc
+++ b/bbb_cape/src/bbb/hex_byte_reader.cc
@@ -24,6 +24,7 @@
 
 HexByteReader::HexByteReader(const ::std::string &filename)
     : parser_status_(kParser.init()) {
+  LOG(DEBUG, "reading hex file %s\n", filename.c_str());
   if (parser_status_ == NULL) {
     LOG(FATAL, "%s parser failed to initialize.\n", kParser.name);
   }
diff --git a/bbb_cape/src/bbb/sensor_reader.cc b/bbb_cape/src/bbb/sensor_reader.cc
index 13d6add..2e40903 100644
--- a/bbb_cape/src/bbb/sensor_reader.cc
+++ b/bbb_cape/src/bbb/sensor_reader.cc
@@ -33,13 +33,13 @@
 }
 
 const DataStruct *SensorReader::ReadPacket() {
-  static constexpr ::aos::time::Time kTimeout =
-      ::aos::time::Time::InSeconds(0.5);
+  static constexpr ::aos::time::Time kResetTimeout =
+      ::aos::time::Time::InSeconds(2.5);
 
   while (true) {
-    ::aos::time::Time next_timeout = last_received_time_ + kTimeout;
+    ::aos::time::Time next_timeout = last_received_time_ + kResetTimeout;
     if (next_timeout <= ::aos::time::Time::Now()) {
-      LOG(WARNING, "too long since good packet received\n");
+      LOG(WARNING, "Too long since good packet received. Resetting.\n");
       manager_.Reset();
       ResetHappened();
     }
diff --git a/bbb_cape/src/flasher/flasher.gyp b/bbb_cape/src/flasher/flasher.gyp
index dea4e5c..2d506b8 100644
--- a/bbb_cape/src/flasher/flasher.gyp
+++ b/bbb_cape/src/flasher/flasher.gyp
@@ -16,6 +16,8 @@
       'dependencies': [
         '<(EXTERNALS):stm32flash',
         '<(AOS)/build/aos.gyp:logging',
+        '<(DEPTH)/bbb_cape/src/bbb/bbb.gyp:gpios',
+        '<(AOS)/common/common.gyp:time',
       ],
     },
   ],
diff --git a/bbb_cape/src/flasher/stm32_flasher.cc b/bbb_cape/src/flasher/stm32_flasher.cc
index ddddb1b..0f081f5 100644
--- a/bbb_cape/src/flasher/stm32_flasher.cc
+++ b/bbb_cape/src/flasher/stm32_flasher.cc
@@ -8,6 +8,7 @@
 
 #include "aos/common/logging/logging.h"
 #include "aos/common/logging/logging_impl.h"
+#include "aos/common/time.h"
 
 extern "C" {
 #include "stm32flash/parsers/parser.h"
@@ -17,11 +18,26 @@
 #include "stm32flash/init.h"
 }
 
+#include "bbb/gpo.h"
+
 int main(int argc, char **argv) {
   ::aos::logging::Init();
   ::aos::logging::AddImplementation(
       new ::aos::logging::StreamLogImplementation(stdout));
 
+  {
+    ::bbb::Gpo reset(2, 5, true);
+    ::bbb::Gpo bootloader(2, 2, false);
+    static constexpr ::aos::time::Time kWaitTime =
+        ::aos::time::Time::InSeconds(0.1);
+    reset.Set(false);
+    ::aos::time::SleepFor(kWaitTime);
+    bootloader.Set(false);
+    ::aos::time::SleepFor(kWaitTime);
+    reset.Set(true);
+    ::aos::time::SleepFor(kWaitTime);
+  }
+
   if (argc < 2) {
     fputs("Need an argument saying which target to download.\n", stderr);
     return 1;
diff --git a/frc971/input/sensor_receiver.cc b/frc971/input/sensor_receiver.cc
index eb2bb9a..80c1c9f 100644
--- a/frc971/input/sensor_receiver.cc
+++ b/frc971/input/sensor_receiver.cc
@@ -97,7 +97,7 @@
 
 int main() {
   ::aos::Init(::bbb::SensorReader::kRelativePriority);
-  ::bbb::SensorReader reader("main");
+  ::bbb::SensorReader reader("comp");
   while (true) {
     ::frc971::PacketReceived(reader.ReadPacket(), reader.GetCapeTimestamp());
   }
