Add backquote/quasiquote (`).
diff --git a/doc/lisp_reference/lisp_reference.tex b/doc/lisp_reference/lisp_reference.tex
index 52e9e4b..a758d51 100644
--- a/doc/lisp_reference/lisp_reference.tex
+++ b/doc/lisp_reference/lisp_reference.tex
@@ -166,7 +166,7 @@
 \section{Function Manipulation}
 
 \definition{
-    (\mac{funcall} \param{function} \param{args}\more)\index{funcall} \\
+    (\func{funcall} \param{function} \param{args}\more)\index{funcall} \\
     (\func{apply} \param{function} \param{args})\index{apply}
 }{
     Call the \type{closure} or \type{function-object} \param{function} with \param{args} and evaluate to \ret{its result}. An error occurs if \param{args} are not acceptable.
diff --git a/lib/lisp/std/std.lisp b/lib/lisp/std/std.lisp
index e7ed14c..774d805 100644
--- a/lib/lisp/std/std.lisp
+++ b/lib/lisp/std/std.lisp
@@ -19,8 +19,6 @@
 
 ;; /Boring utilitites
 
-
-
 (defun not (val)
   (nilp val))
 
diff --git a/src/lisp/compiler.dasc b/src/lisp/compiler.dasc
index bf78a20..f176b7d 100644
--- a/src/lisp/compiler.dasc
+++ b/src/lisp/compiler.dasc
@@ -370,9 +370,34 @@
 	else
 	{
 		value_t fsym = car(val), args = cdr(val);
-		int nargs = length(args);
+		int nargs = length(args),
+			n = length(val);
 
-		// TODO
+		if (symstreq(fsym, "unquote"))
+		{
+			if (nargs != 1)
+			{
+				err_at(val, "unquote (or ,) takes exactly 1 argument");
+			}
+
+			compile_expression(env, local, car(args), false, Dst);
+		}
+		else
+		{
+			| push nil;
+
+			for (int i = n - 1; i >= 0; i--)
+			{
+				compile_backquote(env, local, elt(val, i), Dst);
+				| push eax;
+				| call_extern cons;
+				| add esp, 8;
+
+				// Remove unnecessary pop
+				| push eax;
+			}
+				| pop eax;
+		}
 	}
 }
 
@@ -552,17 +577,12 @@
 			{
 				compile_expression(env, local, elt(args, i), false, Dst);
 
-				// push the ith item
 				| push eax;
-				// cons the top two stack items
 				| call_extern cons;
-				// remove the stack items from use
 				| add esp, (2 * value_size);
-				// put the new thing on the stack
 				| push eax;
 			}
-
-			| pop eax;
+				| pop eax;
 		}
 		else if (symstreq(fsym, "lambda"))
 		{