diff --git a/quad/sw/modular_quad_pid/gen_diagram/gen_diagram b/quad/sw/modular_quad_pid/gen_diagram/gen_diagram
index 886d998d528ab88666356c6ce04079586191f741..8174dab245654da3b79d9ab54c835b93766a8b02 100755
Binary files a/quad/sw/modular_quad_pid/gen_diagram/gen_diagram and b/quad/sw/modular_quad_pid/gen_diagram/gen_diagram differ
diff --git a/quad/sw/modular_quad_pid/gen_diagram/network.dot b/quad/sw/modular_quad_pid/gen_diagram/network.dot
index 73ea4769de1d985c7f99c005f067367a4df95df8..00e5b058e18e15345720278726ff5faae6351bee 100644
--- a/quad/sw/modular_quad_pid/gen_diagram/network.dot
+++ b/quad/sw/modular_quad_pid/gen_diagram/network.dot
@@ -71,6 +71,15 @@ label="<f0>dTheta  |<f1> [Constant=0.000]"]
 label="<f0>dPhi  |<f1> [Constant=0.000]"]
 "dPsi"[shape=record
 label="<f0>dPsi  |<f1> [Constant=0.000]"]
+"P PWM Clamp"[shape=record
+label="<f0>P PWM Clamp  |<f1> --\>Bounds in |<f2> [Min=-20000.000] |<f3> [Max=20000.000]"]
+"Pitch Rate PID" -> "P PWM Clamp":f1 [label="Correction"]
+"R PWM Clamp"[shape=record
+label="<f0>R PWM Clamp  |<f1> --\>Bounds in |<f2> [Min=-20000.000] |<f3> [Max=20000.000]"]
+"Roll Rate PID" -> "R PWM Clamp":f1 [label="Correction"]
+"Y PWM Clamp"[shape=record
+label="<f0>Y PWM Clamp  |<f1> --\>Bounds in |<f2> [Min=-20000.000] |<f3> [Max=20000.000]"]
+"Yaw Rate PID" -> "Y PWM Clamp":f1 [label="Correction"]
 "VRPN X"[shape=record
 label="<f0>VRPN X  |<f1> [Constant=0.000]"]
 "VRPN Y"[shape=record
@@ -88,9 +97,9 @@ label="<f0>RC Throttle  |<f1> [Constant=0.000]"]
 "Signal Mixer"[shape=record
 label="<f0>Signal Mixer  |<f1> --\>Throttle |<f2> --\>Pitch |<f3> --\>Roll |<f4> --\>Yaw"]
 "RC Throttle" -> "Signal Mixer":f1 [label="Constant"]
