diff -Nrux .svn -x work /usr/ports/sysutils/psmisc/Makefile psmisc/Makefile
--- /usr/ports/sysutils/psmisc/Makefile	2010-01-02 08:40:09.000000000 -0800
+++ psmisc/Makefile	2010-05-18 22:39:22.883081611 -0700
@@ -6,28 +6,41 @@
 #
 
 PORTNAME=	psmisc
-PORTVERSION=	22.9
+PORTVERSION=	22.11
 CATEGORIES=	sysutils
 MASTER_SITES=	SF
 MASTER_SITE_SUBDIR=	${PORTNAME}/${PORTNAME}
 
-MAINTAINER=	ports@FreeBSD.org
+MAINTAINER=	douglas@douglasthrift.net
 COMMENT=	A port of the Linux pstree, killall and pidof commands
 
+BUILD_DEPENDS=	gsed:${PORTSDIR}/textproc/gsed
+
 GNU_CONFIGURE=	yes
-CONFIGURE_ARGS=	--disable-nls
 USE_GMAKE=	yes
 
 CONFLICTS=	pstree-2.* \
-		pidof-*
+		pidof-[0-9]*
+
+OPTIONS=	NLS "Native Language Support via gettext utilities" On
+
+.include <bsd.port.pre.mk>
 
-PLIST_FILES=	bin/killall \
-		bin/pidof \
-		bin/pstree bin/pstree.x11
+.if defined(WITHOUT_NLS)
+CONFIGURE_ARGS+=--disable-nls
+PLIST_SUB+=	NLS="@comment "
+.else
+USE_GETTEXT=	yes
+CONFIGURE_ARGS+=--enable-nls
+CPPFLAGS+=	-I${LOCALBASE}/include
+LDFLAGS+=	-L${LOCALBASE}/lib
+CONFIGURE_ENV+=	CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}"
+PLIST_SUB+=	NLS=""
+.endif
 
 MAN1=		pstree.1 killall.1
 
 post-install:
 	@${LN} -sf killall ${PREFIX}/bin/pidof
 
-.include <bsd.port.mk>
+.include <bsd.port.post.mk>
diff -Nrux .svn -x work /usr/ports/sysutils/psmisc/distinfo psmisc/distinfo
--- /usr/ports/sysutils/psmisc/distinfo	2010-01-02 08:40:09.000000000 -0800
+++ psmisc/distinfo	2010-05-18 04:02:47.141686600 -0700
@@ -1,3 +1,3 @@
-MD5 (psmisc-22.9.tar.gz) = c242530de46b951ab10a2237a6048a9c
-SHA256 (psmisc-22.9.tar.gz) = c98aef4bc379790229c54c8e7d97b1d1ab898346bfffcde54fcf585a3e353edd
-SIZE (psmisc-22.9.tar.gz) = 316530
+MD5 (psmisc-22.11.tar.gz) = b5d32aa285b75c59dee96d3ea26a4881
+SHA256 (psmisc-22.11.tar.gz) = 8fff37557f5150d89ef9afc03133731da3eaa2bad1a94f64355218a68b884536
+SIZE (psmisc-22.11.tar.gz) = 375038
diff -Nrux .svn -x work /usr/ports/sysutils/psmisc/files/patch-src-Makefile.in psmisc/files/patch-src-Makefile.in
--- /usr/ports/sysutils/psmisc/files/patch-src-Makefile.in	2010-01-02 08:40:10.000000000 -0800
+++ psmisc/files/patch-src-Makefile.in	2010-05-18 21:35:53.776313591 -0700
@@ -1,5 +1,5 @@
---- src/Makefile.in.orig	2009-12-27 16:19:06.000000000 +0900
-+++ src/Makefile.in	2010-01-03 00:25:56.093987293 +0900
+--- src/Makefile.in.orig	2010-04-08 05:41:34.000000000 -0700
++++ src/Makefile.in	2010-05-18 21:30:06.746914197 -0700
 @@ -34,8 +34,8 @@
  POST_UNINSTALL = :
  build_triplet = @build@
@@ -26,44 +26,37 @@
  ETAGS = etags
  CTAGS = ctags
  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-@@ -208,10 +208,10 @@
