diff --git a/y2022/control_loops/superstructure/intake_plotter.ts b/y2022/control_loops/superstructure/intake_plotter.ts
index 592d85f..8904d8b 100644
--- a/y2022/control_loops/superstructure/intake_plotter.ts
+++ b/y2022/control_loops/superstructure/intake_plotter.ts
@@ -9,7 +9,7 @@
 const DEFAULT_WIDTH = AosPlotter.DEFAULT_WIDTH * 5 / 2;
 const DEFAULT_HEIGHT = AosPlotter.DEFAULT_HEIGHT * 3;
 
-export function plotIntake(conn: Connection, element: Element) : void {
+export function plotIntakeFront(conn: Connection, element: Element) : void {
   const aosPlotter = new AosPlotter(conn);
   const goal = aosPlotter.addMessageSource('/superstructure', 'y2022.control_loops.superstructure.Goal');
   const output = aosPlotter.addMessageSource('/superstructure', 'y2022.control_loops.superstructure.Output');
@@ -30,19 +30,6 @@
   positionPlotFront.addMessageLine(status, ['intake_front', 'goal_velocity']).setColor(ORANGE).setPointSize(4.0);
   positionPlotFront.addMessageLine(status, ['intake_front', 'estimator_state', 'position']).setColor(CYAN).setPointSize(1.0);
 
-  const positionPlotBack =
-      aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
-  positionPlotBack.plot.getAxisLabels().setTitle('Position');
-  positionPlotBack.plot.getAxisLabels().setXLabel(TIME);
-  positionPlotBack.plot.getAxisLabels().setYLabel('rad');
-  positionPlotBack.plot.setDefaultYRange([-1.0, 2.0]);
-
-  positionPlotBack.addMessageLine(status, ['intake_back', 'position']).setColor(GREEN).setPointSize(4.0);
-  positionPlotBack.addMessageLine(status, ['intake_back', 'velocity']).setColor(PINK).setPointSize(1.0);
-  positionPlotBack.addMessageLine(status, ['intake_back', 'goal_position']).setColor(RED).setPointSize(4.0);
-  positionPlotBack.addMessageLine(status, ['intake_back', 'goal_velocity']).setColor(ORANGE).setPointSize(4.0);
-  positionPlotBack.addMessageLine(status, ['intake_back', 'estimator_state', 'position']).setColor(CYAN).setPointSize(1.0);
-
   const voltagePlotFront =
       aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
   voltagePlotFront.plot.getAxisLabels().setTitle('Voltage');
@@ -55,6 +42,35 @@
   voltagePlotFront.addMessageLine(status, ['intake_front', 'position_power']).setColor(BROWN).setPointSize(1.0);
   voltagePlotFront.addMessageLine(status, ['intake_front', 'velocity_power']).setColor(CYAN).setPointSize(1.0);
   voltagePlotFront.addMessageLine(robotState, ['voltage_battery']).setColor(GREEN).setPointSize(1.0);
+}
+
+export function plotIntakeBack(conn: Connection, element: Element) : void {
+  const aosPlotter = new AosPlotter(conn);
+  const goal = aosPlotter.addMessageSource('/superstructure', 'y2022.control_loops.superstructure.Goal');
+  const output = aosPlotter.addMessageSource('/superstructure', 'y2022.control_loops.superstructure.Output');
+  const status = aosPlotter.addMessageSource('/superstructure', 'y2022.control_loops.superstructure.Status');
+  const robotState = aosPlotter.addMessageSource('/aos', 'aos.RobotState');
+
+  // Robot Enabled/Disabled and Mode
+  const positionPlotFront =
+      aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
+  positionPlotFront.plot.getAxisLabels().setTitle('Position');
+  positionPlotFront.plot.getAxisLabels().setXLabel(TIME);
+  positionPlotFront.plot.getAxisLabels().setYLabel('rad');
+  positionPlotFront.plot.setDefaultYRange([-1.0, 2.0]);
+
+  const positionPlotBack =
+      aosPlotter.addPlot(element, [DEFAULT_WIDTH, DEFAULT_HEIGHT / 2]);
+  positionPlotBack.plot.getAxisLabels().setTitle('Position');
+  positionPlotBack.plot.getAxisLabels().setXLabel(TIME);
+  positionPlotBack.plot.getAxisLabels().setYLabel('rad');
+  positionPlotBack.plot.setDefaultYRange([-1.0, 2.0]);
+
+  positionPlotBack.addMessageLine(status, ['intake_back', 'position']).setColor(GREEN).setPointSize(4.0);
+  positionPlotBack.addMessageLine(status, ['intake_back', 'velocity']).setColor(PINK).setPointSize(1.0);
+  positionPlotBack.addMessageLine(status, ['intake_back', 'goal_position']).setColor(RED).setPointSize(4.0);
+  positionPlotBack.addMessageLine(status, ['intake_back', 'goal_velocity']).setColor(ORANGE).setPointSize(4.0);
+  positionPlotBack.addMessageLine(status, ['intake_back', 'estimator_state', 'position']).setColor(CYAN).setPointSize(1.0);
 
 
   const voltagePlotBack =
