diff --git a/groundStation/src/backend/backend.c b/groundStation/src/backend/backend.c
index a3dbaacc095f7fec80d9f5c7beb006848567ee34..572f8f3ab8aadf8f1f38059b76c8e4a7edd9981a 100644
--- a/groundStation/src/backend/backend.c
+++ b/groundStation/src/backend/backend.c
@@ -75,6 +75,9 @@ static void client_recv(int fd);
 static void quad_recv();
 /* Checks to see if socket has disconnected. Returns 1 on disconnect, else returns 0 */
 static int wasDisconnected(int fd);
+/* handle controller responses from quad to frontend */
+static void handleRespcontrol(struct metadata *m, uint8_t * data);
+
 
 /* Thread-safe wrappers */
 pthread_mutex_t quadSocketMutex;
@@ -94,7 +97,6 @@ const char *TRACKER_IP = "UAV@192.168.0.120:3883";
 static int zyboSocket;
 static int backendSocket;
 struct ucart_vrpn_tracker * tracker = NULL;
-const char *logHeader = "";//"#\n#\tDefault log header\n#\tEverything after '#'`s will be printed as is in the processed logs.\n#\n\0";
 
 #define MAX_CLIENTS 32
 #define CLIENT_BUFFER_SIZE 1024
@@ -105,6 +107,8 @@ static int client_pending_responses[MAX_CLIENTS][CLIENT_MAX_PENDING_RESPONSES];
 fd_set rfds_master;
 int max_fd = 0;
 
+static FILE * quadlog_file;
+
 pthread_mutex_t quadResponseMutex, cliInputMutex ;
 unsigned char *commandBuf;
 int newQuadResponse = 0, newCliInput = 0;
@@ -128,6 +132,7 @@ int main(int argc, char **argv)
 {
 	int activity;
 	FD_ZERO(&rfds_master);
+	char log_file[256] = "logs/";
 
 	/* 
 	 * Create backend listening socket
@@ -195,8 +200,36 @@ int main(int argc, char **argv)
 	if (!getenv(NOQUAD_ENV)) {
 		// watch for input from the zybo socket
 		safe_fd_set(zyboSocket, &rfds_master, &max_fd);
+	}
 
+	if(argc >= 2)
+	{
+		strncat(log_file, argv[1], strlen(argv[1]));
+	} else {
+		time_t rawtime;
+		char timestr [30];
+		time(&rawtime);
+		sprintf(timestr,"%s",ctime(&rawtime));
+		// Lets convert space to _ in
+		char *p = timestr;
+		size_t i = 0;
+		while(i < strlen(timestr))
+		{ 
+		    if (*p == ' ')
+		          *p = '_';
+			i++;
+			p++;
+		}
+		// timestr has a weird char at the end of it.
+		// we will not include it in our file name
+		strncat(log_file, timestr, strlen(timestr) -1 );
+		strcat(log_file, ".txt");
 	}
+
+	printf("Creating log file '%s'...\n",log_file);
+	quadlog_file = fopen(log_file, "a");
+
+
 	// Tell the quad we are ready to send it vrpn data
 	sendStartPacket();
 
@@ -258,6 +291,7 @@ int main(int argc, char **argv)
 
 	ucart_vrpn_tracker_freeInstance(tracker);
 	safe_close_fd(zyboSocket, &quadSocketMutex);
+	fclose(quadlog_file);
 	return 0;
 }
 
@@ -633,7 +667,7 @@ static void quad_recv() {
 	struct metadata m;
 	uint8_t data[1024];
 	size_t respLen;
-	size_t datalen;
+	ssize_t datalen;
 	size_t packetlen;
 
 	respLen = readQuad((char *) respBuf + respBufLen, 
@@ -654,19 +688,6 @@ static void quad_recv() {
 	memmove(respBuf, respBuf + packetlen, respBufLen - packetlen);
 	respBufLen -= packetlen;
 
-/*
-	DEBUG_ID,             // 00
-	PACKETLOG_ID,         // 01
-	GETPACKETLOGS_ID,     // 02
-	UPDATE_ID,            // 03
-	BEGINUPDATE_ID,       // 04
-	LOG_ID,               // 05
-	RESPONSE_ID,          // 06
-	SETCONTROL_ID,        // 07 - Setting controller values. Example: PID constants
-	GETCONTROL_ID,        // 08 - Getting controller values. Example: PID constants
-	RESPCONTROL_ID,       // 09 - Responding with controller values. Example: PID constants
-	MAX_TYPE_ID
-*/
 	switch (m.msg_type) {
 		case DEBUG_ID :
 		case PACKETLOG_ID :
@@ -677,7 +698,7 @@ static void quad_recv() {
 			break;
 		case LOG_ID:
 			/* something like this */
-			log_write((char *) data, m.data_len);
+			fwrite((char *) data, sizeof(char), m.data_len, quadlog_file);
 			break;
 		case RESPONSE_ID:
 		case SETCONTROL_ID:
@@ -696,13 +717,13 @@ static void handleRespcontrol(struct metadata *m, uint8_t * data)
 {
 	struct controller_message cm;
 	if (DecodeRespcontrol(&cm, m, data) < 0) {
-		warnx("DecodeRespcontrol error")
+		warnx("DecodeRespcontrol error");
 		return;
 	}
 
 	char buffer[128];
 
-	char * message = cmToString(RESPCONTROL_ID, &cm);
+	const char * message = cmToString(RESPCONTROL_ID, &cm);
 
 	size_t len = snprintf(buffer, 128, "%s %f\n", message, cm.value);
 
diff --git a/groundStation/src/backend/cmHandler.c b/groundStation/src/backend/cmHandler.c
index b69f2f8769c0dd2f9aa90193dbf3ea0e1a381dce..2b486a6a82323ba47f9584bb8423e40a57c6638f 100644
--- a/groundStation/src/backend/cmHandler.c
+++ b/groundStation/src/backend/cmHandler.c
@@ -70,7 +70,7 @@ const char * respContStrings[MAX_COMMANDS] {
 	"getheightp",
 	"getheighti",
 	"getheightd",
-	"getheight",
+	"getheight"
 }
 
 const char * cmToString(int msgType, const struct controller_message *cm) 
diff --git a/groundStation/src/backend/packet.h b/groundStation/src/backend/packet.h
index 83bc5936b98f17085f1483c993b79b3e5399b911..54532e4786d3aee157e92eba56a23d3067de32ac 100644
--- a/groundStation/src/backend/packet.h
+++ b/groundStation/src/backend/packet.h
@@ -33,4 +33,7 @@ ssize_t DecodePacket(
 /* Compute a checksum. Requires a packet and the entire packet length */
 uint8_t PacketChecksum(const uint8_t * packet, size_t);
 
+/* Compute the size of the entire packet */
+size_t PacketSize(const struct metadata *m);
+
 #endif