- 	$(am__append_4) $(am__append_6)
- fuser_SOURCES = fuser.c comm.h signals.c signals.h i18n.h fuser.h
- killall_SOURCES = killall.c comm.h signals.c signals.h i18n.h
--killall_LDADD = @SELINUX_LIB@
-+killall_LDADD = 
- peekfd_SOURCES = peekfd.c
- pstree_SOURCES = pstree.c comm.h i18n.h
--pstree_LDADD = @TERMCAP_LIB@ @SELINUX_LIB@
-+pstree_LDADD = @TERMCAP_LIB@
- prtstat_SOURCES = prtstat.c prtstat.h
- BUILT_SOURCES = signames.h
- EXTRA_DIST = signames.c 
-@@ -537,13 +537,20 @@
+@@ -290,19 +290,19 @@
+ 	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ fuser$(EXEEXT): $(fuser_OBJECTS) $(fuser_DEPENDENCIES) 
+ 	@rm -f fuser$(EXEEXT)
+-	$(LINK) $(fuser_OBJECTS) $(fuser_LDADD) $(LIBS)
++	$(LINK) $(fuser_OBJECTS) $(fuser_LDADD) $(LIBS) $(INTLLIBS)
+ killall$(EXEEXT): $(killall_OBJECTS) $(killall_DEPENDENCIES) 
+ 	@rm -f killall$(EXEEXT)
+-	$(LINK) $(killall_OBJECTS) $(killall_LDADD) $(LIBS)
++	$(LINK) $(killall_OBJECTS) $(killall_LDADD) $(LIBS) $(INTLLIBS)
+ peekfd$(EXEEXT): $(peekfd_OBJECTS) $(peekfd_DEPENDENCIES) 
+ 	@rm -f peekfd$(EXEEXT)
+-	$(LINK) $(peekfd_OBJECTS) $(peekfd_LDADD) $(LIBS)
++	$(LINK) $(peekfd_OBJECTS) $(peekfd_LDADD) $(LIBS) $(INTLLIBS)
+ prtstat$(EXEEXT): $(prtstat_OBJECTS) $(prtstat_DEPENDENCIES) 
+ 	@rm -f prtstat$(EXEEXT)
+-	$(LINK) $(prtstat_OBJECTS) $(prtstat_LDADD) $(LIBS)
++	$(LINK) $(prtstat_OBJECTS) $(prtstat_LDADD) $(LIBS) $(INTLLIBS)
+ pstree$(EXEEXT): $(pstree_OBJECTS) $(pstree_DEPENDENCIES) 
+ 	@rm -f pstree$(EXEEXT)
+-	$(LINK) $(pstree_OBJECTS) $(pstree_LDADD) $(LIBS)
++	$(LINK) $(pstree_OBJECTS) $(pstree_LDADD) $(LIBS) $(INTLLIBS)
  
+ mostlyclean-compile:
+ 	-rm -f *.$(OBJEXT)
+@@ -538,7 +538,7 @@
  signames.h: signames.c Makefile
  		export LC_ALL=C ; \
--		@CPP@ -dM $< |\
+ 		@CPP@ -dM $< |\
 -		tr -s '\t ' ' ' | sort -n -k 3 | sed \
--	's:#define SIG\([A-Z]\+[0-9]*\) \([0-9]\+\) *\(\|/\*.*\)$$:{\ \2,"\1" },:p;d' | \
--		  grep -v '[0-9][0-9][0-9]' >signames.h || \
--		  { rm -f signames.h; exit 1; }
--		grep '^{ 1,"HUP" },$$' signames.h >/dev/null || \
--		  { rm -f signames.h; exit 1; }
-+		@CPP@ -dM $< | {\
-+			signames=`kill -l | tr a-z A-Z`; \
-+			while read define name value; do \
-+				[ "$$define" = '#define' ] || continue; \
-+				case "$$value" in \
-+				*[!0-9]*) continue; \
-+				esac; \
-+				for signame in $$signames; do \
-+					if [ "$$name" = "SIG$$signame" ]; then \
-+						echo "{ $$value, \"$$signame\" },"; \
-+					fi; \
-+				done; \
-+			done; \
-+		} | sort -n -k 2 > signames.h
- 
- install-exec-hook:
- 		cd $(DESTDIR)$(bindir) && \
++		tr -s '\t ' ' ' | sort -n -k 3 | gsed \
+ 	's:#define SIG\([A-Z]\+[0-9]*\) \([0-9]\+\) *\(\|/\*.*\)$$:{\ \2,"\1" },:p;d' | \
+ 		  grep -v '[0-9][0-9][0-9]' >signames.h || \
+ 		  { rm -f signames.h; exit 1; }
diff -Nrux .svn -x work /usr/ports/sysutils/psmisc/files/patch-src-pstree.c psmisc/files/patch-src-pstree.c
--- /usr/ports/sysutils/psmisc/files/patch-src-pstree.c	2010-01-02 08:40:10.000000000 -0800
+++ psmisc/files/patch-src-pstree.c	2010-05-18 20:03:36.709489357 -0700
@@ -1,14 +1,16 @@
---- src/pstree.c.orig	2009-12-27 15:46:47.000000000 +0900
-+++ src/pstree.c	2010-01-03 00:52:21.437862505 +0900
-@@ -37,6 +37,7 @@
+--- src/pstree.c.orig	2010-04-08 05:20:10.000000000 -0700
++++ src/pstree.c	2010-05-18 07:20:57.583839746 -0700
+@@ -37,6 +37,9 @@
  #include <term.h>
  #include <termios.h>
  #include <langinfo.h>
