diff --git a/src/client/main.c b/src/client/main.c
index 95fd74ea6b8c90986d49e487cad592ac174c7534..ddc0e39a9b39b3f79c462d3acdbed453c3d6daf2 100644
--- a/src/client/main.c
+++ b/src/client/main.c
@@ -30,6 +30,7 @@
 #define USE_AUTOAUTH	1
 
 #define MAX_TXT_ARGS	5	// Maximum number of textual arguments (including command)
+#define DISPENSE_MULTIPLE_MAX	20	// Maximum argument to -c
 
 enum eUI_Modes
 {
@@ -97,6 +98,7 @@ char	*gsEffectiveUser;	//!< '-u' Dispense as another user
 char	*gsUserName;	//!< User that dispense will happen as
 char	*gsUserFlags;	//!< User's flag set
  int	giUserBalance=-1;	//!< User balance (set by Authenticate)
+ int	giDispenseCount = 1;	//!< Number of dispenses to do
 
 // === CODE ===
 int main(int argc, char *argv[])
@@ -134,11 +136,26 @@ int main(int argc, char *argv[])
 			case '?':
 				ShowUsage();
 				return 0;
-			
+					
+			case 'c':
+				if( i + 1 >= argc ) {
+					fprintf(stderr, "%s: -c takes an argument\n", argv[0]);
+					ShowUsage();
+					return -1;
+				}
+				giDispenseCount = atoi(argv[++i]);
+				if( giDispenseCount < 1 || giDispenseCount > DISPENSE_MULTIPLE_MAX ) {
+					fprintf(stderr, "Sorry, only 1-20 can be passed to -c (safety)\n");
+					return -1;
+				}
+				
+				break ;
+	
 			case 'm':	// Minimum balance
 				if( i + 1 >= argc ) {
 					fprintf(stderr, "%s: -m takes an argument\n", argv[0]);
 					ShowUsage();
+					return -1;
 				}
 				giMinimumBalance = atoi(argv[++i]);
 				break;
@@ -146,6 +163,7 @@ int main(int argc, char *argv[])
 				if( i + 1 >= argc ) {
 					fprintf(stderr, "%s: -M takes an argument\n", argv[0]);
 					ShowUsage();
+					return -1;
 				}
 				giMaximumBalance = atoi(argv[++i]);
 				break;
@@ -154,6 +172,7 @@ int main(int argc, char *argv[])
 				if( i + 1 >= argc ) {
 					fprintf(stderr, "%s: -u takes an argument\n", argv[0]);
 					ShowUsage();
+					return -1;
 				}
 				gsEffectiveUser = argv[++i];
 				break;
@@ -162,6 +181,7 @@ int main(int argc, char *argv[])
 				if( i + 1 >= argc ) {
 					fprintf(stderr, "%s: -H takes an argument\n", argv[0]);
 					ShowUsage();
+					return -1;
 				}
 				gsDispenseServer = argv[++i];
 				break;
@@ -169,6 +189,7 @@ int main(int argc, char *argv[])
 				if( i + 1 >= argc ) {
 					fprintf(stderr, "%s: -P takes an argument\n", argv[0]);
 					ShowUsage();
+					return -1;
 				}
 				giDispensePort = atoi(argv[++i]);
 				break;
@@ -354,7 +375,7 @@ int main(int argc, char *argv[])
 			return -1;
 		
 		// Do donation
-		ret =Dispense_Donate(sock, atoi(text_args[1]), text_args[2]);
+		ret = Dispense_Donate(sock, atoi(text_args[1]), text_args[2]);
 				
 		close(sock);
 
@@ -540,6 +561,7 @@ int main(int argc, char *argv[])
 	// Check for a valid item ID
 	if( i >= 0 )
 	{
+		 int j;
 		// Connect, Authenticate, dispense and close
 		sock = OpenConnection(gsDispenseServer, giDispensePort);
 		if( sock < 0 )	return -1;
@@ -547,7 +569,13 @@ int main(int argc, char *argv[])
 		Dispense_ItemInfo(sock, gaItems[i].Type, gaItems[i].ID);
 		
 		Authenticate(sock);
-		ret = DispenseItem(sock, gaItems[i].Type, gaItems[i].ID);
+		for( j = 0; j < giDispenseCount; j ++ ) {
+			ret = DispenseItem(sock, gaItems[i].Type, gaItems[i].ID);
+			if( ret )	break;
+		}
+		if( j > 1 ) {
+			printf("%i items dispensed\n", j);
+		}
 		close(sock);
 	}
 
diff --git a/src/server/main.c b/src/server/main.c
index eedafc3c50c80cf21fbe768b2676638d350c3869..83c8e06da763aa24e5d91df6f6b4cf3801c686d1 100644
--- a/src/server/main.c
+++ b/src/server/main.c
@@ -136,6 +136,7 @@ int main(int argc, char *argv[])
 	}
 	
 	signal(SIGINT, sigint_handler);
+	signal(SIGTERM, sigint_handler);
 	
 	openlog("odispense2", 0, LOG_LOCAL4);
 	
diff --git a/src/server/server.c b/src/server/server.c
index aa9f0083b890ea8c8a020ec88b2e2fa8526688f0..25574366b91250835465c4f8b9ca85266b1f6ef6 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -144,11 +144,11 @@ void Server_Start(void)
 	printf("Listening on 0.0.0.0:%i\n", giServer_Port);
 	
 	// write pidfile
-//	{
-//		FILE *fp = fopen("/var/run/dispsrv.pid", "w");
-//		fprintf(fp, "%i", getpid());
-//		fclose(fp);
-//	}
+	{
+		FILE *fp = fopen("/var/run/dispsrv.pid", "w");
+		fprintf(fp, "%i", getpid());
+		fclose(fp);
+	}
 
 	for(;;)
 	{
@@ -215,7 +215,7 @@ void Server_Start(void)
 
 void Server_Cleanup(void)
 {
-	printf("Close(%i)\n", giServer_Socket);
+	printf("\nClose(%i)\n", giServer_Socket);
 	close(giServer_Socket);
 }