diff --git a/items.cfg b/items.cfg
index eb3e8e62bed083249d0d00be441ab8851bc6919f..df3305a754ade2adf0f6e7710fcd554d38190023 100644
--- a/items.cfg
+++ b/items.cfg
@@ -19,7 +19,7 @@ pseudo	1	30	manual phone	# Ring Ring!
 pseudo	2	128	clue	# clue.flac - Don't Ask
 pseudo	3	3500	polo postorder	# Polo Shirt! (With UCC Sun Logo)
 pseudo	4	2500	membership	# here comes the money!
-pseudo	5	1	testy mc test
+
 -door	0	0	Open Door	# Open Sesame
 
 # Snack machine
diff --git a/src/server/handler_coke.c b/src/server/handler_coke.c
index 09bcc8e95d4482feb17346a6c77b962a1875541d..79ae262c961754282b520af95dad3fff486d172e 100644
--- a/src/server/handler_coke.c
+++ b/src/server/handler_coke.c
@@ -116,120 +116,43 @@ int Coke_int_GetSlotStatus(char *Buffer, int Slot)
 	}
 }
 
+/**
+ * \brief Update the status of all coke slots
+ * \note Uses goto to reduce the chance of the lock being kept
+ */
 void Coke_int_UpdateSlotStatuses(void)
 {
-	 int	i;
-	 int	len;
+	 int	i, len;
 	char	tmp[40];
 	
+	if( giCoke_SerialFD == -1 )	return ;
+	
 	pthread_mutex_lock(&gCoke_Mutex);
 	
-	if( WaitForColon() )	return ;
-	Writef("d7\r\n");	// Update slot statuses
 	WaitForColon();
+	Writef("d7\r\n");	// Update slot statuses
+	if( WaitForColon() )	goto ret;
 	Writef("s\n");
 	ReadLine(sizeof tmp, tmp);	// Read back what we just said
 	
 	for( i = 0; i <= 6; i ++ )
 	{
 		len = ReadLine(sizeof tmp, tmp);
-		if( len == -1 )	return ;	// I give up :(
+		if( len == -1 ) {
+			#if TRACE_COKE
+			printf("Coke_int_UpdateSlotStatuses: Read failed on slot %i\n", i);
+			#endif
+			goto ret;	// I give up :(
+		}
 		Coke_int_GetSlotStatus(tmp, i);
 	}
+
+ret:
 	pthread_mutex_unlock(&gCoke_Mutex);
 }
 
 int Coke_CanDispense(int UNUSED(User), int Item)
 {
-	// Disabled in favor of caching
-	#if 0
-	char	tmp[40], *status;
-	regmatch_t	matches[4];
-	 int	ret;
-
-	// Sanity please
-	if( Item < 0 || Item > 6 )	return -1;	// -EYOURBAD
-	
-	// Can't dispense if the machine is not connected
-	if( giCoke_SerialFD == -1 )
-		return -2;
-	
-	#if TRACE_COKE
-	printf("Coke_CanDispense: Flushing\n");
-	#endif
-	
-	
-	// Wait for a prompt
-	ret = 0;
-	while( WaitForColon() && ret < 3 )
-	{
-		// Flush the input buffer
-		char	tmpbuf[512];
-		read(giCoke_SerialFD, tmpbuf, sizeof(tmpbuf));
-		#if TRACE_COKE
-		printf("Coke_CanDispense: sending 'd7'\n");
-		#endif
-		Writef("d7\r\n");
-		ret ++;
-	}
-	// Check for a timeout error
-	if( !(ret < 3) ) {
-		fprintf(stderr, "Coke machine timed out\n");
-		return -2;	// -EMYBAD
-	}
-	
-	// You need to do a 'd7' before reading the status
-	// - Otherwise it sometimes reports a full slot as empty
-	//   [TPG] (2011-02-19)
-	if( ret == 0 )
-	{
-		Writef("d7\r\n");
-		WaitForColon();
-	}
-
-	// TODO: Handle "not ok" response to D7
-	
-	#if TRACE_COKE
-	printf("Coke_CanDispense: sending 's%i'\n", Item);
-	#endif
-	
-	// Ask the coke machine
-	Writef("s%i\r\n", Item);
-
-	#if TRACE_COKE
-	printf("Coke_CanDispense: reading response\n");
-	#endif
-	// Read from the machine (ignoring empty lines)
-	while( (ret = ReadLine(sizeof(tmp)-1, tmp)) == 0 );
-	#if TRACE_COKE
-	printf("ret = %i, tmp = '%s'\n", ret, tmp);
-	#endif
-	// Read back-echoed lines
-	while( tmp[0] == ':' || tmp[1] != 'l' )
-	{
-		ret = ReadLine(sizeof(tmp)-1, tmp);
-		if( ret == -1 )	return -1;
-		printf("ret = %i, tmp = '%s'\n", ret, tmp);
-	}
-
-	// Catch an error	
-	if( ret <= 0 ) {
-		fprintf(stderr, "Coke machine is not being chatty (read = %i)\n", ret);
-		if( ret == -1 ) {
-			perror("Coke Machine");
-		}
-		return -1;
-	}
-	
-	#if TRACE_COKE
-	printf("Coke_CanDispense: wait for the prompt again\n");
-	#endif
-
-	// Eat rest of response
-	WaitForColon();
-
-	return Coke_GetSlotStatus(tmp, Item);
-	#else
 	// Sanity please
 	if( Item < 0 || Item > 6 )	return -1;	// -EYOURBAD
 	
@@ -238,7 +161,6 @@ int Coke_CanDispense(int UNUSED(User), int Item)
 		return -2;
 	
 	return gaCoke_CachedStatus[Item];
-	#endif
 }
 
 /**
@@ -300,7 +222,7 @@ int Coke_DoDispense(int UNUSED(User), int Item)
 	printf("Coke_DoDispense: done\n");
 	#endif
 
-	// TODO: Regex
+	// TODO: Regex instead?
 	if( strcmp(tmp, "ok") == 0 ) {
 		// We think dispense worked
 		// - The machine returns 'ok' if an empty slot is dispensed, even if
@@ -308,17 +230,20 @@ int Coke_DoDispense(int UNUSED(User), int Item)
 		ret = 0;
 	}
 	else {
-		printf("Machine returned unknown value '%s'\n", tmp);
+		printf("Coke_DoDispense: Machine returned unknown value '%s'\n", tmp);
 		ret = -1;
 	}
 	
+	#if TRACE_COKE
+	printf("Coke_DoDispense: Updating slot status\n");
+	#endif
 	// Update status
 	Writef("s%i\r\n", Item);
 	len = ReadLine(sizeof tmp, tmp);
 	if(len == -1)	gaCoke_CachedStatus[Item] = -1;
 	Coke_int_GetSlotStatus(tmp, Item);
 	
-	
+	// Release and return
 	pthread_mutex_unlock(&gCoke_Mutex);
 	
 	return ret;