diff --git a/vision/OpenCVWorkTask.cpp b/vision/OpenCVWorkTask.cpp
index 9d68065..f17803e 100644
--- a/vision/OpenCVWorkTask.cpp
+++ b/vision/OpenCVWorkTask.cpp
@@ -4,11 +4,13 @@
 #include <sys/mman.h>
 #include <errno.h>
 #include <string.h>
-#include <vector>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #include <arpa/inet.h>
 
+#include <vector>
+#include <iostream>
+
 #include "aos/common/time.h"
 #include "aos/atom_code/camera/Buffers.h"
 #include "aos/externals/libjpeg/include/jpeglib.h"
@@ -17,8 +19,6 @@
 
 #include "vision/OpenCVWorkTask.h"
 #include "vision/CameraProcessor.h"
-#include "vision/BinaryServer.h"
-#include "vision/PacketNotifier.h"
 #include "vision/JPEGRoutines.h"
 
 
@@ -28,10 +28,6 @@
 }  // namespace vision
 }  // namespace frc971
 
-void reciever_main(frc971::vision::PacketNotifier *notify){
-  frc971::vision::BinaryServer test(8020,notify);
-}
-
 namespace {
 void SaveImageToFile(IplImage *image, const char *filename) {
   FILE *file = fopen(filename, "w");
@@ -56,13 +52,13 @@
 #include "frc971/queues/CameraTarget.q.h"
 using frc971::vision::targets;
 
-#include <iostream>
-void sender_main(frc971::vision::PacketNotifier *notify){
-  ::aos::InitNRT();
+void sender_main(){
   ::aos::camera::Buffers buffers;
   CvSize size;
   size.width = ::aos::camera::Buffers::Buffers::kWidth;
   size.height = ::aos::camera::Buffers::Buffers::kHeight;
+  unsigned char buffer[::aos::camera::Buffers::Buffers::kWidth *
+      ::aos::camera::Buffers::Buffers::kHeight * 3];
 
   // create processing object
   ProcessorData processor(size.width, size.height, false);
@@ -73,17 +69,15 @@
     //usleep(7500);
     size_t data_size;
   	timeval timestamp_timeval;
+    LOG(DEBUG, "getting new image\n");
     const void *image = buffers.GetNext(
 		    true, &data_size, &timestamp_timeval, NULL);
     ::aos::time::Time timestamp(timestamp_timeval);
 
-    //TODO(pschuh): find proper way to cast away const for this: :(
-    // parker you prolly want const_cast<type>(var);
-    LOG(INFO, "Got new image\n");
-    unsigned char *buffer = (unsigned char *)notify->GetBuffer();
-    frc971::vision::process_jpeg(buffer,
-                                 (unsigned char *)const_cast<void *>(image),
-                                 data_size);
+    LOG(DEBUG, "Got new image\n");
+    frc971::vision::process_jpeg(
+        buffer, static_cast<unsigned char *>(const_cast<void *>(image)),
+        data_size);
 
     // build the headers on top of the buffer
     cvSetData(processor.src_header_image,
@@ -104,7 +98,7 @@
     std::vector<Target>::iterator target_it;
     Target *best_target = NULL;
     // run through the targets
-    LOG(INFO, "Found %u targets\n", processor.target_list.size());
+    LOG(DEBUG, "Found %u targets\n", processor.target_list.size());
     for(target_it = processor.target_list.begin();
         target_it != processor.target_list.end(); target_it++){
       //target_contours.push_back(*(target_it->this_contour));
@@ -119,7 +113,7 @@
     }
     // if we found one then send it on
     if (best_target != NULL) {
-      LOG(INFO, "Target is %f\n", best_target->rect.centroid.x);
+      LOG(DEBUG, "Target is %f\n", best_target->rect.centroid.x);
       targets.MakeWithBuilder()
         .percent_azimuth_off_center(
             best_target->rect.centroid.y / (double)::aos::camera::Buffers::kHeight - 0.5)
@@ -128,29 +122,17 @@
         .timestamp(timestamp.ToNSec())
         .Send();
     }
-    notify->Notify();
     //static int counter = 0;
     //if (++counter > 2) {
       //break;
     //}
   }
-  ::aos::Cleanup();
 }
 
 
 int main(int /*argc*/, char** /*argv*/){
-  frc971::vision::PacketNotifier *notify = frc971::vision::PacketNotifier::MMap(
-      ::aos::camera::Buffers::kHeight * ::aos::camera::Buffers::kWidth * 3);
-  pid_t pid = fork();
-  if(pid < 0){
-    fprintf(stderr,"%s:%d: Error in fork()\n",__FILE__,__LINE__);
-  }
-  if(pid == 0){
-    notify->RegisterSender();
-    sender_main(notify);
-  }else{
-    notify->RegisterReciever();
-    reciever_main(notify);
-  }
+  ::aos::InitNRT();
+  sender_main();
+  ::aos::Cleanup();
 }
 
