diff -urN psmisc-22.16.org/src/pstree.c psmisc-22.16/src/pstree.c
--- psmisc-22.16.org/src/pstree.c 2012-02-20 00:07:14.000000000 +0100
-+++ psmisc-22.16/src/pstree.c 2012-03-21 18:07:44.000000000 +0100
-@@ -363,12 +363,25 @@
++++ psmisc-22.16/src/pstree.c 2012-03-21 19:37:30.000000000 +0100
+@@ -363,12 +363,27 @@
ppid = 0;
if (isthread)
this->flags |= PFLAG_THREAD;
- if (!(parent = find_proc(ppid)))
+ if (!(parent = find_proc(ppid))) {
-+ PROC *root;
#ifdef WITH_SELINUX
parent = new_proc("?", ppid, 0, scontext);
#else /*WITH_SELINUX */
#endif /*WITH_SELINUX */
+ /* When using kernel 3.3 with hidepid feature enabled on /proc
+ * then we need fake root pid */
-+ if (!(root = find_proc(1))) {
++ if (!isthread && pid != 1) {
++ PROC *root;
++ if (!(root = find_proc(1))) {
+#ifdef WITH_SELINUX
-+ root = new_proc("?", 1, 0, scontext);
++ root = new_proc("?", 1, 0, scontext);
+#else /*WITH_SELINUX */
-+ root = new_proc("?", 1, 0);
++ root = new_proc("?", 1, 0);
+#endif
++ }
+ add_child(root, parent);
+ parent->parent = root;
+ }