Index: pixmaps/24x24/Makefile.am
===================================================================
--- pixmaps/24x24/Makefile.am	(revision 5069)
+++ pixmaps/24x24/Makefile.am	(working copy)
@@ -1,36 +1,27 @@
 # This file will be processed with automake-1.7 to create Makefile.in
 
-themedir = $(pkgdatadir)/icons/hicolor
-size = 24x24
-
-actionsicondir = $(themedir)/$(size)/actions
-dist_actionsicon_DATA = \
+icons = \
+	preferences-desktop-locale.png \
+	preferences-desktop-remote-desktop.png \
 	system-log-out.png \
 	system-restart.png \
 	system-shut-down.png \
-	system-suspend.png
-
-appsicondir = $(themedir)/$(size)/apps
-dist_appsicon_DATA = \
-	preferences-desktop-locale.png \
-	preferences-desktop-remote-desktop.png
-
-placesicondir = $(themedir)/$(size)/places
-dist_placesicon_DATA = \
+	system-suspend.png \
 	user-desktop.png
 
-MAINTAINERCLEANFILES = \
-	Makefile.in
+icon_names = \
+	preferences_desktop_locale_24 $(srcdir)/preferences-desktop-locale.png \
+	preferences_desktop_remote_desktop_24 $(srcdir)/preferences-desktop-remote-desktop.png \
+	system_log_out_24 $(srcdir)/system-log-out.png \
+	system_restart_24 $(srcdir)/system-restart.png \
+	system_shut_down_24 $(srcdir)/system-shut-down.png \
+	system_suspend_24 $(srcdir)/system-suspend.png \
+	user_desktop_24 $(srcdir)/user-desktop.png
 
-gtk_update_icon_cache = gtk-update-icon-cache -f -t $(themedir)
-install-data-hook: update-icon-cache
-uninstall-hook: update-icon-cache
-update-icon-cache:
-	@-if test -z "$(DESTDIR)"; then \
-		echo "Updating Gtk icon cache."; \
-		$(gtk_update_icon_cache); \
-	else \
-		echo "*** Icon cache not updated.  After (un)install, run this:"; \
-		echo "***   $(gtk_update_icon_cache)"; \
-	fi
+EXTRA_DIST = $(icons)
+BUILT_SOURCES = inlines.h
+CLEANFILES = $(BUILT_SOURCES)
 
+inlines.h: $(icons)
+	gdk-pixbuf-csource --raw --build-list $(icon_names) > $@
+
Index: gui/gdmlogin.c
===================================================================
--- gui/gdmlogin.c	(revision 5069)
+++ gui/gdmlogin.c	(working copy)
@@ -3169,6 +3169,8 @@
     gdm_common_log_init ();
     gdm_common_log_set_debug (gdm_config_get_bool (GDM_KEY_DEBUG));
 
+    gdm_common_setup_builtin_icons ();
+
     /* Read all configuration at once, so the values get cached */
     gdm_read_config ();
 
Index: gui/greeter/greeter.c
===================================================================
--- gui/greeter/greeter.c	(revision 5069)
+++ gui/greeter/greeter.c	(working copy)
@@ -1273,6 +1273,8 @@
   gdm_common_log_init ();
   gdm_common_log_set_debug (gdm_config_get_bool (GDM_KEY_DEBUG));
 
+  gdm_common_setup_builtin_icons ();
+
   /* Read all configuration at once, so the values get cached */
   gdm_read_config ();
 
@@ -1287,9 +1289,6 @@
 	  gdm_set_theme (gdm_gtk_theme);
   }
 
-  gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
-                                     GDM_DATADIR G_DIR_SEPARATOR_S "icons");
-
   gdm_wm_screen_init (gdm_config_get_int (GDM_KEY_XINERAMA_SCREEN));
   
   r = verify_gdm_version ();
Index: gui/gdmcommon.c
===================================================================
--- gui/gdmcommon.c	(revision 5069)
+++ gui/gdmcommon.c	(working copy)
@@ -48,6 +48,8 @@
 #include "gdm-socket-protocol.h"
 #include "gdm-daemon-config-keys.h"
 
+#include "pixmaps/24x24/inlines.h"
+
 gint gdm_timed_delay = 0;
 static Atom AT_SPI_IOR;
 
@@ -206,6 +208,49 @@
 }
 
 void
+gdm_common_setup_builtin_icons (void)
+{
+        typedef struct 
+        {
+                const char *id;
+                gint size;
+                const guint8 *data;
+        } GdmThemeIcon;
+
+	static const GdmThemeIcon builtins[] =
+	{
+		{"preferences-desktop-locale", 24, preferences_desktop_locale_24},
+		{"preferences-desktop-remote-desktop", 24, preferences_desktop_remote_desktop_24},
+		{"system-log-out", 24, system_log_out_24},
+		{"system-restart", 24, system_restart_24},
+		{"system-shut-down", 24, system_shut_down_24},
+		{"system-suspend", 24, system_suspend_24},
+		{"user-desktop", 24, user_desktop_24}
+	};
+
+	static gboolean icons_setup = FALSE;
+	int i;
+
+	if (icons_setup)
+		return;
+	icons_setup = TRUE;
+
+	for (i = 0; i < (int) G_N_ELEMENTS (builtins); ++i)
+	{
+		GdkPixbuf *pixbuf;
+
+		pixbuf = gdk_pixbuf_new_from_inline (-1, builtins[i].data,
+						     FALSE, NULL);
+
+		gtk_icon_theme_add_builtin_icon (builtins[i].id,
+						 builtins[i].size,
+						 pixbuf);
+
+		g_object_unref (G_OBJECT (pixbuf));
+	}
+}
+
+void
 gdm_common_login_sound (const gchar *GdmSoundProgram,
 			const gchar *GdmSoundOnLoginReadyFile,
 			gboolean     GdmSoundOnLoginReady)
Index: gui/gdmcommon.h
===================================================================
--- gui/gdmcommon.h	(revision 5069)
+++ gui/gdmcommon.h	(working copy)
@@ -47,6 +47,8 @@
 /* Misc. Common Functions */
 void	  gdm_common_setup_cursor	    (GdkCursorType type);
 
+void      gdm_common_setup_builtin_icons    (void);
+
 void      gdm_common_login_sound            (const gchar *GdmSoundProgram,
                                              const gchar *GdmSoundOnLoginReadyFile,
                                              gboolean     GdmSoundOnLoginReady);
Index: gui/gdmchooser.c
===================================================================
--- gui/gdmchooser.c	(revision 5069)
+++ gui/gdmchooser.c	(working copy)
@@ -1982,6 +1982,8 @@
 	gdm_common_log_init ();
 	gdm_common_log_set_debug (gdm_config_get_bool (GDM_KEY_DEBUG));
 
+	gdm_common_setup_builtin_icons ();
+
 	/* Read all configuration at once, so the values get cached */
 	gdm_read_config ();
 
