diff --git a/applets/busybox.c b/applets/busybox.c
index 4849ba0..d4313ef 100644
--- a/applets/busybox.c
+++ b/applets/busybox.c
@@ -117,6 +117,9 @@
 #ifdef BB_PRINTF		//usr/bin
     {"printf", printf_main},
 #endif
+#ifdef BB_PS			//bin
+    {"ps", ps_main},
+#endif
 #ifdef BB_PWD			//bin
     {"pwd", pwd_main},
 #endif
diff --git a/busybox.c b/busybox.c
index 4849ba0..d4313ef 100644
--- a/busybox.c
+++ b/busybox.c
@@ -117,6 +117,9 @@
 #ifdef BB_PRINTF		//usr/bin
     {"printf", printf_main},
 #endif
+#ifdef BB_PS			//bin
+    {"ps", ps_main},
+#endif
 #ifdef BB_PWD			//bin
     {"pwd", pwd_main},
 #endif
diff --git a/busybox.def.h b/busybox.def.h
index 85d3df1..eec6621 100644
--- a/busybox.def.h
+++ b/busybox.def.h
@@ -38,6 +38,7 @@
 #define BB_MT
 #define BB_MV
 //#define BB_PRINTF
+#define BB_PS
 #define BB_PWD
 #define BB_REBOOT
 #define BB_RM
diff --git a/internal.h b/internal.h
index dcddea0..9b230a3 100644
--- a/internal.h
+++ b/internal.h
@@ -93,6 +93,7 @@
 extern int mt_main(int argc, char** argv);
 extern int mv_main(int argc, char** argv);
 extern int printf_main(int argc, char** argv);
+extern int ps_main(int argc, char** argv);
 extern int pwd_main(int argc, char** argv);
 extern int reboot_main(int argc, char** argv);
 extern int rmdir_main(int argc, char **argv);
diff --git a/more.c b/more.c
index 745ae2b..72d58a6 100644
--- a/more.c
+++ b/more.c
@@ -79,7 +79,7 @@
 	    file = fopen(*argv, "r");
 
 	if (file == NULL) {
-	    perror("Can't open file");
+	    perror(*argv);
 	    exit(FALSE);
 	}
 	fstat(fileno(file), &st);
diff --git a/procps/ps.c b/procps/ps.c
new file mode 100644
index 0000000..b8e4cd3
--- /dev/null
+++ b/procps/ps.c
@@ -0,0 +1,68 @@
+/*
+ * Mini ps implementation for busybox
+ *
+ * Copyright (C) 1998 by Erik Andersen <andersee@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "internal.h"
+#include <unistd.h>
+#include <dirent.h>
+#include <stdio.h>
+
+
+extern int ps_main(int argc, char **argv)
+{
+    DIR *dir;
+    FILE *file;
+    struct dirent *entry;
+
+    if ( argc>1 && **(argv+1) == '-' ) {
+	usage ("ps\n");
+    }
+    
+    dir = opendir("/proc");
+    if (!dir) {
+	perror("Can't open /proc");
+	exit(FALSE);
+    }
+
+    fprintf(stdout, "PID\tUid\tGid\tState\tName\n");
+    while ((entry = readdir(dir)) != NULL) {
+	char psStatus[NAME_MAX];
+	char psName[NAME_MAX]="";
+	char psState[NAME_MAX]="";
+	int psPID=0, psPPID=0, psUid=0, psGid=0;
+	//if (match(entry->d_name, "[0-9]") == FALSE)
+	//    continue;
+	sprintf(psStatus, "/proc/%s/status", entry->d_name);
+	file = fopen( psStatus, "r");
+	if (file == NULL) {
+	    continue;
+	    //perror(psStatus);
+	    //exit( FALSE);
+	}
+	fscanf(file, "Name:\t%s\nState:\t%s\nPid:\t%d\nPPid:\t%d\nUid:\t%d\nGid:\t%d", 
+		psName, psState, &psPID, &psPPID, &psUid, &psGid);
+	fclose(file);
+
+	fprintf(stdout, "%d\t%d\t%d\t%s\t%s\n", psPID, psUid, psGid, psState, psName);
+    }
+    closedir(dir);
+    exit(TRUE);
+}
+
diff --git a/ps.c b/ps.c
new file mode 100644
index 0000000..b8e4cd3
--- /dev/null
+++ b/ps.c
@@ -0,0 +1,68 @@
+/*
+ * Mini ps implementation for busybox
+ *
+ * Copyright (C) 1998 by Erik Andersen <andersee@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "internal.h"
+#include <unistd.h>
+#include <dirent.h>
+#include <stdio.h>
+
+
+extern int ps_main(int argc, char **argv)
+{
+    DIR *dir;
+    FILE *file;
+    struct dirent *entry;
+
+    if ( argc>1 && **(argv+1) == '-' ) {
+	usage ("ps\n");
+    }
+    
+    dir = opendir("/proc");
+    if (!dir) {
+	perror("Can't open /proc");
+	exit(FALSE);
+    }
+
+    fprintf(stdout, "PID\tUid\tGid\tState\tName\n");
+    while ((entry = readdir(dir)) != NULL) {
+	char psStatus[NAME_MAX];
+	char psName[NAME_MAX]="";
+	char psState[NAME_MAX]="";
+	int psPID=0, psPPID=0, psUid=0, psGid=0;
+	//if (match(entry->d_name, "[0-9]") == FALSE)
+	//    continue;
+	sprintf(psStatus, "/proc/%s/status", entry->d_name);
+	file = fopen( psStatus, "r");
+	if (file == NULL) {
+	    continue;
+	    //perror(psStatus);
+	    //exit( FALSE);
+	}
+	fscanf(file, "Name:\t%s\nState:\t%s\nPid:\t%d\nPPid:\t%d\nUid:\t%d\nGid:\t%d", 
+		psName, psState, &psPID, &psPPID, &psUid, &psGid);
+	fclose(file);
+
+	fprintf(stdout, "%d\t%d\t%d\t%s\t%s\n", psPID, psUid, psGid, psState, psName);
+    }
+    closedir(dir);
+    exit(TRUE);
+}
+
diff --git a/util-linux/more.c b/util-linux/more.c
index 745ae2b..72d58a6 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -79,7 +79,7 @@
 	    file = fopen(*argv, "r");
 
 	if (file == NULL) {
-	    perror("Can't open file");
+	    perror(*argv);
 	    exit(FALSE);
 	}
 	fstat(fileno(file), &st);
