diff -Naur lxlauncher-0.2/src/lxlauncher.c lxlauncher-0.2.enrico/src/lxlauncher.c
--- lxlauncher-0.2/src/lxlauncher.c	2008-06-15 16:55:15.000000000 +0100
+++ lxlauncher-0.2.enrico/src/lxlauncher.c	2009-01-08 17:08:33.000000000 +0000
@@ -601,6 +601,69 @@
 	}
 }
 
+// Load: $XDG_CONFIG_DIRS/menus/${XDG_MENU_PREFIX}applications.menu
+static const gchar* find_menu()
+{
+	static gchar candidate[PATH_MAX];
+
+	// Build the config_home directory
+	gchar config_home[PATH_MAX];
+	const gchar* prefix = g_getenv("XDG_CONFIG_HOME");
+	if (prefix == NULL)
+	{
+		const gchar* home = g_getenv("HOME");
+		if (home == NULL)
+			config_home[0] = 0;
+		else
+		{
+			g_strlcpy(config_home, home, PATH_MAX);
+			g_strlcat(config_home, "/.config", PATH_MAX);
+		}
+	}
+	else
+		g_strlcpy(config_home, prefix, PATH_MAX);
+
+	// Build the menu file name
+	gchar menuname[PATH_MAX];
+	prefix = g_getenv("XDG_MENU_PREFIX");
+	if (prefix == NULL)
+		g_strlcpy(menuname, "applications.menu", PATH_MAX);
+	else
+	{
+		g_strlcpy(menuname, prefix, PATH_MAX);
+		g_strlcat(menuname, "applications.menu", PATH_MAX);
+	}
+
+	// Look for it in $XDG_CONFIG_HOME/menus/
+	g_strlcpy(candidate, config_home, PATH_MAX);
+	g_strlcat(candidate, "/menus/", PATH_MAX);
+	g_strlcat(candidate, menuname, PATH_MAX);
+	if (g_file_test(candidate, G_FILE_TEST_EXISTS))
+		return candidate;
+
+	// Else, iterate $XDG_CONFIG_DIRS or "/etc/xdg"
+	prefix = g_getenv("XDG_CONFIG_DIRS");
+	if (prefix == NULL)
+		prefix = "/etc/xdg";
+
+	gchar** paths = g_strsplit(prefix, ":", 0);
+	int found = 0;
+	size_t i;
+	for (i = 0; paths[i] != NULL && !found; ++i)
+	{
+		g_strlcpy(candidate, paths[i], PATH_MAX);
+		g_strlcat(candidate, "/menus/", PATH_MAX);
+		g_strlcat(candidate, menuname, PATH_MAX);
+		if (g_file_test(candidate, G_FILE_TEST_EXISTS))
+			found = 1;
+	}
+	g_strfreev(paths);
+	if (!found)
+		return DATA_DIR"/launcher.menu";
+	else
+		return candidate;
+}
+
 int main(int argc, char** argv)
 {
 	int i;
@@ -645,7 +708,9 @@
 	tooltips = gtk_tooltips_new();
 	g_object_ref_sink( tooltips );
 
-    menu_tree = gmenu_tree_lookup( DATA_DIR"/launcher.menu", GMENU_TREE_FLAGS_NONE );
+	const gchar* menu_location = find_menu();
+	fprintf(stderr, "LOC %s\n", menu_location);
+	menu_tree = gmenu_tree_lookup(menu_location, GMENU_TREE_FLAGS_NONE );
     gmenu_tree_add_monitor( menu_tree, on_menu_tree_changed, NULL );
 
     create_notebook_pages();

