Index: uspace/lib/posix/sys/wait.c
===================================================================
--- uspace/lib/posix/sys/wait.c	(revision 4cf8ca61cc35aeda46798f204c02a5e2e8af6c09)
+++ uspace/lib/posix/sys/wait.c	(revision 955c2b0051040bfbd062e5c3d182ad78cff2ed77)
@@ -39,4 +39,31 @@
 #include "wait.h"
 
+#include "../libc/task.h"
+#include "../assert.h"
+#include "../errno.h"
+#include "../limits.h"
+#include "../signal.h"
+
+int __posix_wifexited(int status) {
+	return status != INT_MIN;
+}
+
+int __posix_wexitstatus(int status) {
+	assert(__posix_wifexited(status));
+	return status;
+}
+
+int __posix_wifsignaled(int status) {
+	return status == INT_MIN;
+}
+
+int __posix_wtermsig(int status) {
+	assert(__posix_wifsignaled(status));
+	/* There is no way to distinguish reason
+	 * for unexpected termination at the moment.
+	 */
+	return SIGABRT;
+}
+
 /**
  * 
@@ -46,6 +73,7 @@
 posix_pid_t posix_wait(int *stat_ptr)
 {
-	// TODO: low priority, just a compile-time dependency of binutils
-	not_implemented();
+	/* HelenOS does not support this. */
+	errno = ENOSYS;
+	return (posix_pid_t) -1;
 }
 
@@ -59,6 +87,28 @@
 posix_pid_t posix_waitpid(posix_pid_t pid, int *stat_ptr, int options)
 {
-	// TODO: low priority, just a compile-time dependency of binutils
-	not_implemented();
+	assert(stat_ptr != NULL);
+	assert(options == 0 /* None of the options are supported. */);
+	
+	task_exit_t texit;
+	int retval;
+	
+	int rc = task_wait((task_id_t) pid, &texit, &retval);
+	
+	if (rc < 0) {
+		/* Unable to retrieve status. */
+		errno = -rc;
+		return (posix_pid_t) -1;
+	}
+	
+	if (texit == TASK_EXIT_NORMAL) {
+		// FIXME: relies on application not returning this value
+		assert(retval != INT_MIN);
+		*stat_ptr = retval;
+	} else {
+		/* Reserve the lowest value for unexpected termination. */
+		*stat_ptr = INT_MIN;
+	}
+	
+	return pid;
 }
 
Index: uspace/lib/posix/sys/wait.h
===================================================================
--- uspace/lib/posix/sys/wait.h	(revision 4cf8ca61cc35aeda46798f204c02a5e2e8af6c09)
+++ uspace/lib/posix/sys/wait.h	(revision 955c2b0051040bfbd062e5c3d182ad78cff2ed77)
@@ -38,4 +38,18 @@
 #include "types.h"
 
+#undef WIFEXITED
+#undef WEXITSTATUS
+#undef WIFSIGNALED
+#undef WTERMSIG
+#define WIFEXITED(status) __posix_wifexited(status)
+#define WEXITSTATUS(status) __posix_wexitstatus(status)
+#define WIFSIGNALED(status) __posix_wifsignaled(status)
+#define WTERMSIG(status) __posix_wtermsig(status)
+
+extern int __posix_wifexited(int status);
+extern int __posix_wexitstatus(int status);
+extern int __posix_wifsignaled(int status);
+extern int __posix_wtermsig(int status);
+
 extern posix_pid_t posix_wait(int *stat_ptr);
 extern posix_pid_t posix_waitpid(posix_pid_t pid, int *stat_ptr, int options);
@@ -43,5 +57,5 @@
 #ifndef LIBPOSIX_INTERNAL
 	#define wait posix_wait
-	#define waitpid	posix_waitpid
+	#define waitpid posix_waitpid
 #endif
 
