diff --git a/frc971/actions/action.h b/frc971/actions/action.h
new file mode 100644
index 0000000..fc88435
--- /dev/null
+++ b/frc971/actions/action.h
@@ -0,0 +1,68 @@
+#include <stdio.h>
+
+#include "aos/common/control_loop/Timing.h"
+#include "aos/common/logging/logging.h"
+#include "aos/common/network/team_number.h"
+
+#include "frc971/constants.h"
+
+namespace frc971 {
+namespace actions {
+
+template <class T>
+class ActionBase {
+ public:
+ 	 ActionBase (T* acq)
+	 	 : action_q_(acq) {}
+
+  virtual void RunAction() = 0;
+
+  void Run () {
+  	  action_q_->goal.FetchLatest();
+    while (!action_q_->goal.get()) {
+      action_q_->goal.FetchNextBlocking();
+    }
+
+    if (!action_q_->status.MakeWithBuilder().running(false)
+            .Send()) {
+      LOG(ERROR, "Failed to send the status.\n");
+    }
+    while (true) {
+      while (!action_q_->goal->run) {
+        LOG(INFO, "Waiting for an action request.\n");
+        action_q_->goal.FetchNextBlocking();
+      }
+      LOG(INFO, "Starting action\n");
+      if (!action_q_->status.MakeWithBuilder().running(
+              true).Send()) {
+        LOG(ERROR, "Failed to send the status.\n");
+      }
+      RunAction();
+      if (!action_q_->status.MakeWithBuilder().running(
+              false).Send()) {
+        LOG(ERROR, "Failed to send the status.\n");
+      }
+
+      while (action_q_->goal->run) {
+        LOG(INFO, "Waiting for the action to be stopped.\n");
+        action_q_->goal.FetchNextBlocking();
+      }
+    }
+  }
+  // Returns true if the action should be canceled.
+  bool ShouldCancel() {
+    action_q_->goal.FetchLatest();
+    bool ans = !action_q_->goal->run;
+    if (ans) {
+      LOG(INFO, "Time to exit auto mode\n");
+    }
+    return ans;
+  }
+
+ protected:
+  T* action_q_;
+};
+
+}  // namespace actions
+}  // namespace frc971
+  	  
diff --git a/frc971/actions/actions.gyp b/frc971/actions/actions.gyp
new file mode 100644
index 0000000..931d847
--- /dev/null
+++ b/frc971/actions/actions.gyp
@@ -0,0 +1,62 @@
+{
+  'targets': [
+    {
+      'target_name': 'shoot_action_queue',
+      'type': 'static_library',
+      'sources': ['shoot_action.q'],
+      'variables': {
+        'header_path': 'frc971/actions',
+      },
+      'dependencies': [
+        '<(AOS)/common/common.gyp:queues',
+      ],
+      'export_dependent_settings': [
+        '<(AOS)/common/common.gyp:queues',
+      ],
+      'includes': ['../../aos/build/queues.gypi'],
+    },
+	{
+	  'target_name': 'action',
+      'type': 'static_library',
+      'dependencies': [
+        '<(DEPTH)/frc971/frc971.gyp:constants',
+        '<(AOS)/common/common.gyp:timing',
+        '<(AOS)/build/aos.gyp:logging',
+		],
+      'export_dependent_settings': [
+        '<(DEPTH)/frc971/frc971.gyp:constants',
+        '<(AOS)/common/common.gyp:timing',
+        '<(AOS)/build/aos.gyp:logging',
+	  ]
+	},
+    {
+      'target_name': 'shoot_action_lib',
+      'type': 'static_library',
+      'sources': [
+        'shoot_action.cc',
+      ],
+      'dependencies': [
+        'shoot_action_queue',
+        '<(DEPTH)/frc971/frc971.gyp:constants',
+        '<(AOS)/common/common.gyp:time',
+        '<(AOS)/common/common.gyp:timing',
+        '<(AOS)/build/aos.gyp:logging',
+        '<(DEPTH)/frc971/control_loops/shooter/shooter.gyp:shooter_loop',
+        '<(DEPTH)/frc971/control_loops/claw/claw.gyp:claw_loop',
+      ],
+    },
+    {
+      'target_name': 'shoot_action',
+      'type': 'executable',
+      'sources': [
+        'shoot_action_main.cc',
+      ],
+      'dependencies': [
+        '<(AOS)/linux_code/linux_code.gyp:init',
+        'shoot_action_queue',
+        'shoot_action_lib',
+		'action',
+      ],
+    },
+  ],
+}
diff --git a/frc971/actions/shoot_action.cc b/frc971/actions/shoot_action.cc
new file mode 100644
index 0000000..71698a4
--- /dev/null
+++ b/frc971/actions/shoot_action.cc
@@ -0,0 +1,111 @@
+#include "aos/common/control_loop/Timing.h"
+#include "aos/common/logging/logging.h"
+
+#include "frc971/actions/shoot_action.h"
+#include "frc971/control_loops/shooter/shooter.q.h"
+#include "frc971/control_loops/claw/claw.q.h"
+#include "frc971/constants.h"
+
+namespace frc971 {
+namespace actions {
+
+ShootAction::ShootAction(actions::ShootActionQueueGroup* s)
+    : actions::ActionBase<actions::ShootActionQueueGroup>(s) {}
+
+void ShootAction::RunAction() {
+  if (!control_loops::shooter_queue_group.goal.MakeWithBuilder().shot_power(
+          shoot_action.goal->shot_power)
+          .shot_requested(false).unload_requested(false).load_requested(false)
+          .Send()) {
+    LOG(ERROR, "Failed to send the shoot action\n");
+    return;
+  }
+
+  if (!control_loops::claw_queue_group.goal.MakeWithBuilder().bottom_angle(
+          shoot_action.goal->shot_angle)
+          .separation_angle(0.0).intake(2.0).centering(1.0).Send()) {
+    LOG(WARNING, "sending claw goal failed\n");
+    return;
+  }
+
+  // Make sure we have the latest statuses.
+  control_loops::shooter_queue_group.status.FetchLatest();
+  control_loops::claw_queue_group.status.FetchLatest();
+  while (true) {
+    // Make sure that both the shooter and claw have reached the necessary
+    // states.
+    if (control_loops::shooter_queue_group.status->ready &&
+        control_loops::claw_queue_group.status->done) {
+      LOG(INFO, "Claw and Shooter ready for shooting.\n");
+      // TODO(james): Get realer numbers for shooter_action.
+      break;
+    }
+
+    // Wait until we have a new status.
+    control_loops::shooter_queue_group.status.FetchNextBlocking();
+    control_loops::claw_queue_group.status.FetchNextBlocking();
+
+    if (ShouldCancel()) return;
+  }
+
+  const frc971::constants::Values& values = frc971::constants::GetValues();
+
+  // Open up the claw in preparation for shooting.
+  if (!control_loops::claw_queue_group.goal.MakeWithBuilder().bottom_angle(
+          shoot_action.goal->shot_angle)
+          .separation_angle(values.shooter_action.claw_separation_goal)
+          .intake(2.0).centering(1.0).Send()) {
+    LOG(WARNING, "sending claw goal failed\n");
+    return;
+  }
+
+  if (ShouldCancel()) return;
+
+  // Make sure we have the latest status.
+  control_loops::claw_queue_group.status.FetchLatest();
+  while (true) {
+    if (control_loops::claw_queue_group.status->separation >
+        values.shooter_action.claw_shooting_separation) {
+      LOG(INFO, "Opened up enough to shoot.\n");
+      break;
+    }
+
+    // Wait until we have a new status.
+    control_loops::claw_queue_group.status.FetchNextBlocking();
+
+    if (ShouldCancel()) return;
+  }
+
+  // Shoot!
+  if (!control_loops::shooter_queue_group.goal.MakeWithBuilder().shot_power(
+          shoot_action.goal->shot_power)
+          .shot_requested(true).unload_requested(false).load_requested(false)
+          .Send()) {
+    LOG(WARNING, "sending shooter goal failed\n");
+    return;
+  }
+
+  if (ShouldCancel()) return;
+
+  // Make sure that we have the latest shooter status.
+  control_loops::shooter_queue_group.status.FetchLatest();
+  // Get the number of shots fired up to this point. This should not be updated
+  // again for another few cycles.
+  int previous_shots = control_loops::shooter_queue_group.status->shots;
+  while (true) {
+    if (control_loops::shooter_queue_group.status->shots > previous_shots) {
+      LOG(INFO, "Shot succeeded!\n");
+      break;
+    }
+
+    // Wait until we have a new status.
+    control_loops::shooter_queue_group.status.FetchNextBlocking();
+
+    if (ShouldCancel()) return;
+  }
+
+  return;
+}
+
+}  // namespace actions
+}  // namespace frc971
diff --git a/frc971/actions/shoot_action.h b/frc971/actions/shoot_action.h
new file mode 100644
index 0000000..b3a20d8
--- /dev/null
+++ b/frc971/actions/shoot_action.h
@@ -0,0 +1,28 @@
+//#include "aos/common/control_loop/Timing.h"
+//#include "aos/common/logging/logging.h"
+
+#include "frc971/actions/shoot_action.q.h"
+#include "frc971/actions/action.h"
+
+//#include "frc971/control_loops/shooter/shooter.q.h"
+//#include "frc971/control_loops/claw/claw.q.h"
+//#include "frc971/constants.h"
+
+namespace frc971 {
+namespace actions {
+
+class ShootAction : public ActionBase <actions::ShootActionQueueGroup> {
+ public:
+
+	 explicit ShootAction (actions::ShootActionQueueGroup * s);
+
+  // Actually execute the action of moving the claw and shooter into position
+  // and actually firing them.
+  void RunAction();
+
+ protected:
+};
+
+}  // namespace actions
+}  // namespace frc971
+
diff --git a/frc971/autonomous/shoot_action.q b/frc971/actions/shoot_action.q
similarity index 100%
rename from frc971/autonomous/shoot_action.q
rename to frc971/actions/shoot_action.q
diff --git a/frc971/actions/shoot_action_main.cc b/frc971/actions/shoot_action_main.cc
new file mode 100644
index 0000000..31cea1f
--- /dev/null
+++ b/frc971/actions/shoot_action_main.cc
@@ -0,0 +1,21 @@
+#include "stdio.h"
+
+#include "aos/common/control_loop/Timing.h"
+#include "aos/common/time.h"
+#include "aos/linux_code/init.h"
+#include "aos/common/logging/logging.h"
+#include "frc971/actions/shoot_action.q.h"
+#include "frc971/actions/shoot_action.h"
+
+using ::aos::time::Time;
+
+int main(int /*argc*/, char * /*argv*/[]) {
+  ::aos::Init();
+
+  frc971::actions::ShootAction shoot(&::frc971::actions::shoot_action);
+  shoot.Run();
+
+  ::aos::Cleanup();
+  return 0;
+}
+
diff --git a/frc971/autonomous/autonomous.gyp b/frc971/autonomous/autonomous.gyp
index fe2abe1..91b1b2f 100644
--- a/frc971/autonomous/autonomous.gyp
+++ b/frc971/autonomous/autonomous.gyp
@@ -16,21 +16,6 @@
       'includes': ['../../aos/build/queues.gypi'],
     },
     {
-      'target_name': 'shoot_action_queue',
-      'type': 'static_library',
-      'sources': ['shoot_action.q'],
-      'variables': {
-        'header_path': 'frc971/autonomous',
-      },
-      'dependencies': [
-        '<(AOS)/common/common.gyp:queues',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/common.gyp:queues',
-      ],
-      'includes': ['../../aos/build/queues.gypi'],
-    },
-    {
       'target_name': 'auto_lib',
       'type': 'static_library',
       'sources': [
@@ -38,7 +23,6 @@
       ],
       'dependencies': [
         'auto_queue',
-        'shoot_action_lib',
         '<(AOS)/common/common.gyp:controls',
         '<(DEPTH)/frc971/control_loops/drivetrain/drivetrain.gyp:drivetrain_loop',
         '<(DEPTH)/frc971/frc971.gyp:constants',
@@ -52,22 +36,6 @@
       ],
     },
     {
-      'target_name': 'shoot_action_lib',
-      'type': 'static_library',
-      'sources': [
-        'shoot_action.cc',
-      ],
-      'dependencies': [
-        'shoot_action_queue',
-        '<(DEPTH)/frc971/frc971.gyp:constants',
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/common.gyp:timing',
-        '<(AOS)/build/aos.gyp:logging',
-        '<(DEPTH)/frc971/control_loops/shooter/shooter.gyp:shooter_loop',
-        '<(DEPTH)/frc971/control_loops/claw/claw.gyp:claw_loop',
-      ],
-    },
-    {
       'target_name': 'auto',
       'type': 'executable',
       'sources': [
diff --git a/frc971/autonomous/shoot_action.cc b/frc971/autonomous/shoot_action.cc
deleted file mode 100644
index 3fe3b76..0000000
--- a/frc971/autonomous/shoot_action.cc
+++ /dev/null
@@ -1,156 +0,0 @@
-#include "aos/common/control_loop/Timing.h"
-#include "aos/common/logging/logging.h"
-
-#include "frc971/autonomous/shoot_action.q.h"
-#include "frc971/control_loops/shooter/shooter.q.h"
-#include "frc971/control_loops/claw/claw.q.h"
-#include "frc971/constants.h"
-
-namespace frc971 {
-namespace actions {
-
-class ShootAction {
- public:
-  void Run() {
-    ::frc971::actions::shoot_action.goal.FetchLatest();
-    while (!::frc971::actions::shoot_action.goal.get()) {
-      ::frc971::actions::shoot_action.goal.FetchNextBlocking();
-    }
-
-    if (!::frc971::actions::shoot_action.status.MakeWithBuilder().running(false)
-            .Send()) {
-      LOG(ERROR, "Failed to send the status.\n");
-    }
-    while (true) {
-      while (!::frc971::actions::shoot_action.goal->run) {
-        LOG(INFO, "Waiting for an action request.\n");
-        ::frc971::actions::shoot_action.goal.FetchNextBlocking();
-      }
-      LOG(INFO, "Starting action\n");
-      if (!::frc971::actions::shoot_action.status.MakeWithBuilder().running(
-              true).Send()) {
-        LOG(ERROR, "Failed to send the status.\n");
-      }
-      RunAction();
-      if (!::frc971::actions::shoot_action.status.MakeWithBuilder().running(
-              false).Send()) {
-        LOG(ERROR, "Failed to send the status.\n");
-      }
-
-      while (::frc971::actions::shoot_action.goal->run) {
-        LOG(INFO, "Waiting for the action to be stopped.\n");
-        ::frc971::actions::shoot_action.goal.FetchNextBlocking();
-      }
-    }
-  }
-
-  // Actually execute the action of moving the claw and shooter into position
-  // and actually firing them.
-  void RunAction();
-
- protected:
-  // Returns true if the action should be canceled.
-  bool ShouldCancel() {
-    shoot_action.goal.FetchLatest();
-    bool ans = !::frc971::actions::shoot_action.goal->run;
-    if (ans) {
-      LOG(INFO, "Time to exit auto mode\n");
-    }
-    return ans;
-  }
-};
-
-void ShootAction::RunAction() {
-  if (!control_loops::shooter_queue_group.goal.MakeWithBuilder().shot_power(
-          shoot_action.goal->shot_power).shot_requested(false)
-          .unload_requested(false).load_requested(false).Send()) {
-    LOG(ERROR, "Failed to send the shoot action\n");
-    return;
-  }
-
-  if (!control_loops::claw_queue_group.goal.MakeWithBuilder().bottom_angle(
-          shoot_action.goal->shot_angle).separation_angle(0.0).intake(2.0)
-          .centering(1.0).Send()) {
-    LOG(WARNING, "sending claw goal failed\n");
-    return;
-  }
-
-  // Make sure we have the latest statuses.
-  control_loops::shooter_queue_group.status.FetchLatest();
-  control_loops::claw_queue_group.status.FetchLatest();
-  while (true) {
-    // Make sure that both the shooter and claw have reached the necessary
-    // states.
-    if (control_loops::shooter_queue_group.status->ready &&
-        control_loops::claw_queue_group.status->done) {
-      LOG(INFO, "Claw and Shooter ready for shooting.\n");
-      // TODO(james): Get realer numbers for shooter_action.
-      break;
-    }
-
-    // Wait until we have a new status.
-    control_loops::shooter_queue_group.status.FetchNextBlocking();
-    control_loops::claw_queue_group.status.FetchNextBlocking();
-
-    if (ShouldCancel()) return;
-  }
-
-  const frc971::constants::Values &values = frc971::constants::GetValues();
-
-  // Open up the claw in preparation for shooting.
-  if (!control_loops::claw_queue_group.goal.MakeWithBuilder().bottom_angle(
-          shoot_action.goal->shot_angle)
-          .separation_angle(values.shooter_action.claw_separation_goal)
-          .intake(2.0).centering(1.0).Send()) {
-    LOG(WARNING, "sending claw goal failed\n");
-    return;
-  }
-
-  if (ShouldCancel()) return;
-
-  // Make sure we have the latest status.
-  control_loops::claw_queue_group.status.FetchLatest();
-  while (true) {
-    if (control_loops::claw_queue_group.status->separation > values.shooter_action.claw_shooting_separation) {
-      LOG(INFO, "Opened up enough to shoot.\n");
-      break;
-    }
-
-    // Wait until we have a new status.
-    control_loops::claw_queue_group.status.FetchNextBlocking();
-
-    if (ShouldCancel()) return;
-  }
-
-  // Shoot!
-  if (!control_loops::shooter_queue_group.goal.MakeWithBuilder().shot_power(
-          shoot_action.goal->shot_power).shot_requested(true)
-          .unload_requested(false).load_requested(false).Send()) {
-    LOG(WARNING, "sending shooter goal failed\n");
-    return;
-  }
-
-  if (ShouldCancel()) return;
-  
-  // Make sure that we have the latest shooter status.
-  control_loops::shooter_queue_group.status.FetchLatest();
-  // Get the number of shots fired up to this point. This should not be updated
-  // again for another few cycles.
-  int previous_shots = control_loops::shooter_queue_group.status->shots;
-  while (true) {
-    if (control_loops::shooter_queue_group.status->shots > previous_shots) {
-      LOG(INFO, "Shot succeeded!\n");
-      break;
-    }
-
-    // Wait until we have a new status.
-    control_loops::shooter_queue_group.status.FetchNextBlocking();
-
-    if (ShouldCancel()) return;
-  }
-
-  return;
-}
-
-}  // namespace actions
-}  // namespace frc971
diff --git a/frc971/prime/prime.gyp b/frc971/prime/prime.gyp
index 2b5d600..f445b64 100644
--- a/frc971/prime/prime.gyp
+++ b/frc971/prime/prime.gyp
@@ -13,6 +13,7 @@
         '../control_loops/shooter/shooter.gyp:shooter',
         '../control_loops/shooter/shooter.gyp:shooter_lib_test',
         '../autonomous/autonomous.gyp:auto',
+        '../actions/actions.gyp:shoot_action',
         '../input/input.gyp:joystick_reader',
         '../output/output.gyp:motor_writer',
         '../input/input.gyp:sensor_receiver',