-"Pitch Rate PID" -> "Signal Mixer":f2 [label="Correction"]
-"Roll Rate PID" -> "Signal Mixer":f3 [label="Correction"]
-"Yaw Rate PID" -> "Signal Mixer":f4 [label="Correction"]
+"P PWM Clamp" -> "Signal Mixer":f2 [label="Bounded"]
+"R PWM Clamp" -> "Signal Mixer":f3 [label="Bounded"]
+"Y PWM Clamp" -> "Signal Mixer":f4 [label="Bounded"]
 "Ts_angle"[shape=record
 label="<f0>Ts_angle  |<f1> [Constant=0.005]"]
 "Ts_position"[shape=record
diff --git a/quad/sw/modular_quad_pid/gen_diagram/network.png b/quad/sw/modular_quad_pid/gen_diagram/network.png
index e8f7848eff002aad2f8db70bd08ccea743ef2f10..f1203a6c4dc72f46b67c1f76e06ae6a4c93eb2d4 100644
Binary files a/quad/sw/modular_quad_pid/gen_diagram/network.png and b/quad/sw/modular_quad_pid/gen_diagram/network.png differ
diff --git a/quad/sw/modular_quad_pid/src/control_algorithm.c b/quad/sw/modular_quad_pid/src/control_algorithm.c
index f85791eb100078633488b0c122736444ec0773fb..632cde85131d83bd2a5c811c8ce3124b02abe351 100644
--- a/quad/sw/modular_quad_pid/src/control_algorithm.c
+++ b/quad/sw/modular_quad_pid/src/control_algorithm.c
@@ -68,6 +68,9 @@ int control_algorithm_init(parameter_t * ps)
     ps->theta_dot = graph_add_node_const(graph, "dTheta");
     ps->phi_dot = graph_add_node_const(graph, "dPhi");
     ps->psi_dot = graph_add_node_const(graph, "dPsi");
+    ps->clamp_d_pwmP = graph_add_node_bounds(graph, "P PWM Clamp");
+    ps->clamp_d_pwmR = graph_add_node_bounds(graph, "R PWM Clamp");
+    ps->clamp_d_pwmY = graph_add_node_bounds(graph, "Y PWM Clamp");
 
     // Create blocks for VRPN data
     ps->vrpn_x = graph_add_node_const(graph, "VRPN X");
@@ -127,15 +130,16 @@ int control_algorithm_init(parameter_t * ps)
     graph_set_source(graph, ps->yaw_pid, PID_SETPOINT, ps->yaw_set, CONST_VAL);
     graph_set_source(graph, ps->yaw_pid, PID_CUR_POINT, ps->cur_yaw, CONST_VAL);
 
+    // Connect PWM clamping blocks
+    graph_set_source(graph, ps->clamp_d_pwmP, BOUNDS_IN, ps->pitch_r_pid, PID_CORRECTION);
+    graph_set_source(graph, ps->clamp_d_pwmR, BOUNDS_IN, ps->roll_r_pid, PID_CORRECTION);
+    graph_set_source(graph, ps->clamp_d_pwmY, BOUNDS_IN, ps->yaw_r_pid, PID_CORRECTION);
 
     // Connect signal mixer
     //graph_set_source(graph, ps->mixer, MIXER_THROTTLE, ps->rc_throttle, CONST_VAL);
-    graph_set_source(graph, ps->mixer, MIXER_PITCH, ps->pitch_r_pid, BOUNDS_OUT);
-    graph_set_source(graph, ps->mixer, MIXER_ROLL, ps->roll_r_pid, BOUNDS_OUT);
-    graph_set_source(graph, ps->mixer, MIXER_YAW, ps->yaw_r_pid, BOUNDS_OUT);
-
-    // Set initial mode
-    connect_manual(ps);
+    graph_set_source(graph, ps->mixer, MIXER_PITCH, ps->clamp_d_pwmP, BOUNDS_OUT);
+    graph_set_source(graph, ps->mixer, MIXER_ROLL, ps->clamp_d_pwmR, BOUNDS_OUT);
+    graph_set_source(graph, ps->mixer, MIXER_YAW, ps->clamp_d_pwmY, BOUNDS_OUT);
 
     // Set pitch PID constants
     graph_set_param_val(graph, ps->pitch_pid, PID_KP, PITCH_ANGLE_KP);
@@ -172,10 +176,21 @@ int control_algorithm_init(parameter_t * ps)
     graph_set_param_val(graph, ps->alt_pid, PID_KI, ALT_ZPOS_KI);
     graph_set_param_val(graph, ps->alt_pid, PID_KD, ALT_ZPOS_KD);
 
+    // Set PWM difference clamping limits
+    graph_set_param_val(graph, ps->clamp_d_pwmP, BOUNDS_MIN, -20000);
+    graph_set_param_val(graph, ps->clamp_d_pwmP, BOUNDS_MAX, 20000);
+    graph_set_param_val(graph, ps->clamp_d_pwmR, BOUNDS_MIN, -20000);
+    graph_set_param_val(graph, ps->clamp_d_pwmR, BOUNDS_MAX, 20000);
+    graph_set_param_val(graph, ps->clamp_d_pwmY, BOUNDS_MIN, -20000);
+    graph_set_param_val(graph, ps->clamp_d_pwmY, BOUNDS_MAX, 20000);
+
     // TODO: Change this to use LOOP_TIME
     graph_set_param_val(graph, ps->angle_time, CONST_SET, 0.005);
     graph_set_param_val(graph, ps->pos_time, CONST_SET, 0.1);
 
+    // Set initial mode
+    connect_manual(ps);
+
 	return 0;
  }
 
@@ -265,8 +280,8 @@ int control_algorithm_init(parameter_t * ps)
 	//memcpy(raw_actuator_struct->controller_corrected_motor_commands, user_input_struct->rc_commands, sizeof(int) * 6);
 
 	// don't use the PID corrections if the throttle is less than about 10% of its range
-	if((user_input_struct->rc_commands[THROTTLE] >
-	118000) || (user_defined_struct->flight_mode == AUTO_FLIGHT_MODE))
+    // NOTE: This needs to be changed when throttle is autonomous!!!
+	if((user_input_struct->rc_commands[THROTTLE] > 118000))
 	{
 			//THROTTLE
 			actuator_struct->pwms[0] = graph_get_output(graph, ps->mixer, MIXER_PWM0);
diff --git a/quad/sw/modular_quad_pid/src/type_def.h b/quad/sw/modular_quad_pid/src/type_def.h
index ba125fa40c917a2fe453fc838f7fd3fdac60dee6..cf893938b9cf34327f543ab2b607bf352c6e89a5 100644
--- a/quad/sw/modular_quad_pid/src/type_def.h
+++ b/quad/sw/modular_quad_pid/src/type_def.h
@@ -321,6 +321,10 @@ typedef struct parameter_t {
 	int y_set;
 	int alt_set;
 	int yaw_set;
+	// Clamps
+	int clamp_d_pwmP;
+	int clamp_d_pwmR;
+	int clamp_d_pwmY;
 	// Loop times
 	int angle_time;
 	int pos_time;