combination of bug fixes of Austin's and temp logs
diff --git a/frc971/control_loops/zeroed_joint.h b/frc971/control_loops/zeroed_joint.h
index 582d48b..cd124de 100644
--- a/frc971/control_loops/zeroed_joint.h
+++ b/frc971/control_loops/zeroed_joint.h
@@ -77,19 +77,25 @@
   double limit = is_ready ?
       12.0 : zeroed_joint_->config_data_.max_zeroing_voltage;
 
-  voltage_ = std::min(limit, voltage_);
-  voltage_ = std::max(-limit, voltage_);
-  U(0, 0) = voltage_ - old_voltage;
-
   // Make sure that reality and the observer can't get too far off.  There is a
   // delay by one cycle between the applied voltage and X_hat(2, 0), so compare
   // against last cycle's voltage.
   if (X_hat(2, 0) > last_voltage_ + 2.0) {
-    X_hat(2, 0) = last_voltage_ + 2.0;
+    //X_hat(2, 0) = last_voltage_ + 2.0;
+    voltage_ -= X_hat(2, 0) - (last_voltage_ + 2.0);
+    LOG(DEBUG, "X_hat(2, 0) = %f\n", X_hat(2, 0));
   } else if (X_hat(2, 0) < last_voltage_ -2.0) {
-    X_hat(2, 0) = last_voltage_ - 2.0;
+    //X_hat(2, 0) = last_voltage_ - 2.0;
+    voltage_ += X_hat(2, 0) - (last_voltage_ - 2.0);
+    LOG(DEBUG, "X_hat(2, 0) = %f\n", X_hat(2, 0));
   }
 
+  voltage_ = std::min(limit, voltage_);
+  voltage_ = std::max(-limit, voltage_);
+  U(0, 0) = voltage_ - old_voltage;
+  LOG(DEBUG, "abc %f\n", X_hat(2, 0) - voltage_);
+  LOG(DEBUG, "error %f\n", X_hat(0, 0) - R(0, 0));
+
   last_voltage_ = voltage_;
 }
 
@@ -380,6 +386,9 @@
   // Update the observer.
   loop_->Update(position != NULL, !output_enabled);
 
+  LOG(DEBUG, "X_hat={%f, %f, %f}\n",
+      loop_->X_hat(0, 0), loop_->X_hat(1, 0), loop_->X_hat(2, 0));
+
   capped_goal_ = false;
   // Verify that the zeroing goal hasn't run away.
   switch (state_) {