diff --git a/src/server/common.h b/src/server/common.h
index 7ad01c5d5d786a27f41ba52c409ba6845db887bb..74c42d9767cefa287f08f8b97cc9ccdfbdd257dd 100644
--- a/src/server/common.h
+++ b/src/server/common.h
@@ -96,8 +96,12 @@ extern int	DispenseDonate(int ActualUser, int User, int Ammount, const char *Rea
 extern int	DispenseUpdateItem(int User, tItem *Item, const char *NewName, int NewPrice);
 
 // --- Logging ---
+// to syslog
 extern void	Log_Error(const char *Format, ...);
 extern void	Log_Info(const char *Format, ...);
+// To stdout
+#define Debug_Notice(msg, v...)	fprintf(stderr, "%08llun: "msg"\n", (unsigned long long)time(NULL) ,##v)
+#define Debug_Debug(msg, v...)	fprintf(stderr, "%08llud: "msg"\n", (unsigned long long)time(NULL) ,##v)
 
 // --- Config Database ---
 extern void	Config_ParseFile(const char *Filename);
diff --git a/src/server/handler_coke.c b/src/server/handler_coke.c
index 6908aece32c55129f31643237acb44d69bd6cde7..ff051c8400b283f9a4239b85f824784bd03220e4 100644
--- a/src/server/handler_coke.c
+++ b/src/server/handler_coke.c
@@ -107,9 +107,9 @@ int Coke_DoDispense(int UNUSED(User), int Item)
 	if( time(NULL) - gtCoke_LastDispenseTime < ciCoke_MinPeriod )
 	{
 		 int	delay = ciCoke_MinPeriod - (time(NULL) - gtCoke_LastDispenseTime);
-		printf("Wait %i seconds?\n", delay);
+		Debug_Debug("Waiting for %i seconds (rate limit)", delay);
 		sleep( delay );
-		printf("wait done\n");
+		Debug_Debug("wait done");
 	}
 	gtCoke_LastDispenseTime = time(NULL);
 
@@ -133,8 +133,11 @@ int Coke_int_ConnectToPLC(void)
 			return 1;
 		}
 	}
-	printf("Connecting to coke PLC machine on '%s'\n", gsCoke_ModbusAddress);
-	fprintf(stderr, "Connecting to coke PLC machine on '%s'\n", gsCoke_ModbusAddress);
+	else {
+		// Preven resource leaks
+		modbus_close(gCoke_Modbus);
+	}
+	Debug_Notice("Connecting to coke PLC machine on '%s'\n", gsCoke_ModbusAddress);
 	
 	if( modbus_connect(gCoke_Modbus) )
 	{
@@ -227,7 +230,8 @@ int Coke_int_DropSlot(int Slot)
 	if( res == 0 )
 	{
 		// Oops!, no drink
-		printf("Drink dispense failed, bit lowered too quickly\n");
+		Log_Error("Drink dispense failed, bit lowered too quickly");
+		Debug_Notice("Drink dispense failed, bit lowered too quickly");
 		return 1;
 	}
 	
@@ -255,6 +259,7 @@ int _WriteBit(int BitNum, uint8_t Value)
 		return -1;
 	if( modbus_write_bit( gCoke_Modbus, BitNum, Value != 0 ) >= 0 )
 		return 0;
+	// Error case
 	if( Coke_int_ConnectToPLC() )
 		return -1;
 	if( modbus_write_bit( gCoke_Modbus, BitNum, Value != 0 ) >= 0 )
diff --git a/src/server/itemdb.c b/src/server/itemdb.c
index 632eb504ec19fd8b579d4b1ff0f9ad01ba2f21dd..06c82578a645cf5a01776c280daba4f940b78f6f 100644
--- a/src/server/itemdb.c
+++ b/src/server/itemdb.c
@@ -223,6 +223,7 @@ void Items_ReadFromFile(void)
 		free(gaItems);
 		gaItems = NULL;
 	}
+	fclose(fp);
 	
 	// Replace with new
 	giNumItems = numItems;
diff --git a/src/server/server.c b/src/server/server.c
index 6077b9b0df79ac3cc48f843da7569f279b1f63c2..e76c4596504cf3d827a8b3a7009632202215a862 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -28,9 +28,6 @@
 
 #define PIDFILE	"/var/run/dispsrv.pid"
 
-#define Debug_Notice(msg, v...)	printf("%08llun: "msg"\n", (unsigned long long)time(NULL) ,##v)
-#define Debug_Debug(msg, v...)	printf("%08llud: "msg"\n", (unsigned long long)time(NULL) ,##v)
-
 // Statistics
 #define MAX_CONNECTION_QUEUE	5
 #define INPUT_BUFFER_SIZE	256