++#ifdef __FreeBSD__
 +#include <limits.h>
++#endif
  #include <assert.h>
  #include <sys/types.h>
  #include <sys/stat.h>
-@@ -590,7 +591,11 @@
+@@ -590,7 +594,11 @@
    struct dirent *de;
    FILE *file;
    struct stat st;
@@ -20,31 +22,53 @@
    char *buffer;
    size_t buffer_size;
    char readbuf[BUFSIZ + 1];
-@@ -623,7 +628,7 @@
+@@ -623,7 +631,11 @@
      if ((pid = (pid_t) atoi(de->d_name)) != 0) {
        if (! (path = malloc(strlen(PROC_BASE) + strlen(de->d_name) + 10)))
          exit(2);
--      sprintf(path, "%s/%d/stat", PROC_BASE, pid);
-+      sprintf (path, "%s/%d/status", PROC_BASE, pid);
++#ifdef __FreeBSD__
++      sprintf(path, "%s/%d/status", PROC_BASE, pid);
++#else
+       sprintf(path, "%s/%d/stat", PROC_BASE, pid);
++#endif
        if ((file = fopen(path, "r")) != NULL) {
          empty = 0;
          sprintf(path, "%s/%d", PROC_BASE, pid);
-@@ -638,6 +643,10 @@
+@@ -638,6 +650,29 @@
            perror(path);
            exit(1);
          }
 +#ifdef __FreeBSD__
-+        if (fscanf(file, "%s %*d %d", comm, &ppid) == 2)
-+          add_proc(comm, pid, ppid, st.st_uid, NULL, 0, 0);
++        /* Read comm and ppid */
++        if (fscanf(file, "%s %*d %d", readbuf, &ppid) == 2) {
++          tmpptr = readbuf;
++          size = 0;
++          /* Unescape comm */
++          do {
++            if (*tmpptr == '\\')
++            {
++              char tmp = tmpptr[4];
++              tmpptr[4] = 0;
++              comm[size++] = strtol(++tmpptr, NULL, 8);
++              tmpptr += 2;
++              tmpptr[1] = tmp;
++            }
++            else
++              comm[size++] = *tmpptr;
++          } while (*++tmpptr);
++          comm[size] = 0;
++          /* Balance braces */
++          {
++            {
 +#else
          size = fread(readbuf, 1, BUFSIZ, file);
          if (ferror(file) == 0) {
            readbuf[size] = 0;
-@@ -725,6 +734,7 @@
-             }
-           }
-         }
+@@ -692,6 +727,7 @@
+                   (void) closedir(taskdir);
+                 }
+               free(taskpath);
 +#endif /*__FreeBSD__*/
-         (void) fclose(file);
-       }
-       free(path);
+               if (!print_args)
+ #ifdef WITH_SELINUX
+                 add_proc(comm, pid, ppid, st.st_uid, NULL, 0, 0, scontext);
diff -Nrux .svn -x work /usr/ports/sysutils/psmisc/pkg-descr psmisc/pkg-descr
--- /usr/ports/sysutils/psmisc/pkg-descr	2005-10-05 00:49:45.000000000 -0700
+++ psmisc/pkg-descr	2010-05-18 07:57:55.280442813 -0700
@@ -1,4 +1,4 @@
 A port of the Linux pstree, killall and pidof commands.
 Does not include the 'fuser' command.
 
-WWW: http://psmisc.sourceforge.net
+WWW: http://psmisc.sourceforge.net/
diff -Nrux .svn -x work /usr/ports/sysutils/psmisc/pkg-plist psmisc/pkg-plist
--- /usr/ports/sysutils/psmisc/pkg-plist	1969-12-31 16:00:00.000000000 -0800
+++ psmisc/pkg-plist	2010-05-18 22:11:15.201428734 -0700
@@ -0,0 +1,26 @@
+bin/killall
+bin/pidof
+bin/pstree
+bin/pstree.x11
+%%NLS%%share/locale/bg/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/ca/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/cs/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/de/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/el/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/eu/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/fi/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/fr/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/hu/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/id/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/it/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/ja/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/nb/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/nl/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/pl/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/pt/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/ro/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/ru/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/sv/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/vi/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/zh_CN/LC_MESSAGES/psmisc.mo
+%%NLS%%share/locale/zh_TW/LC_MESSAGES/psmisc.mo