diff --git a/quad/.gitignore b/quad/.gitignore
index d22e061fd080d92058aa71c5cf95ef962ffd798e..b18b9b0b90900e08db6ffd6170269f69a9b45a12 100644
--- a/quad/.gitignore
+++ b/quad/.gitignore
@@ -5,4 +5,5 @@ inc/
 obj/
 lib/
 lib-zybo/
-TAGS
\ No newline at end of file
+TAGS
+out/
\ No newline at end of file
diff --git a/quad/Makefile b/quad/Makefile
index 867de1bd9694a5d3f664c94a37c9a5c9beb3064e..e0e196eaa9dd80924a7fa78802961f5ce3a3552d 100644
--- a/quad/Makefile
+++ b/quad/Makefile
@@ -1,7 +1,11 @@
 INCDIR = inc
 LIBDIR = lib
+OUTDIR = out
+WS = $(CURDIR)/xsdk_workspace
 
-.PHONY: default test clean deep-clean
+BOOT = $(OUTDIR)/BOOT.bin
+
+.PHONY: default zybo boot test clean deep-clean
 
 default:
 	$(MAKE) -C src/test
@@ -9,6 +13,11 @@ default:
 	$(MAKE) -C src/computation_graph
 	$(MAKE) -C src/quad_app
 
+zybo:
+	cd xsdk_workspace/modular_quad_pid && ./build.sh
+
+boot: $(BOOT)
+
 test:
 	$(MAKE) -C src/queue test
 	$(MAKE) -C src/computation_graph test
@@ -22,3 +31,16 @@ deep-clean:
 	$(MAKE) -C src/queue clean
 	$(MAKE) -C src/computation_graph clean
 	$(MAKE) -C src/quad_app clean
+
+$(OUTDIR):
+	mkdir $(OUTDIR)
+
+$(BOOT): zybo | $(OUTDIR)
+	echo "the_ROM_image:" > zybo_fsbl.bif
+	echo "{" >> zybo_fsbl.bif
+	echo $(WS)/zybo_fsbl/Release/zybo_fsbl.elf >> zybo_fsbl.bif
+	echo $(WS)/system_hw_platform/system.bit >> zybo_fsbl.bif
+	echo $(WS)/modular_quad_pid/Release/modular_quad_pid.elf >> zybo_fsbl.bif
+	echo "}" >> zybo_fsbl.bif
+	/remote/Xilinx/2015.4/SDK/2015.4/bin/bootgen -arch zynq -image zybo_fsbl.bif -o $(BOOT)
+	rm zybo_fsbl.bif
diff --git a/quad/xsdk_workspace/modular_quad_pid/.build_app.tcl b/quad/xsdk_workspace/modular_quad_pid/.build_app.tcl
index ae51135bb7ea13e1f14bc28fda3da7f2c4751181..d7cbdc28e23bf01c61ee7fa7a7d0a4d499dfa673 100644
--- a/quad/xsdk_workspace/modular_quad_pid/.build_app.tcl
+++ b/quad/xsdk_workspace/modular_quad_pid/.build_app.tcl
@@ -1,3 +1,4 @@
 cd ..
 sdk set_workspace .
+sdk set_build_config -app modular_quad_pid -type release
 sdk build_project -type app -name modular_quad_pid
diff --git a/quad/xsdk_workspace/modular_quad_pid/.build_fsbl.tcl b/quad/xsdk_workspace/modular_quad_pid/.build_fsbl.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..ca98b772fe094ad78cbf06abe17ec3988ec359f2
--- /dev/null
+++ b/quad/xsdk_workspace/modular_quad_pid/.build_fsbl.tcl
@@ -0,0 +1,4 @@
+cd ..
+sdk set_workspace .
+sdk set_build_config -app zybo_fsbl -type release
+sdk build_project -type app -name zybo_fsbl
diff --git a/quad/xsdk_workspace/modular_quad_pid/.create_fsbl.tcl b/quad/xsdk_workspace/modular_quad_pid/.create_fsbl.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..6c9ca7b406e47f2a713915db91957088a2572160
--- /dev/null
+++ b/quad/xsdk_workspace/modular_quad_pid/.create_fsbl.tcl
@@ -0,0 +1,3 @@
+cd ..
+sdk set_workspace .
+sdk create_app_project -name zybo_fsbl -app {Zynq FSBL} -hwproject system_hw_platform -proc ps7_cortexa9_0 -os standalone -lang C
diff --git a/quad/xsdk_workspace/modular_quad_pid/build.sh b/quad/xsdk_workspace/modular_quad_pid/build.sh
index 16f728e1c52a93f5b3996876765b2cc12919dc7c..069d43ea162ecadfc4d9cfbf01c80a45c28245da 100644
--- a/quad/xsdk_workspace/modular_quad_pid/build.sh
+++ b/quad/xsdk_workspace/modular_quad_pid/build.sh
@@ -1,5 +1,7 @@
 #!/bin/bash
 
+set -e
+
 source /remote/Xilinx/2015.4/SDK/2015.4/settings64.sh
 
 echo "Building modular_quad_pid"
@@ -10,31 +12,40 @@ if [ ! -d ../.metadata ]; then
     ECLIPSE=/remote/Xilinx/2015.4/SDK/2015.4/eclipse/lnx64.o/eclipse
     VM=/remote/Xilinx/2015.4/SDK/2015.4/tps/lnx64/jre/bin
     WSPACE=$(dirname $0)/..
-    HW=$WSPACE/system_hw_platform
     BSP=$WSPACE/system_bsp
+    FSBL=$WSPACE/zybo_fsbl
+    FSBL_BSP=$WSPACE/zybo_fsbl_bsp
+    HW=$WSPACE/system_hw_platform
     APP=$WSPACE/modular_quad_pid
 
     echo "Setting up dependencies for modular_quad_pid"
 
-    # Import the system_hw_platform into the workspace
+    # Import the system_hw_platform and app into the workspace
     $ECLIPSE -vm $VM -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild \
         -import $HW \
+        -import $APP \
         -data $WSPACE \
-        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole || exit 1
+        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole
 
     # Create the BSP
-    xsct .create_bsp.tcl || exit 1
+    xsct .create_bsp.tcl
+
+    # Create the FSBL project
+    xsct .create_fsbl.tcl
 
-    # Import the system_bsp and modular_quad_pid into workspace
     $ECLIPSE -vm $VM -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild \
         -import $BSP \
-        -import $APP \
+        -import $FSBL \
+        -import $FSBL_BSP \
         -data $WSPACE \
-        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole || exit 1
+        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole
 
-    # Build the BSP
-    xsct .build_bsp.tcl || exit 1
+    # Build everything
+    $ECLIPSE -vm $VM -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild \
+        -build all \
+        -data $WSPACE \
+        -vmargs -Dorg.eclipse.cdt.core.console=org.eclipse.cdt.core.systemConsole
 
 fi
 
-xsct .build_app.tcl || exit 1
+xsct .build_app.tcl