diff --git a/groundStation/src/backend/commands.c b/groundStation/src/backend/commands.c
index d1efa7e38e551784baca1124158b768b06b2ec90..a97197b8106334e13b2e652ab93c1228f868ce0b 100644
--- a/groundStation/src/backend/commands.c
+++ b/groundStation/src/backend/commands.c
@@ -44,29 +44,29 @@ struct MessageType MessageTypes[MAX_TYPE] =
 		// Message Type ID
 		0x01,
 		
-		// Calibration Subtypes
+		// Calibration Subtypes (PID coefficients)
 		{
-			// yaw setpoint subtype
+			// yaw p constant subtype
 			{
 				// ID
 				0x00,
 				// Command text
-				"setyaw",
+				"setyawp",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setyaw
+				NULL
 			},
-			// yaw p constant subtype
+			// yaw i constant subtype
 			{
 				// ID
 				0x01,
 				// Command text
-				"setyawp",
+				"setyawi",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setyawp
+				NULL
 			},
 			// yaw d constant subtype
 			{
@@ -77,29 +77,29 @@ struct MessageType MessageTypes[MAX_TYPE] =
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setyawd
+				NULL
 			},
-			// roll setpoint subtype
+			// roll p constant subtype
 			{
 				// ID
 				0x03,
 				// Command text
-				"setroll",
+				"setrollp",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setroll
+				NULL
 			},
-			// roll p constant subtype
+			// roll i constant subtype
 			{
 				// ID
 				0x04,
 				// Command text
-				"setrollp",
+				"setrolli",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setrollp
+				NULL
 			},
 			// roll d constant subtype
 			{
@@ -110,29 +110,29 @@ struct MessageType MessageTypes[MAX_TYPE] =
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setrolld
+				NULL
 			},
-			// pitch setpoint subtype
+			// pitch p constant subtype
 			{
 				// ID
 				0x06,
 				// Command text
-				"setpitch",
+				"setpitchp",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setpitch
+				NULL
 			},
-			// pitch p constant subtype
+			// pitch i constant subtype
 			{
 				// ID
 				0x07,
 				// Command text
-				"setpitchp",
+				"setpitchi",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setpitchp
+				NULL
 			},
 			// pitch d constant subtype
 			{
@@ -143,51 +143,205 @@ struct MessageType MessageTypes[MAX_TYPE] =
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setpitchd
+				NULL
 			},
-			// throttle setpoint subtype
+			// yawrate p constant subtype
 			{
 				// ID
 				0x09,
 				// Command text
-				"setthrottle",
+				"setyawratep",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setthrottle
+				NULL
 			},
-			// throttle p constant subtype
+			// yawrate i constant subtype
 			{
 				// ID
 				0x0A,
 				// Command text
-				"setthrottlep",
+				"setyawratei",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setthrottlep
+				NULL
 			},
-			// throttle i constant subtype
+			// yawrate d constant subtype
 			{
 				// ID
 				0x0B,
 				// Command text
-				"setthrottlei",
+				"setyawrated",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&setthrottlei
+				NULL
 			},
-			// throttle d constant subtype
+			// rollrate p constant subtype
 			{
 				// ID
 				0x0C,
 				// Command text
-				"setthrottled",
+				"setrollratep",
 				// Type of the command data
 				floatType,
 				// Function pointer
-				&getthrottled
+				NULL
+			},
+			// rollrate i constant subtype
+			{
+				// ID
+				0x0D,
+				// Command text
+				"setrollratei",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// rollrate d constant subtype
+			{
+				// ID
+				0x0E,
+				// Command text
+				"setrollrated",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// pitchrate p constant subtype
+			{
+				// ID
+				0x0F,
+				// Command text
+				"setpitchratep",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// pitchrate i constant subtype
+			{
+				// ID
+				0x10,
+				// Command text
+				"setpitchratei",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// pitchrate d constant subtype
+			{
+				// ID
+				0x11,
+				// Command text
+				"setpitchrated",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// height p constant subtype
+			{
+				// ID
+				0x12,
+				// Command text
+				"setheightp",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// height i constant subtype
+			{
+				// ID
+				0x13,
+				// Command text
+				"setheighti",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// height d constant subtype
+			{
+				// ID
+				0x14,
+				// Command text
+				"setheightd",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// lat p constant subtype
+			{
+				// ID
+				0x15,
+				// Command text
+				"setlatp",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// lat i constant subtype
+			{
+				// ID
+				0x16,
+				// Command text
+				"setlati",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// lat d constant subtype
+			{
+				// ID
+				0x17,
+				// Command text
+				"setlatd",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// long p constant subtype
+			{
+				// ID
+				0x18,
+				// Command text
+				"setlongp",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// long i constant subtype
+			{
+				// ID
+				0x19,
+				// Command text
+				"setlongi",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
+			},
+			// long d constant subtype
+			{
+				// ID
+				0x1A,
+				// Command text
+				"setlongd",
+				// Type of the command data
+				floatType,
+				// Function pointer
+				NULL
 			}
 		}
 	},
@@ -993,4 +1147,4 @@ int respthrottlei(unsigned char *packet, int dataLen, modular_structs_t *structs
 }
 int respthrottled(unsigned char *packet, int dataLen, modular_structs_t *structs){
 	return 0;
-}
\ No newline at end of file
+}
diff --git a/groundStation/src/backend/communication.c b/groundStation/src/backend/communication.c
index 86784506d05122229d04cad6cb5ed78eb9fcbb4c..2dacd03f90afb8ed35b99a56f34ca785225e3350 100644
--- a/groundStation/src/backend/communication.c
+++ b/groundStation/src/backend/communication.c
@@ -256,12 +256,16 @@ int processCommand(unsigned char *packet, modular_structs_t *structs) {
 	}
 	
 	if(metadata.data_len >= 0) {
-		// Call the appropriate subtype function
-		(* (MessageTypes[(unsigned char)metadata.msg_type].subtypes[(unsigned char)metadata.msg_subtype].functionPtr))(data, metadata.data_len, structs);
-		
+		/* Null check*/
+		if (MessageTypes[(unsigned char)metadata.msg_type].subtypes[
+				(unsigned char) metadata.msg_subtype].functionPtr) {
+			// Call the appropriate subtype function
+			(* (MessageTypes[(unsigned char)metadata.msg_type].subtypes[(unsigned char)metadata.msg_subtype].functionPtr))(data, metadata.data_len, structs);
+		}
+			
 		return 0;
 	}
 	
 	// Only gets here if there is an error
 	return -1;
-}
\ No newline at end of file
+}
diff --git a/groundStation/src/cli/cli_setpid.c b/groundStation/src/cli/cli_setpid.c
index b0ed03cf1b31b0652c5b617a342cebb422250274..2fdc16fdb43e6e42ea5eea16153d98eeb5978302 100644
--- a/groundStation/src/cli/cli_setpid.c
+++ b/groundStation/src/cli/cli_setpid.c
@@ -63,19 +63,19 @@ int cli_setpid(struct backend_conn * conn,	int argc, char **argv) {
 	} else if (setPitch) {
 		pid_data.controller = PID_PITCH;
 	} else if (setRollV) {
-		pid_data.controller = PID_ROLL_VELOCITY;
+		pid_data.controller = PID_ROLL_RATE;
 	} else if (setPitchV) {
-		pid_data.controller = PID_PITCH_VELOCITY;
+		pid_data.controller = PID_PITCH_RATE;
 	} else if (setYawV) {
-		pid_data.controller = PID_YAW_VELOCITY;
+		pid_data.controller = PID_YAW_RATE;
 	} else if (setHeight) {
 		pid_data.controller = PID_HEIGHT;
 	} else if (setLong) {
-		pid_data.controller = PID_LONG;
-	} else if (setLat) {
 		pid_data.controller = PID_LAT;
+	} else if (setLat) {
+		pid_data.controller = PID_LONG;
 	}
 
 	frontend_setpid(conn, &pid_data, mask);
 	return 0;
-}
\ No newline at end of file
+}
diff --git a/groundStation/src/frontend/frontend_setpid.c b/groundStation/src/frontend/frontend_setpid.c
index 0a25d8e3c068ebcd8d121dac7469f86cc6d8a8c6..58bf4109cd1c50d22486e464c101c9f8dd3c367e 100644
--- a/groundStation/src/frontend/frontend_setpid.c
+++ b/groundStation/src/frontend/frontend_setpid.c
@@ -25,7 +25,24 @@ int frontend_setpid(
 		case PID_YAW:
 			controller = "yaw";
 			break;
-			/* What is the "throttle" pid constant? */
+		case PID_PITCH_RATE:
+			controller = "pitchrate";
+			break;
+		case PID_ROLL_RATE:
+			controller = "rollrate";
+			break;
+		case PID_YAW_RATE:
+			controller = "yawrate";
+			break;
+		case PID_HEIGHT:
+			controller = "height";
+			break;
+		case PID_LAT:
+			controller = "lat";
+			break;
+		case PID_LONG:
+			controller = "long";
+			break;
 		default:
 			warnx("Unsupported PID constant");
 			return -1;
diff --git a/groundStation/src/frontend/pid_common.h b/groundStation/src/frontend/pid_common.h
index efa24df4a2b018b1a3b353a109cd29a044647a13..c40c4fb42fb19bf7caf22a03effe091fb7621ece 100644
--- a/groundStation/src/frontend/pid_common.h
+++ b/groundStation/src/frontend/pid_common.h
@@ -5,9 +5,9 @@ enum pid_controller {
 	PID_PITCH,
 	PID_ROLL,
 	PID_YAW,
-	PID_PITCH_VELOCITY,
-	PID_ROLL_VELOCITY,
-	PID_YAW_VELOCITY,
+	PID_PITCH_RATE,
+	PID_ROLL_RATE,
+	PID_YAW_RATE,
 	PID_HEIGHT, /* Z */
 	PID_LAT, /* X */
 	PID_LONG, /* Y */