diff --git a/src/server/handler_door.c b/src/server/handler_door.c
new file mode 100644
index 0000000000000000000000000000000000000000..c132e07f8a2b4c46d76303d8095f5bd665e22214
--- /dev/null
+++ b/src/server/handler_door.c
@@ -0,0 +1,71 @@
+/*
+ * OpenDispense 2 
+ * UCC (University [of WA] Computer Club) Electronic Accounting System
+ *
+ * handler_doror.c - Door Relay code
+ *
+ * This file is licenced under the 3-clause BSD Licence. See the file
+ * COPYING for full details.
+ */
+#include "common.h"
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+// === IMPORTS ===
+
+// === PROTOTYPES ===
+ int	Door_InitHandler();
+ int	Door_CanDispense(int User, int Item);
+ int	Door_DoDispense(int User, int Item);
+
+// === GLOBALS ===
+tHandler	gDoor_Handler = {
+	"door",
+	Door_InitHandler,
+	Door_CanDispense,
+	Door_DoDispense
+};
+//char	*gsDoor_SerialPort = "/dev/ttyS0";
+// int	giDoor_SerialFD;
+
+// == CODE ===
+int Door_InitHandler()
+{
+//	printf("connecting to door...\n");
+//	giDoor_SerialFD = open(gsDoor_SerialPort, O_RDWR);
+//	if( giDoor_SerialFD == -1 ) {
+//		fprintf(stderr, "ERROR: Unable to open coke serial port ('%s')\n", gsDoor_SerialPort);
+//	}
+	return 0;
+}
+
+/**
+ */
+int Door_CanDispense(int User, int Item)
+{
+	// Sanity please
+	if( Item == 0 )	return -1;
+	
+	return 0;
+}
+
+/**
+ * \brief Actually do a dispense from the coke machine
+ */
+int Door_DoDispense(int User, int Item)
+{
+	char	tmp[32], *status;
+	regmatch_t	matches[4];
+
+	// Sanity please
+	if( Item != 0 )	return -1;
+	
+	// llogin or other
+
+	return 0;
+}
+
+
diff --git a/src/server/handler_snack.c b/src/server/handler_snack.c
index 826851e31c0c11e06c22ab9e89ad7532926fbb51..2e7c4a6ef43f87649200171890664b3c47cc5a76 100644
--- a/src/server/handler_snack.c
+++ b/src/server/handler_snack.c
@@ -47,6 +47,8 @@ int Snack_CanDispense(int User, int Item)
 	// Sanity please
 	if( Item < 0 || Item > 99 )	return -1;
 	
+	// Hmm... could we implement slot statuses?
+	
 	return 1;
 }
 
@@ -71,5 +73,3 @@ int Snack_DoDispense(int User, int Item)
 
 	return 0;
 }
-
-
diff --git a/src/server/itemdb.c b/src/server/itemdb.c
index 97c64e412db4eb2813b2cd96b2499e4fc16e8bbc..8b494f7dce2a4505cd6af62e291d62077d8bf1e1 100644
--- a/src/server/itemdb.c
+++ b/src/server/itemdb.c
@@ -17,6 +17,7 @@
 // === IMPORTS ===
 extern tHandler	gCoke_Handler;
 extern tHandler	gSnack_Handler;
+extern tHandler	gDoor_Handler;
 
 // === PROTOTYPES ===
 void	Load_Itemlist(void);
@@ -26,7 +27,7 @@ char	*trim(char *__str);
  int	giNumItems = 0;
 tItem	*gaItems = NULL;
 tHandler	gPseudo_Handler = {Name:"pseudo"};
-tHandler	*gaHandlers[] = {&gPseudo_Handler, &gCoke_Handler, &gSnack_Handler};
+tHandler	*gaHandlers[] = {&gPseudo_Handler, &gCoke_Handler, &gSnack_Handler, &gDoor_Handler};
  int	giNumHandlers = sizeof(gaHandlers)/sizeof(gaHandlers[0]);
 char	*gsItemListFile = DEFAULT_ITEM_FILE;