diff --git a/groundStation/Makefile b/groundStation/Makefile
index 9a681cbe8b4589ec71e196f7b62fc5e9739dfc29..f0d6737fbe1159f47ffd25a55f839f40cf2e6e04 100644
--- a/groundStation/Makefile
+++ b/groundStation/Makefile
@@ -10,11 +10,6 @@ INCDIR=../quad/inc src/vrpn src/vrpn/quat src/vrpn/build $(BESRCDIR) $(CLISRCDIR
 LIBS= -lpthread -lbluetooth -lvrpn -lquat -Lsrc/vrpn/build -Lsrc/vrpn/build/quat -lcomputation_graph -L../quad/lib -lcommands
 OBJDIR=obj
 
-# Common Objects
-# COMSRCDIR=../common
-# COMSOURCES := $(wildcard $(COMSRCDIR)/*.c )
-# COMOBJECTS = $(COMSOURCES:$(COMSRCDIR)/%.c=$(OBJDIR)/%.o)
-
 # Backend Specific Variables
 BEBINARY=BackEnd
 BESRCDIR=src/backend
@@ -39,7 +34,10 @@ FECOBJECTS = $(FECSOURCES:$(FESRCDIR)/%.c=$(OBJDIR)/%.o)
 OBJECTS=$(CLIOBJECTS) $(BECOBJECTS) $(BECPPOBJECTS) $(FECOBJECTS)
 
 # Default target
-all: logs objdir backend cli $(SYMLINKS)
+all: quad logs objdir backend cli $(SYMLINKS)
+
+quad:
+	$(MAKE) -C ../quad
 
 $(SYMLINKS): $(CLIBINARY)
 	$(foreach symlink, $(SYMLINKS), ln -s $(CLIBINARY) $(symlink);)
diff --git a/groundStation/src/backend/backend.c b/groundStation/src/backend/backend.c
index 97d12318d848663332130ce7b22a6bdffb00030e..ae638696ede50acf700d299a56119b0eb8153fdf 100644
--- a/groundStation/src/backend/backend.c
+++ b/groundStation/src/backend/backend.c
@@ -82,7 +82,8 @@ static void quad_recv();
 static int wasDisconnected(int fd);
 /* handle controller responses from quad to frontend */
 static void handleResponse(struct metadata *m, uint8_t * data);
-
+/* Create new dynamic logfile name */
+char * create_log_name(char * buffer, size_t max);
 
 /* Thread-safe wrappers */
 pthread_mutex_t quadSocketMutex;
@@ -113,6 +114,7 @@ fd_set rfds_master;
 int max_fd = 0;
 
 static FILE * quadlog_file;
+static char user_specified_log_name[256] = "";
 
 pthread_mutex_t quadResponseMutex, cliInputMutex ;
 unsigned char *commandBuf;
@@ -131,8 +133,6 @@ int main(int argc, char **argv)
 {
 	int activity;
 	FD_ZERO(&rfds_master);
-	char log_file[256] = "logs/";
-
 	/* 
 	 * Create backend listening socket
 	 */
@@ -203,28 +203,12 @@ int main(int argc, char **argv)
 
 	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");
+		strncat(user_specified_log_name, argv[1], strlen(argv[1]));
 	}
 
+	char log_file[256];
+	create_log_name(log_file, 256);
+
 	printf("Creating log file '%s'...\n",log_file);
 	quadlog_file = fopen(log_file, "a");
 
@@ -823,6 +807,13 @@ static void quad_recv() {
 			case RESPADDNODE_ID:
 				handleResponse(&m, data);
 				break;
+			case LOG_END_ID:
+				fclose(quadlog_file);
+				char log_file[256];
+				create_log_name(log_file, 256);
+				printf("New log file created: '%s'\n", log_file);
+				quadlog_file = fopen(log_file, "a");
+				break;
 			default:
 				printf("(Backend): message type %d ignored from quad\n", m.msg_type);
 		}
@@ -907,3 +898,25 @@ void findTimeDiff(int respID) {
 	timeval_subtract(&result, &tend, &timeArr[respID%MAX_HASH_SIZE]);
 	printf("(BackEnd): Elapsed time = %ld ms\n", result.tv_usec/1000);
 }
+
+char * create_log_name(char * buffer, size_t max) {
+	static const char * prefix = "logs";
+	static size_t num_logs = 0;
+	static const char * format_string =  "%Y-%m-%e_%-l:%M";
+
+	time_t curr_time;
+	char c_time_string[256];
+	struct tm * tmp;
+
+	curr_time = time(NULL);
+	tmp = localtime(&curr_time);
+	strftime(c_time_string, 256, format_string, tmp);
+
+	if(strcmp(user_specified_log_name, "") == 0) {
+		sprintf(buffer, "%s/%s_%lu.txt", prefix, c_time_string, num_logs++);	
+	} else {
+		sprintf(buffer, "%s/%s_%lu.txt", prefix, user_specified_log_name, num_logs++);
+	}
+	
+	return buffer;
+}
\ No newline at end of file