diff --git a/doc/mpd.1 b/doc/mpd.1
index a11d892da..5741f6726 100644
--- a/doc/mpd.1
+++ b/doc/mpd.1
@@ -22,7 +22,8 @@ Read more about MPD at <\fBhttp://www.musicpd.org/\fP>.
 Output a brief help message.
 .TP
 .BI --kill
-Kill the currently running mpd session.
+Kill the currently running mpd session.  The pid_file parameter must be
+specified in the config file for this to work.
 .TP
 .BI --create-db
 Force (re)creation of database and exit.
diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5
index 0e336c507..6a5336e92 100644
--- a/doc/mpd.conf.5
+++ b/doc/mpd.conf.5
@@ -43,10 +43,10 @@ This specifies where the log file should be located.
 .TP
 .B error_file <file>
 This specifies where the error file should be located.
+.SH OPTIONAL PARAMETERS
 .TP
 .B pid_file <file>
 This specifies the file to save mpd's process ID in.
-.SH OPTIONAL PARAMETERS
 .TP
 .B state_file <file>
 This specifies if a state file is used and where it is located.  The state of
diff --git a/src/main.c b/src/main.c
index 2b76f8d9d..304cb5208 100644
--- a/src/main.c
+++ b/src/main.c
@@ -372,18 +372,20 @@ void startMainProcess() {
 }
 
 void daemonize(Options * options) {
-	FILE * fp;
-	ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 1);
+	FILE * fp = NULL;
+	ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 0);
 	
-	/* do this before daemon'izing so we can fail gracefully if we can't
-	 * write to the pid file */
-	DEBUG("opening pid file\n");
-	fp = fopen(pidFileParam->value, "w+");
-	if(!fp) {
-		ERROR("could not open %s \"%s\" (at line %i) for writing: %s\n",
-				CONF_PID_FILE, pidFileParam->value,
-				pidFileParam->line, strerror(errno));
-		exit(EXIT_FAILURE);
+	if (pidFileParam) {
+		/* do this before daemon'izing so we can fail gracefully if we can't
+		 * write to the pid file */
+		DEBUG("opening pid file\n");
+		fp = fopen(pidFileParam->value, "w+");
+		if(!fp) {
+			ERROR("could not open %s \"%s\" (at line %i) for writing: %s\n",
+					CONF_PID_FILE, pidFileParam->value,
+					pidFileParam->line, strerror(errno));
+			exit(EXIT_FAILURE);
+		}
 	}
 
         if(options->daemon) {
@@ -418,10 +420,12 @@ void daemonize(Options * options) {
 		DEBUG("daemonized!\n");
         }
 
-	DEBUG("writing pid file\n");
-	fprintf(fp, "%lu\n", (unsigned long)getpid());
-	fclose(fp);
-	masterPid = getpid();
+	if (pidFileParam) {
+		DEBUG("writing pid file\n");
+		fprintf(fp, "%lu\n", (unsigned long)getpid());
+		fclose(fp);
+		masterPid = getpid();
+	}
 }
 
 void setupLogOutput(Options * options, FILE * out, FILE * err) {
@@ -461,7 +465,9 @@ void setupLogOutput(Options * options, FILE * out, FILE * err) {
 }
 
 void cleanUpPidFile() {
-	ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 1);
+	ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 0);
+
+	if (!pidFileParam) return;
 
 	DEBUG("cleaning up pid file\n");
 	
@@ -472,9 +478,14 @@ void killFromPidFile(char * cmd, int killOption) {
 	/*char buf[32];
 	struct stat st_cmd;
 	struct stat st_exe;*/
-	ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 1);
+	ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 0);
 	int pid;
 
+	if (!pidFileParam) {
+		ERROR("no pid_file specified in the config file\n");
+		exit(EXIT_FAILURE);
+	}
+
 	FILE * fp = fopen(pidFileParam->value,"r");
 	if(!fp) {
 		ERROR("unable to open %s \"%s\": %s\n",