diff --git a/.gitignore b/.gitignore
index 96b489e01c7fb4d640267629dea4b1845fdb62b9..8979e3ea57028d92c69c0df04963e9de3fc085f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
+*~
 *.gmo
-stamp-it
 .deps
 .libs
 stamp-h1
@@ -13,9 +13,6 @@ test-menu-spec
 *.so
 gtk-doc.make
 install-sh
-intltool-extract.in
-intltool-merge.in
-intltool-update.in
 libtool
 ltmain.sh
 missing
@@ -40,7 +37,6 @@ docs/reference/html/*
 docs/reference/tmpl/*
 docs/reference/xml/*
 docs/reference/garcon.actions
-po/.intltool-merge-cache
 aclocal.m4
 autom4te.cache
 compile
@@ -49,6 +45,7 @@ config.h
 config.h.in
 config.h.in~
 config.log
+config.rpath
 config.status
 config.sub
 configure
@@ -58,8 +55,21 @@ ChangeLog
 depcomp
 garcon-1.pc
 garcon-config.h
+ABOUT-NLS
 INSTALL
-POTFILES
+m4/
+po/POTFILES
+po/stamp-po
+po/Makevars.template
+po/Rules-quot
+po/boldquot.sed
+po/en@boldquot.header
+po/en@quot.header
+po/insert-header.sin
+po/quot.sed
+po/remove-potcdate.sed
+po/remove-potcdate.sin
+po/garcon.pot
 data/xfce/xfce-accessories.directory
 data/xfce/xfce-development.directory
 data/xfce/xfce-education.directory
@@ -89,4 +99,3 @@ m4/libtool.m4
 m4/lt*.m4
 tests/test-display-menu
 tests/test-display-menu-gtk3
-po/.intltool-merge-cache*
diff --git a/Makefile.am b/Makefile.am
index cd44def3629ea22f54b947df306d44fea4129fc7..109b709e18dc08d23fe0e76b4d96a9b3cd5fd553 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -50,18 +50,8 @@ EXTRA_DIST =								\
 	COPYING								\
 	ChangeLog							\
 	NEWS								\
-	README.md							\
-	intltool-extract.in						\
-	intltool-merge.in						\
-	intltool-update.in                                              \
 	m4/introspection.m4
 
-DISTCLEANFILES =							\
-	intltool-extract						\
-	intltool-merge							\
-	intltool-update \
-	po/.intltool-merge-cache.lock
-
 DISTCHECK_CONFIGURE_FLAGS =						\
 	--enable-gtk-doc                                                \
 	--enable-introspection
diff --git a/autogen.sh b/autogen.sh
index 1fe6d9399bb4581f77138c87ff3366a86022850d..f39d66384035f2bea70a1e3f96f13fb23a860300 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -32,6 +32,6 @@ EOF
   exit 1
 }
 
-XDT_AUTOGEN_REQUIRED_VERSION="4.7.2" exec xdt-autogen "$@"
+XDT_AUTOGEN_REQUIRED_VERSION="4.17.0" exec xdt-autogen "$@"
 
 # vi:set ts=2 sw=2 et ai:
diff --git a/configure.ac.in b/configure.ac.in
index 12898ca86a45287f84a7c8f34a58339202fe11d9..48232a521921f5daee0a4088bd9567e80d0067c8 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -35,11 +35,6 @@ dnl *** Full debug support for GIT snapshots ***
 dnl ********************************************
 m4_define([garcon_debug_default], [ifelse(garcon_version_tag(), [git], [yes], [minimum])])
 
-dnl ****************************
-dnl *** For intltool support ***
-dnl ****************************
-m4_define([intltool_minimum_version], [0.51])
-
 dnl ***************************
 dnl *** Initialize autoconf ***
 dnl ***************************
@@ -86,7 +81,6 @@ dnl ********************************
 AM_PROG_AS()
 AC_PROG_CC()
 AC_PROG_INSTALL()
-IT_PROG_INTLTOOL([intltool_minimum_version])
 AM_PROG_CC_C_O()
 
 dnl **************************
@@ -106,12 +100,16 @@ dnl ************************************
 dnl *** Check for standard functions ***
 dnl ************************************
 AC_FUNC_MMAP()
-dnl AC_CHECK_FUNCS([])
+AC_CHECK_FUNCS([bind_textdomain_codeset])
 
 dnl ******************************
 dnl *** Check for i18n support ***
 dnl ******************************
-XDT_I18N([@LINGUAS@])
+GETTEXT_PACKAGE="$PACKAGE"
+AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [Name of default gettext domain])
+AC_SUBST([GETTEXT_PACKAGE])
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION([0.19.8])
 
 dnl ***********************************
 dnl *** Check for required packages ***
diff --git a/data/xfce/Makefile.am b/data/xfce/Makefile.am
index 78e92386216d65eb3b98dffd5342495f0dd2a8a3..5b2ceed227ecf1a448dd14b03e2fb91a5043e681 100644
--- a/data/xfce/Makefile.am
+++ b/data/xfce/Makefile.am
@@ -40,7 +40,9 @@ directory_in_files =							\
 	xfce-system.directory.in
 
 directory_DATA = $(directory_in_files:.directory.in=.directory)
-@INTLTOOL_DIRECTORY_RULE@
+
+%.directory: %.directory.in
+	$(AM_V_GEN) $(MSGFMT) --desktop --template $< -d $(top_srcdir)/po -o $@
 
 EXTRA_DIST =								\
 	$(directory_in_files)						\
diff --git a/data/xfce/xfce-accessories.directory.in b/data/xfce/xfce-accessories.directory.in
index 3462782907015ed26fa16a25f1bfe72544023991..7ff3bf670c94b3b553c744d48805fcea7d72843b 100644
--- a/data/xfce/xfce-accessories.directory.in
+++ b/data/xfce/xfce-accessories.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-accessories
-_Name=Accessories
-_Comment=Common desktop tools and applications
+Name=Accessories
+Comment=Common desktop tools and applications
diff --git a/data/xfce/xfce-development.directory.in b/data/xfce/xfce-development.directory.in
index 57244bb0a2e94fa0739c47346fcc377ce9e8864b..320159f164014a22a41c1643de91d473851550b8 100644
--- a/data/xfce/xfce-development.directory.in
+++ b/data/xfce/xfce-development.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-development
-_Name=Development
-_Comment=Software development tools
+Name=Development
+Comment=Software development tools
diff --git a/data/xfce/xfce-education.directory.in b/data/xfce/xfce-education.directory.in
index 344af5f675eea74cc3fe6828472a598c8fbfa2a2..5c9f0fc51df9bd4e45faf4ce27afaf4e8f5ef96f 100644
--- a/data/xfce/xfce-education.directory.in
+++ b/data/xfce/xfce-education.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-science
-_Name=Education
-_Comment=Educational software
+Name=Education
+Comment=Educational software
diff --git a/data/xfce/xfce-games.directory.in b/data/xfce/xfce-games.directory.in
index 3c65494a27e55a1a474d4481539ebf91fa9babe8..b8ca553bd9fcdfe534a9e86c92838795eb9b6548 100644
--- a/data/xfce/xfce-games.directory.in
+++ b/data/xfce/xfce-games.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-games
-_Name=Games
-_Comment=Games, puzzles, and other fun software
+Name=Games
+Comment=Games, puzzles, and other fun software
diff --git a/data/xfce/xfce-graphics.directory.in b/data/xfce/xfce-graphics.directory.in
index 4869ab7d8216ccef258a100d4ab25cdb8b26048d..e50473905c60862923ecfddbd851dcd9ea5146dc 100644
--- a/data/xfce/xfce-graphics.directory.in
+++ b/data/xfce/xfce-graphics.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-graphics
-_Name=Graphics
-_Comment=Graphics creation and manipulation applications
+Name=Graphics
+Comment=Graphics creation and manipulation applications
diff --git a/data/xfce/xfce-hardware.directory.in b/data/xfce/xfce-hardware.directory.in
index aedc0ca15223104b43d8faa0f5dda4c3f8f980e1..e00b58296fafeef8fd79114c6fc700b4f0d4d343 100644
--- a/data/xfce/xfce-hardware.directory.in
+++ b/data/xfce/xfce-hardware.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=preferences-desktop-peripherals
-_Name=Hardware
-_Comment=Settings for several hardware devices
+Name=Hardware
+Comment=Settings for several hardware devices
diff --git a/data/xfce/xfce-multimedia.directory.in b/data/xfce/xfce-multimedia.directory.in
index 93229bbb12997cee0122d5e457ef8735c23d84ac..acc3e8508a47090100c11f004ae4993df3fbb1f6 100644
--- a/data/xfce/xfce-multimedia.directory.in
+++ b/data/xfce/xfce-multimedia.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-multimedia
-_Name=Multimedia
-_Comment=Audio and video players and editors
+Name=Multimedia
+Comment=Audio and video players and editors
diff --git a/data/xfce/xfce-network.directory.in b/data/xfce/xfce-network.directory.in
index f20b660226889fc9c698521a4b22a75ef57d4b68..cf1923c37884dfaac615ec44fad8f7311683ecfb 100644
--- a/data/xfce/xfce-network.directory.in
+++ b/data/xfce/xfce-network.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-internet
-_Name=Internet
-_Comment=Applications for Internet access
+Name=Internet
+Comment=Applications for Internet access
diff --git a/data/xfce/xfce-office.directory.in b/data/xfce/xfce-office.directory.in
index f35ba4f613eabbce470031e369a608d76e04cfd5..22e4e90f3c9e2291fe4bd16b99b7b24a4bcc7b71 100644
--- a/data/xfce/xfce-office.directory.in
+++ b/data/xfce/xfce-office.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-office
-_Name=Office
-_Comment=Office and productivity applications
+Name=Office
+Comment=Office and productivity applications
diff --git a/data/xfce/xfce-other.directory.in b/data/xfce/xfce-other.directory.in
index 3b6fc9da48ca94a8630a2e05a90b3bd75c2a71af..64f401a6bc42f2f2f30e5b617e70f6c2bf29b584 100644
--- a/data/xfce/xfce-other.directory.in
+++ b/data/xfce/xfce-other.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-other
-_Name=Other
-_Comment=Applications that don't fit into other categories
+Name=Other
+Comment=Applications that don't fit into other categories
diff --git a/data/xfce/xfce-personal.directory.in b/data/xfce/xfce-personal.directory.in
index 41c7bfe6f77bb87a847b3251faaf7a3c6d932068..31af479fe398c91fe67185a8af50a3396cf85cf7 100644
--- a/data/xfce/xfce-personal.directory.in
+++ b/data/xfce/xfce-personal.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=preferences-desktop-personal
-_Name=Personal
-_Comment=Personal settings
+Name=Personal
+Comment=Personal settings
diff --git a/data/xfce/xfce-science.directory.in b/data/xfce/xfce-science.directory.in
index 1a3b395e63754c8288718a1b430579cb316cc4de..c2cdc558e859526e6cba2cea128c27a4363c0313 100644
--- a/data/xfce/xfce-science.directory.in
+++ b/data/xfce/xfce-science.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-science
-_Name=Science
-_Comment=Scientific software
+Name=Science
+Comment=Scientific software
diff --git a/data/xfce/xfce-screensavers.directory.in b/data/xfce/xfce-screensavers.directory.in
index 5c0f3607f574c845b217c4cd93dfc0401d5837bf..1826e1f37978ba5745c9cb26f186b81a6a4a54da 100644
--- a/data/xfce/xfce-screensavers.directory.in
+++ b/data/xfce/xfce-screensavers.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=preferences-desktop-screensaver
-_Name=Screensavers
-_Comment=Screensaver applets
+Name=Screensavers
+Comment=Screensaver applets
diff --git a/data/xfce/xfce-settings.directory.in b/data/xfce/xfce-settings.directory.in
index 24134c16e74d6a490a4ab2220c5a0a8737873014..162ee64dccef031a0de83271f38533472f18b52b 100644
--- a/data/xfce/xfce-settings.directory.in
+++ b/data/xfce/xfce-settings.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=preferences-desktop
-_Name=Settings
-_Comment=Desktop and system settings applications
+Name=Settings
+Comment=Desktop and system settings applications
diff --git a/data/xfce/xfce-system.directory.in b/data/xfce/xfce-system.directory.in
index c8d0e114c92127c1c059687b7b44b4b5d05d8914..39125789888265a865049dad9ac0935716e8c94b 100644
--- a/data/xfce/xfce-system.directory.in
+++ b/data/xfce/xfce-system.directory.in
@@ -2,5 +2,5 @@
 Version=1.0
 Type=Directory
 Icon=applications-system
-_Name=System
-_Comment=System tools and utilities
+Name=System
+Comment=System tools and utilities
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000000000000000000000000000000000000..e6bc9f9fc4155808d146ba1376f8b12267bb2d72
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,65 @@
+am
+ar
+ast
+be
+bg
+bn
+ca
+cs
+cy
+da
+de
+el
+en_AU
+en_GB
+eo
+es
+et
+eu
+fi
+fr
+gl
+he
+hi
+hr
+hu
+hy_AM
+hye
+hy
+id
+ie
+is
+it
+ja
+kab
+ka
+kk
+ko
+lt
+lv
+ms
+nb
+nl
+nn
+oc
+pa
+pl
+pt_BR
+pt
+ro
+ru
+sk
+sl
+sq
+sr
+sv
+te
+th
+tr
+ug
+uk
+uz@Latn
+uz
+zh_CN
+zh_HK
+zh_TW
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000000000000000000000000000000000000..6a5044a263901ccaa019b10bd56ec191fc0dbe91
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,80 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ \
+	--keyword=C_:1c,2 --keyword=NC_:1c,2 --keyword=g_dngettext:2,3 \
+	--add-comments
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = The Xfce development team.
+
+# This tells whether or not to prepend "GNU " prefix to the package
+# name that gets inserted into the header of the $(DOMAIN).pot file.
+# Possible values are "yes", "no", or empty.  If it is empty, try to
+# detect it automatically by scanning the files in $(top_srcdir) for
+# "GNU packagename" string.
+PACKAGE_GNU = no
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context.  Possible values are "yes" and "no".  Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+#   --previous            to keep previous msgids of translated messages,
+#   --quiet               to reduce the verbosity.
+MSGMERGE_OPTIONS =
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed.  Possible values are "yes" and "no".  Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = no
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist".  Possible values are "yes" and
+# "no".  Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = no
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 4bd5ad6bdc5cfea20645adb3e01bbcd04917a48a..23e4b1cfa49bc7f780ad3f61c167bca434f1c66e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -28,5 +28,3 @@ garcon/garcon-menu-separator.c
 garcon/garcon-menu-tree-provider.c
 garcon/garcon-private.c
 garcon-gtk/garcon-gtk-menu.c
-tests/test-menu-parser.c
-tests/test-menu-spec.c
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
deleted file mode 100644
index 950bbf956b7dbc66d755b6462d9eb70ea70fb3bf..0000000000000000000000000000000000000000
--- a/po/POTFILES.skip
+++ /dev/null
@@ -1,2 +0,0 @@
-tdb/spinlock.c
-tests/test-display-menu.c