More little stuff.
 -Erik
diff --git a/Makefile b/Makefile
index 30fd718..5d246f1 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,7 @@
 # Set the following to `true' to make a debuggable build.
 # Leave this set to `false' for production use.
 # eg: `make DODEBUG=true tests'
-DODEBUG = false
+DODEBUG = true
 
 # If you want a static binary, turn this on.
 DOSTATIC = false
diff --git a/kill.c b/kill.c
index db48424..93f02ea 100644
--- a/kill.c
+++ b/kill.c
@@ -222,12 +222,15 @@
 	} 
 #ifdef BB_KILLALL
 	else {
+		pid_t myPid=getpid();
 		/* Looks like they want to do a killall.  Do that */
 		while (--argc >= 0) {
 			pid_t* pidList;
 
 			pidList = findPidByName( *argv);
-			for(; pidList && pidList!=0; pidList++) {
+			for(; pidList && *pidList!=0; pidList++) {
+				if (*pidList==myPid)
+					continue;
 				if (kill(*pidList, sig) != 0) 
 					fatalError( "Could not kill pid '%d': %s\n", *pidList, strerror(errno));
 			}
diff --git a/procps/kill.c b/procps/kill.c
index db48424..93f02ea 100644
--- a/procps/kill.c
+++ b/procps/kill.c
@@ -222,12 +222,15 @@
 	} 
 #ifdef BB_KILLALL
 	else {
+		pid_t myPid=getpid();
 		/* Looks like they want to do a killall.  Do that */
 		while (--argc >= 0) {
 			pid_t* pidList;
 
 			pidList = findPidByName( *argv);
-			for(; pidList && pidList!=0; pidList++) {
+			for(; pidList && *pidList!=0; pidList++) {
+				if (*pidList==myPid)
+					continue;
 				if (kill(*pidList, sig) != 0) 
 					fatalError( "Could not kill pid '%d': %s\n", *pidList, strerror(errno));
 			}
diff --git a/utility.c b/utility.c
index b844c3b..29934cd 100644
--- a/utility.c
+++ b/utility.c
@@ -1291,12 +1291,21 @@
 
 	/* Now search for a match */
 	for (i=1; i<pid_array[0] ; i++) {
+		char* p;
 		struct pid_info info;
 
 	    info.pid = pid_array[i];
 	    if (ioctl (fd, DEVPS_GET_PID_INFO, &info)<0)
 			fatalError( "\nDEVPS_GET_PID_INFO: %s\n", strerror (errno));
 
+		/* Make sure we only match on the process name */
+		p=info.command_line+1;
+		while ((*p != 0) && !isspace(*(p)) && (*(p-1) != '\\')) { 
+			(p)++;
+		}
+		if (isspace(*(p)))
+				*p='\0';
+
 		if ((strstr(info.command_line, pidName) != NULL)) {
 			pidList=realloc( pidList, sizeof(pid_t) * (j+2));
 			if (pidList==NULL)
@@ -1304,7 +1313,8 @@
 			pidList[j++]=info.pid;
 		}
 	}
-	pidList[j]=0;
+	if (pidList)
+		pidList[j]=0;
 
 	/* Free memory */
 	free( pid_array);
@@ -1343,7 +1353,7 @@
 		FILE *status;
 		char filename[256];
 		char buffer[256];
-		char* p;
+		char* p, *q;
 
 		/* If it isn't a number, we don't want it */
 		if (!isdigit(*next->d_name))
@@ -1358,15 +1368,25 @@
 		fgets(buffer, 256, status);
 		fclose(status);
 
-		if (((p=strstr(buffer, pidName)) != NULL)
-				&& (strncmp(p, pidName, strlen(pidName)) != 0)) {
+		/* Make sure we only match on the process name */
+		p=buffer+5; /* Skip the name */
+		while ((p)++) {
+			if (*p==0 || *p=='\n') {
+				*p='\0';
+				break;
+			}
+		}
+		p=buffer+6; /* Skip the "Name:\t" */
+
+		if (((q=strstr(q, pidName)) != NULL)
+				&& (strncmp(q, pidName, strlen(pidName)) != 0)) {
 			pidList=realloc( pidList, sizeof(pid_t) * (i+2));
 			if (pidList==NULL)
 				fatalError("out of memory\n");
 			pidList[i++]=strtol(next->d_name, NULL, 0);
 		}
 	}
-	if (pidList!=NULL)
+	if (pidList)
 		pidList[i]=0;
 	return pidList;
 }