diff --git a/src/server/dispense.c b/src/server/dispense.c
index 215e580cae16962242102945832fd5cc0b77c9bb..23e73afff8f524e284f3c2a7e151659a28a1ed6e 100644
--- a/src/server/dispense.c
+++ b/src/server/dispense.c
@@ -146,7 +146,11 @@ int DispenseAdd(int ActualUser, int User, int Ammount, const char *ReasonGiven)
 	 int	ret;
 	char	*dstName, *byName;
 	
-	ret = _Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT), User, Ammount, ReasonGiven );
+#if DISPENSE_ADD_BELOW_MIN
+//	ret = _Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT), User, Ammount, ReasonGiven );
+#else
+	ret = Bank_Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT), User, Ammount, ReasonGiven );
+#endif
 	if(ret)	return 2;
 	
 	byName = Bank_GetAcctName(ActualUser);
@@ -229,11 +233,11 @@ int _GetMinBalance(int Account)
 	// - Internal accounts have no lower bound
 	if( flags & USER_FLAG_INTERNAL )	return INT_MIN;
 	
-	// Admin to -$10
-	//if( flags & USER_FLAG_ADMIN )	return -1000;
+	// Admin to -$50
+	if( flags & USER_FLAG_ADMIN )	return -5000;
 	
-	// Coke to -$5
-	//if( flags & USER_FLAG_COKE )	return -500;
+	// Coke to -$20
+	if( flags & USER_FLAG_COKE )	return -2000;
 	
 	// Anyone else, non-negative
 	return 0;
@@ -246,12 +250,12 @@ int _CanTransfer(int Source, int Destination, int Ammount)
 {
 	if( Ammount > 0 )
 	{
-		if( Bank_GetBalance(Source) + Ammount < _GetMinBalance(Source) )
+		if( Bank_GetBalance(Source) - Ammount < _GetMinBalance(Source) )
 			return 0;
 	}
 	else
 	{
-		if( Bank_GetBalance(Destination) - Ammount < _GetMinBalance(Destination) )
+		if( Bank_GetBalance(Destination) + Ammount < _GetMinBalance(Destination) )
 			return 0;
 	}
 	return 1;
diff --git a/src/server/server.c b/src/server/server.c
index 5102f6223cb94db064f8b8104e757d1170a495a0..fa50f0da962d44620a17de51c1a24dd7415798f8 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -99,9 +99,15 @@ const struct sClientCommand {
 #define NUM_COMMANDS	((int)(sizeof(gaServer_Commands)/sizeof(gaServer_Commands[0])))
 
 // === GLOBALS ===
+// - Configuration
  int	giServer_Port = 11020;
- int	giServer_NextClientID = 1;
- int	giServer_Socket;
+ int	gbServer_RunInBackground = 0;
+char	*gsServer_LogFile = "/var/log/dispsrv.log";
+char	*gsServer_ErrorLog = "/var/log/dispsrv.err";
+// - State variables
+ int	giServer_Socket;	// Server socket
+ int	giServer_NextClientID = 1;	// Debug client ID
+ 
 
 // === CODE ===
 /**
@@ -133,6 +139,26 @@ void Server_Start(void)
 		perror("Binding");
 		return ;
 	}
+
+#if 0
+	if( gbServer_RunInBackground )
+	{
+		int pid = fork();
+		if( pid == -1 ) {
+			fprintf(stderr, "ERROR: Unable to fork\n");
+			perror("fork background");
+			exit(-1);
+		}
+		if( pid != 0 ) {
+			// Parent, quit
+			exit(0);
+		}
+		// In child, sort out stdin/stdout
+		reopen(0, "/dev/null", O_READ);
+		reopen(1, gsServer_LogFile, O_CREAT|O_APPEND);
+		reopen(2, gsServer_ErrorLog, O_CREAT|O_APPEND);
+	}
+#endif
 	
 	// Listen
 	if( listen(giServer_Socket, MAX_CONNECTION_QUEUE) < 0 ) {