Index: uspace/lib/c/generic/stats.c
===================================================================
--- uspace/lib/c/generic/stats.c	(revision bbda5ab736025c36aa1ad4f3179adec67abe36e3)
+++ uspace/lib/c/generic/stats.c	(revision e1b674201c97668fa9f3559cca094e0e1865629a)
@@ -43,4 +43,17 @@
 #define SYSINFO_STATS_MAX_PATH  64
 
+/** Thread states
+ *
+ */
+static const char *thread_states[] = {
+	"Invalid",
+	"Running",
+	"Sleeping",
+	"Ready",
+	"Entering",
+	"Exiting",
+	"Lingering"
+};
+
 /** Get CPUs statistics
  *
@@ -125,4 +138,48 @@
 	
 	return stats_task;
+}
+
+/** Get thread IDs
+ *
+ * @param count Number of IDs returned.
+ *
+ * @return Array of IDs (thread_id_t).
+ *         If non-NULL then it should be eventually freed
+ *         by free().
+ *
+ */
+thread_id_t *stats_get_threads(size_t *count)
+{
+	size_t size = 0;
+	thread_id_t *ids =
+	    (thread_id_t *) sysinfo_get_data("system.threads", &size);
+	
+	assert((size % sizeof(thread_id_t)) == 0);
+	
+	*count = size / sizeof(thread_id_t);
+	return ids;
+}
+
+/** Get single thread statistics
+ *
+ * @param thread_id Thread ID we are interested in.
+ *
+ * @return Pointer to the stats_thread_t structure.
+ *         If non-NULL then it should be eventually freed
+ *         by free().
+ *
+ */
+stats_thread_t *stats_get_thread(thread_id_t thread_id)
+{
+	char name[SYSINFO_STATS_MAX_PATH];
+	snprintf(name, SYSINFO_STATS_MAX_PATH, "system.threads.%" PRIu64, thread_id);
+	
+	size_t size = 0;
+	stats_thread_t *stats_thread =
+	    (stats_thread_t *) sysinfo_get_data(name, &size);
+	
+	assert((size == sizeof(stats_thread_t)) || (size == 0));
+	
+	return stats_thread;
 }
 
@@ -188,4 +245,12 @@
 }
 
+const char *thread_get_state(state_t state)
+{
+	if (state <= Lingering)
+		return thread_states[state];
+	
+	return thread_states[Invalid];
+}
+
 /** @}
  */
Index: uspace/lib/c/include/stats.h
===================================================================
--- uspace/lib/c/include/stats.h	(revision bbda5ab736025c36aa1ad4f3179adec67abe36e3)
+++ uspace/lib/c/include/stats.h	(revision e1b674201c97668fa9f3559cca094e0e1865629a)
@@ -37,14 +37,22 @@
 
 #include <task.h>
+#include <thread.h>
+#include <stdint.h>
+#include <bool.h>
 #include <kernel/sysinfo/abi.h>
 
 extern stats_cpu_t *stats_get_cpus(size_t *);
 extern stats_physmem_t *stats_get_physmem(void);
-extern task_id_t *stats_get_tasks(size_t *);
-extern stats_task_t *stats_get_task(task_id_t);
 extern load_t *stats_get_load(size_t *);
 extern sysarg_t stats_get_uptime(void);
 
+extern task_id_t *stats_get_tasks(size_t *);
+extern stats_task_t *stats_get_task(task_id_t);
+
+extern thread_id_t *stats_get_threads(size_t *);
+extern stats_thread_t *stats_get_thread(thread_id_t);
+
 extern void stats_print_load_fragment(load_t, unsigned int);
+extern const char *thread_get_state(state_t);
 
 #endif
