diff --git a/groundStation/Makefile b/groundStation/Makefile
index 372c220dc0c1cb8b672b19c8f2b5e2fea8db2d2c..a8ed46cfb380bd390467c1bf33f7c8cf8b5daae7 100644
--- a/groundStation/Makefile
+++ b/groundStation/Makefile
@@ -6,7 +6,7 @@ GXX=g++
 CFLAGS= -Wall -Wpedantic -Wextra -Werror -std=c99 -g -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable
 CXXFLAGS= -Wall -Wpedantic -Wextra -Werror -Wno-reorder -Wno-unused-variable -std=c++0x -g
 INCLUDES = $(foreach dir, $(INCDIR), -I$(dir))
-INCDIR=inc src/vrpn src/vrpn/quat src/vrpn/build $(BESRCDIR) $(CLISRCDIR)
+INCDIR=inc src/vrpn src/vrpn/quat src/vrpn/build $(BESRCDIR) $(CLISRCDIR) $(FESRCDIR)
 LIBS= -lpthread -lbluetooth -lvrpn -lquat -Lsrc/vrpn/build -Lsrc/vrpn/build/quat 
 OBJDIR=obj
 
@@ -24,8 +24,13 @@ CLISOURCES := $(wildcard $(CLISRCDIR)/*.c )
 CLIOBJECTS = $(CLISOURCES:$(CLISRCDIR)/%.c=$(OBJDIR)/%.o)
 CLIBINARIES = $(notdir $(patsubst %.c,%,$(CLISOURCES)))
 
+# Frontend-common stuff
+FESRCDIR=src/frontend
+FECSOURCES := $(wildcard $(FESRCDIR)/*.c )
+FECOBJECTS = $(FECSOURCES:$(FESRCDIR)/%.c=$(OBJDIR)/%.o)
 
-OBJECTS= $(CLIOBJECTS) $(BECOBJECTS) $(BECPPOBJECTS)
+
+OBJECTS= $(CLIOBJECTS) $(BECOBJECTS) $(BECPPOBJECTS) $(FECOBJECTS)
 
 # Default target
 all: logs objdir backend cli
@@ -34,13 +39,16 @@ vrpn: vrpn/build
 
 cli:  $(CLIBINARIES)
 
-$(CLIBINARIES): % : $(CLISRCDIR)/%.c
-	$(GCC)  $(CFLAGS) $< -o $@ $(INCLUDES) $(LIBS)
+$(CLIBINARIES): % : $(CLISRCDIR)/%.c $(FECOBJECTS)
+	$(GCC)  $(CFLAGS) $< -o $@ $(INCLUDES) $(LIBS) $(FECOBJECTS)
 
 
 backend: $(BECPPOBJECTS) $(BECOBJECTS)
 	$(GXX) $(CXXFLAGS) $^ -o $(BEBINARY) $(INCLUDES) $(LIBS)
 
+$(FECOBJECTS) : $(OBJDIR)/%.o : $(FESRCDIR)/%.c
+	$(GCC)  $(CFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS)
+
 $(BECOBJECTS) : $(OBJDIR)/%.o : $(BESRCDIR)/%.c
 	$(GCC)  $(CFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS)
 
@@ -64,4 +72,4 @@ clean:
 	rm -rf $(OBJDIR)/ $(BEBINARY) $(CLIBINARIES)
 
 debug:
-	@echo $(CLIBINARIES)
\ No newline at end of file
+	@echo $(CLIBINARIES)
diff --git a/groundStation/src/frontend/frontend_common.c b/groundStation/src/frontend/frontend_common.c
index fb343ebf89629b6147d24927dc817bc584703c17..adffae8defb05d3fda075a986f35846062a573a3 100644
--- a/groundStation/src/frontend/frontend_common.c
+++ b/groundStation/src/frontend/frontend_common.c
@@ -1 +1,79 @@
-#include <
+#define _GNU_SOURCE
+
+#include "frontend_common.h"
+#include "config.h"
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <unistd.h>
+#include <err.h>
+
+struct backend_conn {
+	FILE * socket;
+
+	size_t len;
+	char * buf;
+};
+
+struct backend_conn * ucart_backendConnect()
+{
+	int s;
+	struct sockaddr_un remote;
+	char str[100];
+
+	if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
+		perror("socket");
+		exit(1);
+	}
+
+	struct backend_conn * conn = NULL;
+
+	printf("Trying to connect...\n");
+
+	remote.sun_family = AF_UNIX;
+	char * sock_env = getenv(SOCKET_ENV);
+	strcpy(remote.sun_path, sock_env ? sock_env : DEFAULT_SOCKET);
+	if (connect(s, (struct sockaddr *)&remote, sizeof(remote))  == -1) {
+		perror("connect");
+		goto fail_final;
+	}
+
+	conn = malloc(sizeof(struct backend_conn));
+	if (conn == NULL) {
+		perror("malloc");
+		goto fail_sock;
+	}
+
+	conn->len = 0;
+	conn->buf = NULL;
+	conn->socket = fdopen(s, "rw");
+	if (conn->socket == NULL) {
+		perror("fdopen");
+		goto fail_malloc_conn;
+	}
+
+	/* success */
+	goto fail_final;
+
+fail_malloc_conn:
+	free(conn);
+	conn = NULL;
+fail_sock:
+	close(s);
+fail_final:
+	return conn;
+}
+
+void ucart_backendDisconnect(struct backend_conn * conn)
+{
+	fclose(conn->socket);
+	if (conn->buf) {
+		free(conn->buf);
+	}
+	free(conn);
+}
diff --git a/groundStation/src/frontend/frontend_common.h b/groundStation/src/frontend/frontend_common.h
index e468b618f651d212a38019421f2eb2cbf7cd7a5b..28405f194168e7825d07cbe367213cb105fadd83 100644
--- a/groundStation/src/frontend/frontend_common.h
+++ b/groundStation/src/frontend/frontend_common.h
@@ -4,13 +4,14 @@
 struct backend_conn;
 
 /* Start connection to quad */
-struct backend_conn * ucart_backendConnect();
+struct backend_conn * ucart_backendConnect(void);
 
 /* Stop connection to quad */
 void ucart_backendDisconnect(struct backend_conn * conn);
 
-/* Get a string from the backend. NOTE: free() the string when
- * you are done with it.
+/* Get a line from the backend.
+ *
+ * The line will remain valid until the next call to ucart_backendGetline.
  */
 char * ucart_backendGetline(struct backend_conn * conn);