--- /dev/null
+diff --git a/configure.ac b/configure.ac
+index 2693ce7..44780a2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -467,6 +467,10 @@ AC_ARG_WITH(module-dir, AS_HELP_STRING([--with-module-dir=DIR],
+ [Directory where modules are installed (default: $libdir/xorg/modules)]),
+ [ moduledir="$withval" ],
+ [ moduledir="${libdir}/xorg/modules" ])
++AC_ARG_WITH(extra-module-dir,AS_HELP_STRING([--with-extra-module-dir=DIR],
++ [Extra module directory to search for modules before the default one (default: empty)]),
++ [ extra_moduledir="$withval" ],
++ [ extra_moduledir="" ])
+ AC_ARG_WITH(log-dir, AS_HELP_STRING([--with-log-dir=DIR],
+ [Directory where log files are kept (default: $localstatedir/log)]),
+ [ logdir="$withval" ],
+@@ -1751,6 +1755,7 @@ if test "x$XORG" = xyes; then
+ AC_DEFINE_DIR(XF86CONFIGFILE, XF86CONFIGFILE, [Name of configuration file])
+ AC_DEFINE_DIR(__XCONFIGDIR__, XF86CONFIGDIR, [Name of configuration directory])
+ AC_DEFINE_DIR(DEFAULT_MODULE_PATH, moduledir, [Default module search path])
++ AC_DEFINE_DIR(EXTRA_MODULE_PATH, extra_moduledir, [Extra module search path, searched before the default one])
+ AC_DEFINE_DIR(DEFAULT_LIBRARY_PATH, libdir, [Default library install path])
+ AC_DEFINE_DIR(DEFAULT_LOGPREFIX, LOGPREFIX, [Default log location])
+ AC_DEFINE_UNQUOTED(__VENDORDWEBSUPPORT__, ["$VENDOR_WEB"], [Vendor web address for support])
+diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
+index ec679df..8ae85ab 100644
+--- a/hw/xfree86/common/xf86Config.c
++++ b/hw/xfree86/common/xf86Config.c
+@@ -647,11 +647,22 @@ configFiles(XF86ConfFilesPtr fileconf)
+
+ /* ModulePath */
+
+- if (fileconf) {
+- if (xf86ModPathFrom != X_CMDLINE && fileconf->file_modulepath) {
++ if (xf86ModPathFrom != X_CMDLINE) {
++ if (fileconf && fileconf->file_modulepath) {
+ xf86ModulePath = fileconf->file_modulepath;
+ xf86ModPathFrom = X_CONFIG;
+ }
++ else if (strcmp(xf86ExtraModulePath, "") != 0) {
++ char *newpath = malloc(strlen(xf86ExtraModulePath)
++ + strlen(xf86ModulePath)
++ + 2);
++
++ strcpy(newpath, xf86ExtraModulePath);
++ strcat(newpath, ",");
++ strcat(newpath, xf86ModulePath);
++
++ xf86ModulePath = newpath;
++ }
+ }
+
+ xf86Msg(xf86ModPathFrom, "ModulePath set to \"%s\"\n", xf86ModulePath);
+diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
+index 0071004..13c403f 100644
+--- a/hw/xfree86/common/xf86Globals.c
++++ b/hw/xfree86/common/xf86Globals.c
+@@ -136,6 +136,7 @@ xf86InfoRec xf86Info = {
+ const char *xf86ConfigFile = NULL;
+ const char *xf86ConfigDir = NULL;
+ const char *xf86ModulePath = DEFAULT_MODULE_PATH;
++const char *xf86ExtraModulePath = EXTRA_MODULE_PATH;
+ MessageType xf86ModPathFrom = X_DEFAULT;
+ const char *xf86LogFile = DEFAULT_LOGPREFIX;
+ MessageType xf86LogFileFrom = X_DEFAULT;
+diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
+index 8d9cb55..fc057b3 100644
+--- a/hw/xfree86/common/xf86Priv.h
++++ b/hw/xfree86/common/xf86Priv.h
+@@ -77,6 +77,7 @@ extern _X_EXPORT const char *xf86ServerName;
+
+ extern _X_EXPORT xf86InfoRec xf86Info;
+ extern _X_EXPORT const char *xf86ModulePath;
++extern _X_EXPORT const char *xf86ExtraModulePath;
+ extern _X_EXPORT MessageType xf86ModPathFrom;
+ extern _X_EXPORT const char *xf86LogFile;
+ extern _X_EXPORT MessageType xf86LogFileFrom;
+diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
+index 2cc416a..4722023 100644
+--- a/include/xorg-config.h.in
++++ b/include/xorg-config.h.in
+@@ -42,6 +42,9 @@
+ /* Path to loadable modules. */
+ #undef DEFAULT_MODULE_PATH
+
++/* Path to extra loadable modules. */
++#undef EXTRA_MODULE_PATH
++
+ /* Path to installed libraries. */
+ #undef DEFAULT_LIBRARY_PATH
+