Index: pixmaps/addressbook.png (deleted)
===================================================================
Index: pixmaps/speaker-phone.png (deleted)
===================================================================
Index: pixmaps/control-panel.png (deleted)
===================================================================
Index: pixmaps/contact-new.png (deleted)
===================================================================
Index: pixmaps/emoticon-sad-devil.png (deleted)
===================================================================
Index: pixmaps/system-users.png (deleted)
===================================================================
Index: pixmaps/text_logo.xpm (deleted)
===================================================================
Index: pixmaps/system-search.png (deleted)
===================================================================
Index: pixmaps/emoticon-face1.png (deleted)
===================================================================
Index: pixmaps/emoticon-face2.png (deleted)
===================================================================
Index: pixmaps/emoticon-face3.png (deleted)
===================================================================
Index: pixmaps/emoticon-face4.png (deleted)
===================================================================
Index: pixmaps/calls-history.png (deleted)
===================================================================
Index: pixmaps/emoticon-face5.png (deleted)
===================================================================
Index: pixmaps/emoticon-face6.png (deleted)
===================================================================
Index: pixmaps/emoticon-face7.png (deleted)
===================================================================
Index: pixmaps/emoticon-face8.png (deleted)
===================================================================
Index: pixmaps/16x16/apps/ekiga.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: pixmaps/16x16/apps/ekiga.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: pixmaps/emoticon-face9.png (deleted)
===================================================================
Index: pixmaps/ekiga_logo_16x16.png (deleted)
===================================================================
Index: pixmaps/volume.png (deleted)
===================================================================
Index: pixmaps/emoticon-dead.png (deleted)
===================================================================
Index: pixmaps/status-forward-16.png (deleted)
===================================================================
Index: pixmaps/emoticon-face10.png (deleted)
===================================================================
Index: pixmaps/emoticon-face11.png (deleted)
===================================================================
Index: pixmaps/emoticon-face12.png (deleted)
===================================================================
Index: pixmaps/emoticon-face13.png (deleted)
===================================================================
Index: pixmaps/emoticon-face14.png (deleted)
===================================================================
Index: pixmaps/emoticon-face15.png (deleted)
===================================================================
Index: pixmaps/ekiga.png (deleted)
===================================================================
Index: pixmaps/emoticon-face16.png (deleted)
===================================================================
Index: pixmaps/emoticon-face17.png (deleted)
===================================================================
Index: pixmaps/emoticon-sad-glasses.png (deleted)
===================================================================
Index: pixmaps/emoticon-face18.png (deleted)
===================================================================
Index: pixmaps/audio-volume-high.png (deleted)
===================================================================
Index: pixmaps/emoticon-face19.png (deleted)
===================================================================
Index: pixmaps/emoticon-dead-happy.png (deleted)
===================================================================
Index: pixmaps/22x22/apps/ekiga.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: pixmaps/22x22/apps/ekiga.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: pixmaps/camera-video.png (deleted)
===================================================================
Index: pixmaps/emoticon-happy-devil.png (deleted)
===================================================================
Index: pixmaps/emoticon-happy-nose-glasses.png (deleted)
===================================================================
Index: pixmaps/ekiga_logo_22x22.png (deleted)
===================================================================
Index: pixmaps/microphone.png (deleted)
===================================================================
Index: pixmaps/audio-mute.png (deleted)
===================================================================
Index: pixmaps/48x48/apps/ekiga.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: pixmaps/48x48/apps/ekiga.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: pixmaps/emoticon-dead-sad.png (deleted)
===================================================================
Index: pixmaps/media-playback-pause.png (deleted)
===================================================================
Index: pixmaps/ekiga_logo_48x48.png (deleted)
===================================================================
Index: pixmaps/emoticon-sad-nose-glasses.png (deleted)
===================================================================
Index: pixmaps/status-offline-16.png (deleted)
===================================================================
Index: pixmaps/colourness.png (deleted)
===================================================================
Index: pixmaps/contrast.png (deleted)
===================================================================
Index: pixmaps/32x32/apps/ekiga.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: pixmaps/32x32/apps/ekiga.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: pixmaps/internet-group-chat.png (deleted)
===================================================================
Index: pixmaps/ekiga_logo_32x32.png (deleted)
===================================================================
Index: pixmaps/shadow.xpm (deleted)
===================================================================
Index: pixmaps/72x72/apps/ekiga.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: pixmaps/72x72/apps/ekiga.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: pixmaps/brightness.png (deleted)
===================================================================
Index: pixmaps/whiteness.png (deleted)
===================================================================
Index: pixmaps/status-auto-answer-16.png (deleted)
===================================================================
Index: pixmaps/video-mute.png (deleted)
===================================================================
Index: pixmaps/gm-edit.png (deleted)
===================================================================
Index: pixmaps/Makefile.am
===================================================================
--- pixmaps/Makefile.am	(revision 5229)
+++ pixmaps/Makefile.am	(working copy)
@@ -1,68 +1,34 @@
-pixmapdir = $(datadir)/pixmaps/@PACKAGE_NAME@
+icondir = $(datadir)/icons/hicolor
 
-pixmap_DATA = @PACKAGE_NAME@-logo.png @PACKAGE_NAME@.png
+nobase_dist_icon_DATA = \
+	16x16/apps/@PACKAGE_NAME@.png \
+	22x22/apps/@PACKAGE_NAME@.png \
+	32x32/apps/@PACKAGE_NAME@.png \
+	48x48/apps/@PACKAGE_NAME@.png \
+	72x72/apps/@PACKAGE_NAME@.png
 
 
-EMOTICONS_FILES = \
-	emoticon-face1.png \
-	emoticon-face2.png \
-	emoticon-face3.png \
-	emoticon-face4.png \
-	emoticon-face5.png \
-	emoticon-face6.png \
-	emoticon-face7.png \
-	emoticon-face8.png \
-	emoticon-face9.png \
-	emoticon-face10.png \
-	emoticon-face11.png \
-	emoticon-face12.png \
-	emoticon-face13.png \
-	emoticon-face14.png \
-	emoticon-face15.png \
-	emoticon-face16.png \
-	emoticon-face17.png \
-	emoticon-face18.png \
-	emoticon-face19.png \
-	emoticon-dead-happy.png \
-	emoticon-dead.png \
-	emoticon-dead-sad.png \
-	emoticon-happy-devil.png \
-	emoticon-happy-nose-glasses.png \
-	emoticon-sad-devil.png \
-	emoticon-sad-glasses.png \
-	emoticon-sad-nose-glasses.png 
-
 IMAGES_FILES= \
-	ekiga_logo_16x16.png \
-	ekiga_logo_48x48.png \
-	addressbook.png \
-	audio-volume-high.png \
+	16x16/audio-volume-high.png \
+	16x16/camera-video.png \
+	16x16/media-playback-pause.png \
+	16x16/stock_brightness.png \
+	16x16/stock_channel-blue.png \
+	16x16/stock_color.png \
+	16x16/stock_contrast.png \
+	16x16/system-search.png \
+	24x24/audio-input-microphone.png \
+	24x24/contact-new.png \
+	24x24/internet-group-chat.png \
+	24x24/stock_addressbook.png \
 	color-brightness-contrast.png \
-	internet-group-chat.png \
-	control-panel.png \
-	gm-edit.png \
-	volume.png \
-	microphone.png \
-	camera-video.png \
-	speaker-phone.png \
-	media-playback-pause.png \
-	status-auto-answer-16.png \
-	status-forward-16.png \
 	status-ringing-16.png \
 	local_contact.png \
 	remote_contact.png \
-	whiteness.png \
-	brightness.png \
-	colourness.png \
-	contrast.png \
 	message.png \
-	contact-new.png \
-	system-users.png \
-	calls-history.png \
 	call-placed.png \
 	call-missed.png \
 	call-received.png \
-	system-search.png \
 	status-online.png \
 	status-offline.png \
 	status-unknown.png \
@@ -76,37 +42,32 @@
 
 
 IMAGES= \
-	gm_logo_small_stock_data $(srcdir)/ekiga_logo_16x16.png \
-	gm_logo_large_stock_data $(srcdir)/ekiga_logo_48x48.png \
-	gm_addressbook_stock_data $(srcdir)/addressbook.png \
-	gm_audio_volume_high_stock_data $(srcdir)/audio-volume-high.png \
+	gm_add_contact_24_stock_data $(srcdir)/24x24/contact-new.png \
+	gm_addressbook_24_stock_data $(srcdir)/24x24/stock_addressbook.png \
+	gm_audio_volume_high_16_stock_data $(srcdir)/16x16/audio-volume-high.png \
+	gm_brightness_16_stock_data $(srcdir)/16x16/stock_brightness.png \
+	gm_camera_video_16_stock_data $(srcdir)/16x16/camera-video.png \
+	gm_colourness_16_stock_data $(srcdir)/16x16/stock_color.png \
+	gm_contrast_16_stock_data $(srcdir)/16x16/stock_contrast.png \
+	gm_internet_group_chat_24_stock_data $(srcdir)/24x24/internet-group-chat.png \
+	gm_logo_16_stock_data $(srcdir)/16x16/apps/@PACKAGE_NAME@.png \
+	gm_logo_22_stock_data $(srcdir)/22x22/apps/@PACKAGE_NAME@.png \
+	gm_logo_32_stock_data $(srcdir)/32x32/apps/@PACKAGE_NAME@.png \
+	gm_logo_48_stock_data $(srcdir)/48x48/apps/@PACKAGE_NAME@.png \
+	gm_logo_72_stock_data $(srcdir)/72x72/apps/@PACKAGE_NAME@.png \
+	gm_media_playback_pause_16_stock_data $(srcdir)/16x16/media-playback-pause.png \
+	gm_microphone_24_stock_data $(srcdir)/24x24/audio-input-microphone.png \
+	gm_system_search_16_stock_data $(srcdir)/16x16/system-search.png \
+	gm_whiteness_16_stock_data $(srcdir)/16x16/stock_channel-blue.png \
 	gm_color_brightness_contrast_stock_data $(srcdir)/color-brightness-contrast.png \
-	gm_internet_group_chat_stock_data $(srcdir)/internet-group-chat.png \
-	gm_control_panel_stock_data $(srcdir)/control-panel.png \
-	gm_edit_stock_data $(srcdir)/gm-edit.png \
-	gm_volume_stock_data $(srcdir)/volume.png \
-	gm_microphone_stock_data $(srcdir)/microphone.png \
-	gm_camera_video_stock_data $(srcdir)/camera-video.png \
-	gm_speaker_phone_stock_data $(srcdir)/speaker-phone.png \
-	gm_media_playback_pause_stock_data $(srcdir)/media-playback-pause.png \
-	gm_status_auto_answer_stock_data $(srcdir)/status-auto-answer-16.png \
-	gm_status_forward_stock_data $(srcdir)/status-forward-16.png \
 	gm_status_freeforchat_stock_data $(srcdir)/status-freeforchat.png \
 	gm_status_ringing_stock_data $(srcdir)/status-ringing-16.png \
 	gm_remote_contact_stock_data $(srcdir)/remote_contact.png \
 	gm_local_contact_stock_data $(srcdir)/local_contact.png \
-	gm_whiteness_stock_data $(srcdir)/whiteness.png \
-	gm_brightness_stock_data $(srcdir)/brightness.png \
-	gm_colourness_stock_data $(srcdir)/colourness.png \
-	gm_contrast_stock_data $(srcdir)/contrast.png \
-	gm_calls_history_stock_data $(srcdir)/calls-history.png \
 	gm_message_stock_data $(srcdir)/message.png \
-	gm_find_contact_stock_data $(srcdir)/system-users.png \
-	gm_add_contact_stock_data $(srcdir)/contact-new.png \
 	gm_call_placed_stock_data $(srcdir)/call-placed.png \
 	gm_call_received_stock_data $(srcdir)/call-received.png \
 	gm_call_missed_stock_data $(srcdir)/call-missed.png \
-	gm_system_search_stock_data $(srcdir)/system-search.png \
 	gm_status_online_stock_data $(srcdir)/status-online.png \
 	gm_status_offline_stock_data $(srcdir)/status-offline.png \
 	gm_status_unknown_stock_data $(srcdir)/status-unknown.png \
@@ -118,43 +79,25 @@
 	gm_phone_pick_up_stock_data_16 $(srcdir)/16x16/phone-pick-up.png 
 
 
-EMOTICONS= \
-	gm_emoticon_face1 $(srcdir)/emoticon-face1.png \
-	gm_emoticon_face2 $(srcdir)/emoticon-face2.png \
-	gm_emoticon_face3 $(srcdir)/emoticon-face3.png \
-	gm_emoticon_face4 $(srcdir)/emoticon-face4.png \
-	gm_emoticon_face5 $(srcdir)/emoticon-face5.png \
-	gm_emoticon_face6 $(srcdir)/emoticon-face6.png \
-	gm_emoticon_face7 $(srcdir)/emoticon-face7.png \
-	gm_emoticon_face8 $(srcdir)/emoticon-face8.png \
-	gm_emoticon_face9 $(srcdir)/emoticon-face9.png \
-	gm_emoticon_face10 $(srcdir)/emoticon-face10.png \
-	gm_emoticon_face11 $(srcdir)/emoticon-face11.png \
-	gm_emoticon_face12 $(srcdir)/emoticon-face12.png \
-	gm_emoticon_face13 $(srcdir)/emoticon-face13.png \
-	gm_emoticon_face14 $(srcdir)/emoticon-face14.png \
-	gm_emoticon_face15 $(srcdir)/emoticon-face15.png \
-	gm_emoticon_face16 $(srcdir)/emoticon-face16.png \
-	gm_emoticon_face17 $(srcdir)/emoticon-face17.png \
-	gm_emoticon_face18 $(srcdir)/emoticon-face18.png \
-	gm_emoticon_face19 $(srcdir)/emoticon-face19.png \
-	gm_emoticon_dead_happy $(srcdir)/emoticon-dead-happy.png \
-	gm_emoticon_dead $(srcdir)/emoticon-dead.png \
-	gm_emoticon_dead_sad $(srcdir)/emoticon-dead-sad.png \
-	gm_emoticon_happy_devil $(srcdir)/emoticon-happy-devil.png \
-	gm_emoticon_nose_glasses $(srcdir)/emoticon-happy-nose-glasses.png \
-	gm_emoticon_sad_devil $(srcdir)/emoticon-sad-devil.png \
-	gm_emoticon_sad_glasses $(srcdir)/emoticon-sad-glasses.png \
-	gm_emoticon_sad_nose_glasses $(srcdir)/emoticon-sad-nose-glasses.png \
-	gm_emoticon_happy_nose_glasses $(srcdir)/emoticon-happy-nose-glasses.png 
+noinst_DATA = inlines.h
 
+EXTRA_DIST= $(IMAGES_FILES)
 
-noinst_DATA = inlines.h inline_emoticons.h
+inlines.h: $(IMAGE_FILES) $(nobase_dist_icon_DATA) Makefile.am
+	gdk-pixbuf-csource --raw --build-list $(IMAGES) > inlines.h
 
-EXTRA_DIST= $(pixmap_DATA) $(EMOTICONS_FILES) $(IMAGES_FILES) gm_both_incrusted_frame.xpm text_logo.xpm 
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
 
-inlines.h: $(IMAGE_FILES) Makefile.am
-	gdk-pixbuf-csource --raw --build-list $(IMAGES) > inlines.h
+install-data-hook: update-icon-cache
 
-inline_emoticons.h: $(EMOTICONS_FILES) Makefile.am
-	gdk-pixbuf-csource --raw --build-list $(EMOTICONS) > inline_emoticons.h
+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
+
Index: pixmaps/gm_both_incrusted_frame.xpm (deleted)
===================================================================
Index: src/devices/fakevideoinput.cpp
===================================================================
--- src/devices/fakevideoinput.cpp	(revision 5229)
+++ src/devices/fakevideoinput.cpp	(working copy)
@@ -45,10 +45,10 @@
 #include "misc.h"
 #include "gmconf.h"
 
-#include "../pixmaps/text_logo.xpm"
-
 #include <ptlib/vconvert.h>
 
+#define DEFAULT_ICON_SIZE 72
+
 PVideoInputDevice_Picture::PVideoInputDevice_Picture ()
 {
   orig_pix = NULL;
@@ -74,6 +74,7 @@
 				 BOOL start_immediate)
 {
   gchar *image_name = NULL;
+  GdkPixbuf *icon = NULL;
     
   if (IsOpen ())
     return FALSE;
@@ -81,8 +82,21 @@
   if (name == "MovingLogo") {
   
     moving = true;
-    orig_pix = gdk_pixbuf_new_from_xpm_data ((const char **) text_logo_xpm);
+    icon = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
+                                     GM_STOCK_LOGO, DEFAULT_ICON_SIZE,
+                                     GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+    if (icon != NULL) {
     
+      /* Transparency color is white */
+      orig_pix = gdk_pixbuf_composite_color_simple (icon, DEFAULT_ICON_SIZE,
+                                                    DEFAULT_ICON_SIZE, 
+                                                    GDK_INTERP_BILINEAR,
+                                                    255, 1, 0xFFFFFFFF,
+                                                    0xFFFFFFFF);
+      g_object_unref (icon);
+      icon = NULL;
+    }
+  
     return TRUE;
   }
   else {
@@ -102,9 +116,24 @@
     orig_pix = gdk_pixbuf_new_from_file (image_name, NULL);
     g_free (image_name);
     
-    if (!orig_pix)
-      orig_pix = gdk_pixbuf_new_from_xpm_data ((const char **) text_logo_xpm);
+    if (!orig_pix) {
 
+      icon = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
+                                       GM_STOCK_LOGO, DEFAULT_ICON_SIZE,
+                                       GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+      if (icon != NULL) {
+
+        /* Transparency color is white */
+        orig_pix = gdk_pixbuf_composite_color_simple (icon, DEFAULT_ICON_SIZE,
+                                                      DEFAULT_ICON_SIZE, 
+                                                      GDK_INTERP_BILINEAR,
+                                                      255, 1, 0xFFFFFFFF,
+                                                      0xFFFFFFFF);
+        g_object_unref (icon);
+        icon = NULL;
+      }
+    }
+
     if (orig_pix) 
       return TRUE;
 
Index: src/endpoints/ekiga.cpp
===================================================================
--- src/endpoints/ekiga.cpp	(revision 5229)
+++ src/endpoints/ekiga.cpp	(working copy)
@@ -522,6 +522,7 @@
   gnomemeeting_stock_icons_init ();
   
   /* Build the GUI */
+  gtk_window_set_default_icon_name (GM_STOCK_LOGO);
   pc2phone_window = gm_pc2phone_window_new ();  
   prefs_window = gm_prefs_window_new ();  
   history_window = gm_history_window_new ();
Index: src/gui/tools.cpp
===================================================================
--- src/gui/tools.cpp	(revision 5229)
+++ src/gui/tools.cpp	(working copy)
@@ -286,8 +286,6 @@
   GtkWidget *vbox = NULL;
   GtkWidget *subsection = NULL;
 
-  GdkPixbuf *pixbuf = NULL;
-
   gchar *txt = NULL;
   
 
@@ -311,11 +309,6 @@
   
   gtk_window_set_title (GTK_WINDOW (window), _("PC-To-Phone Settings"));
   gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
-  pixbuf = gtk_widget_render_icon (GTK_WIDGET (window),
-				   GM_STOCK_LOGO_SMALL,
-				   GTK_ICON_SIZE_MENU, NULL);
-  gtk_window_set_icon (GTK_WINDOW (window), pixbuf);
-  g_object_unref (pixbuf);
 
 
   /* Introduction label */
Index: src/gui/addressbook.cpp
===================================================================
--- src/gui/addressbook.cpp	(revision 5229)
+++ src/gui/addressbook.cpp	(working copy)
@@ -2103,7 +2103,6 @@
   GtkWidget *vbox2 = NULL;
   GtkWidget *frame = NULL;
   GtkWidget *scroll = NULL;
-  GdkPixbuf *icon = NULL;
 
   GtkCellRenderer *cell = NULL;
   GtkTreeSelection *selection = NULL;
@@ -2120,19 +2119,15 @@
 
   /* The Top-level window */
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  icon = gtk_widget_render_icon (GTK_WIDGET (window),
-				 GM_STOCK_ADDRESSBOOK,
-				 GTK_ICON_SIZE_MENU, NULL);
   g_object_set_data_full (G_OBJECT (window), "window_name",
 			  g_strdup ("address_book_window"), g_free);
 
   gtk_window_set_title (GTK_WINDOW (window), 
 			_("Address Book"));
-  gtk_window_set_icon (GTK_WINDOW (window), icon);
+  gtk_window_set_icon_name (GTK_WINDOW (window), GM_STOCK_ADDRESSBOOK);
   gtk_window_set_position (GTK_WINDOW (window), 
 			   GTK_WIN_POS_CENTER);
   gtk_window_set_default_size (GTK_WINDOW (window), 670, 370);
-  g_object_unref (icon);
 
 
   /* The GMObject data */
@@ -2180,7 +2175,7 @@
 		     (gpointer) gm_contacts_copy_contact_to_clipboard_cb, TRUE),
 
       GTK_MENU_ENTRY("emailwrite", _("_Write e-Mail"), NULL,
-		     GM_STOCK_EDIT, 0,
+		     GTK_STOCK_EDIT, 0,
 		     GTK_SIGNAL_FUNC (addressbook_contact_wrapper_cb),
 		     (gpointer) gm_contacts_email_contact_cb, TRUE),
 
Index: src/gui/history.cpp
===================================================================
--- src/gui/history.cpp	(revision 5229)
+++ src/gui/history.cpp	(working copy)
@@ -112,7 +112,6 @@
 {
   GmHistoryWindow *hw = NULL;
   
-  GdkPixbuf *pixbuf = NULL;
   GtkWidget *window = NULL;
   GtkWidget *scr = NULL;
 
@@ -126,11 +125,6 @@
 			  g_strdup ("log_window"), g_free);
   
   gtk_window_set_title (GTK_WINDOW (window), _("General History"));
-  pixbuf = gtk_widget_render_icon (GTK_WIDGET (window),
-				   GM_STOCK_LOGO_SMALL,
-				   GTK_ICON_SIZE_MENU, NULL);
-  gtk_window_set_icon (GTK_WINDOW (window), pixbuf);
-  g_object_unref (pixbuf);
 
   gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
   
Index: src/gui/druid.cpp
===================================================================
--- src/gui/druid.cpp	(revision 5229)
+++ src/gui/druid.cpp	(working copy)
@@ -2014,19 +2014,11 @@
   GtkWidget *window = NULL;
   GmDruidWindow *dw = NULL;
 
-  GdkPixbuf *pixbuf = NULL;
-
   
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_object_set_data_full (G_OBJECT (window), "window_name",
 			  g_strdup ("druid_window"), g_free); 
   
-  pixbuf = gtk_widget_render_icon (GTK_WIDGET (window),
-				   GM_STOCK_LOGO_SMALL,
-				   GTK_ICON_SIZE_MENU, NULL);
-  gtk_window_set_icon (GTK_WINDOW (window), pixbuf);
-  g_object_unref (pixbuf);
-
   gtk_window_set_title (GTK_WINDOW (window), 
 			_("First Time Configuration Assistant"));
   gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
Index: src/gui/contacts.cpp
===================================================================
--- src/gui/contacts.cpp	(revision 5229)
+++ src/gui/contacts.cpp	(working copy)
@@ -1106,7 +1106,7 @@
 
   MenuEntry mi_email =
     GTK_MENU_ENTRY_WITH_CLOSURE("emailwrite", _("_Write e-Mail"), NULL,
-                                GM_STOCK_EDIT, 0,
+                                GTK_STOCK_EDIT, 0,
                                 GTK_SIGNAL_FUNC (gm_contacts_email_contact_cb),
                                 (GClosureNotify) gm_contacts_callback_data_delete,
                                 gm_contacts_callback_data_new (contact, 
Index: src/gui/chat.cpp
===================================================================
--- src/gui/chat.cpp	(revision 5229)
+++ src/gui/chat.cpp	(working copy)
@@ -496,6 +496,7 @@
   GtkTextBuffer *buffer = NULL;
   GtkTextMark *mark = NULL;
   GtkTextTag *regex_tag = NULL;
+  gchar *smiley_regex = NULL;
 
   int x = 0, y = 0;
 
@@ -686,8 +687,10 @@
   
   /* Smileys */
   regex_tag = gtk_text_buffer_create_tag (buffer, "smileys", "foreground", "grey", NULL);
-  if (gtk_text_tag_set_regex (regex_tag, "(:[-]?(\\)|\\(|o|O|p|P|D|\\||/)|\\}:(\\(|\\))|\\|[-]?(\\(|\\))|:'\\(|:\\[|:-(\\.|\\*|x)|;[-]?\\)|(8|B)[-]?\\)|X(\\(|\\||\\))|\\((\\.|\\|)\\)|x\\*O)"))
+  smiley_regex = gtk_text_buffer_get_smiley_regex ();
+  if (gtk_text_tag_set_regex (regex_tag, smiley_regex))
     gtk_text_tag_set_regex_display (regex_tag, gtk_text_buffer_insert_smiley);
+  g_free (smiley_regex);
   
   /* Bold, Italic and Underline */
   regex_tag = gtk_text_buffer_create_tag (buffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL);
@@ -1310,8 +1313,6 @@
 GtkWidget *
 gm_text_chat_window_new ()
 {
-  GdkPixbuf *pixbuf = NULL;
-  
   GtkWidget *chat_window = NULL;
   GtkWidget *vbox = NULL;
   
@@ -1324,12 +1325,6 @@
   
   gtk_window_set_title (GTK_WINDOW (chat_window), _("Chat Window"));
 
-  pixbuf = gtk_widget_render_icon (GTK_WIDGET (chat_window),
-				   GM_STOCK_LOGO_SMALL,
-				   GTK_ICON_SIZE_MENU, NULL);
-  gtk_window_set_icon (GTK_WINDOW (chat_window), pixbuf);
-  g_object_unref (pixbuf);
-
   gtk_window_set_position (GTK_WINDOW (chat_window), GTK_WIN_POS_CENTER);
 
   /* Set the internal data */
Index: src/gui/callbacks.cpp
===================================================================
--- src/gui/callbacks.cpp	(revision 5229)
+++ src/gui/callbacks.cpp	(working copy)
@@ -51,6 +51,7 @@
 #include "gmdialog.h"
 #include "gmconnectbutton.h"
 #include "gmmenuaddon.h"
+#include "gmstockicons.h"
 
 #ifdef WIN32
 #include "platform/winpaths.h"
@@ -205,9 +206,7 @@
 		"documenters", documenters,
 		"translator-credits", translator_credits,
 		"comments", comments,
-#ifndef WIN32                 
-		"logo-icon-name", PACKAGE_NAME,
-#endif                
+		"logo-icon-name", GM_STOCK_LOGO,
 		"license", license,
 		"wrap-license", TRUE,
 		"website", "http://www.ekiga.org",
Index: src/gui/callshistory.cpp
===================================================================
--- src/gui/callshistory.cpp	(revision 5229)
+++ src/gui/callshistory.cpp	(working copy)
@@ -892,8 +892,8 @@
      and the search and clear buttons */
   hbox = gtk_hbox_new (FALSE, 0);  
   gtk_container_set_border_width (GTK_CONTAINER (hbox), 4);
-  search_icon = gtk_image_new_from_stock (GM_STOCK_SYSTEM_SEARCH,
-                                          GTK_ICON_SIZE_MENU);
+  search_icon = gtk_image_new_from_icon_name (GM_STOCK_SYSTEM_SEARCH,
+                                              GTK_ICON_SIZE_MENU);
   gtk_box_pack_start (GTK_BOX (hbox), search_icon, FALSE, FALSE, 2);
   chc->chc_search_entry = gtk_entry_new ();
   gtk_box_pack_start (GTK_BOX (hbox), chc->chc_search_entry, TRUE, TRUE, 2);
Index: src/gui/main.cpp
===================================================================
--- src/gui/main.cpp	(revision 5229)
+++ src/gui/main.cpp	(working copy)
@@ -70,8 +70,6 @@
 #include "base/gm-plugin-manager.h"
 #include "platform/gm-platform.h"
 
-#include "../pixmaps/text_logo.xpm"
-
 #include <gdk/gdkkeysyms.h>
 
 #ifndef DISABLE_GNOME
@@ -650,8 +648,8 @@
   item = gtk_tool_item_new ();
   button = gtk_button_new ();
   gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
-  image = gtk_image_new_from_stock (GM_STOCK_ADD_CONTACT, 
-                                    GTK_ICON_SIZE_LARGE_TOOLBAR);
+  image = gtk_image_new_from_icon_name (GM_STOCK_ADD_CONTACT, 
+                                        GTK_ICON_SIZE_LARGE_TOOLBAR);
   gtk_container_add (GTK_CONTAINER (button), image);
   gtk_container_add (GTK_CONTAINER (item), button);
   gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), FALSE);
@@ -673,8 +671,8 @@
   item = gtk_tool_item_new ();
   button = gtk_button_new ();
   gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
-  image = gtk_image_new_from_stock (GM_STOCK_ADDRESSBOOK,
-                                    GTK_ICON_SIZE_LARGE_TOOLBAR);
+  image = gtk_image_new_from_icon_name (GM_STOCK_ADDRESSBOOK,
+                                        GTK_ICON_SIZE_LARGE_TOOLBAR);
   gtk_container_add (GTK_CONTAINER (button), image);
   gtk_container_add (GTK_CONTAINER (item), button);
   gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), FALSE);
@@ -693,8 +691,8 @@
   item = gtk_tool_item_new ();
   button = gtk_button_new ();
   gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
-  image = gtk_image_new_from_stock (GM_STOCK_INTERNET_GROUP_CHAT, 
-                                    GTK_ICON_SIZE_LARGE_TOOLBAR);
+  image = gtk_image_new_from_icon_name (GM_STOCK_INTERNET_GROUP_CHAT, 
+                                        GTK_ICON_SIZE_LARGE_TOOLBAR);
   gtk_container_add (GTK_CONTAINER (button), image);
   gtk_container_add (GTK_CONTAINER (item), button);
   gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), FALSE);
@@ -1111,11 +1109,11 @@
 
       GTK_MENU_NEW(_("_Tools")),
       
-      GTK_MENU_ENTRY("address_book", _("Address _Book"),
-		     _("Open the address book"),
-		     GM_STOCK_ADDRESSBOOK, 0,
-		     GTK_SIGNAL_FUNC (show_window_cb),
-		     (gpointer) addressbook_window, TRUE),
+      GTK_MENU_THEME_ENTRY("address_book", _("Address _Book"),
+			   _("Open the address book"),
+			   GM_STOCK_ADDRESSBOOK, 0,
+			   GTK_SIGNAL_FUNC (show_window_cb),
+			   (gpointer) addressbook_window, TRUE),
       
       GTK_MENU_SEPARATOR,
 
@@ -1510,7 +1508,7 @@
   
   /* Brightness */
   hbox = gtk_hbox_new (0, FALSE);
-  image = gtk_image_new_from_stock (GM_STOCK_BRIGHTNESS, GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_icon_name (GM_STOCK_BRIGHTNESS, GTK_ICON_SIZE_MENU);
   gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
 
   mw->adj_brightness = gtk_adjustment_new (brightness, 0.0, 
@@ -1532,7 +1530,7 @@
 
   /* Whiteness */
   hbox = gtk_hbox_new (0, FALSE);
-  image = gtk_image_new_from_stock (GM_STOCK_WHITENESS, GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_icon_name (GM_STOCK_WHITENESS, GTK_ICON_SIZE_MENU);
   gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
 
   mw->adj_whiteness = gtk_adjustment_new (whiteness, 0.0, 
@@ -1554,7 +1552,7 @@
 
   /* Colour */
   hbox = gtk_hbox_new (0, FALSE);
-  image = gtk_image_new_from_stock (GM_STOCK_COLOURNESS, GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_icon_name (GM_STOCK_COLOURNESS, GTK_ICON_SIZE_MENU);
   gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
 
   mw->adj_colour = gtk_adjustment_new (colour, 0.0, 
@@ -1576,7 +1574,7 @@
 
   /* Contrast */
   hbox = gtk_hbox_new (0, FALSE);
-  image = gtk_image_new_from_stock (GM_STOCK_CONTRAST, GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_icon_name (GM_STOCK_CONTRAST, GTK_ICON_SIZE_MENU);
   gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
   
   mw->adj_contrast = gtk_adjustment_new (contrast, 0.0, 
@@ -1659,8 +1657,8 @@
   /* Output volume */
   hbox = gtk_hbox_new (0, FALSE);
   gtk_box_pack_start (GTK_BOX (hbox), 
-		      gtk_image_new_from_stock (GM_STOCK_VOLUME, 
-						GTK_ICON_SIZE_SMALL_TOOLBAR),
+		      gtk_image_new_from_icon_name (GM_STOCK_AUDIO_VOLUME_HIGH, 
+						    GTK_ICON_SIZE_SMALL_TOOLBAR),
 		      FALSE, FALSE, 0);
   
   small_vbox = gtk_vbox_new (0, FALSE);
@@ -1680,8 +1678,8 @@
   /* Input volume */
   hbox = gtk_hbox_new (0, FALSE);
   gtk_box_pack_start (GTK_BOX (hbox),
-		      gtk_image_new_from_stock (GM_STOCK_MICROPHONE, 
-						GTK_ICON_SIZE_SMALL_TOOLBAR),
+		      gtk_image_new_from_icon_name (GM_STOCK_MICROPHONE, 
+						    GTK_ICON_SIZE_SMALL_TOOLBAR),
 		      FALSE, FALSE, 0);
 
   small_vbox = gtk_vbox_new (0, FALSE);
@@ -1828,8 +1826,8 @@
   item = gtk_tool_item_new ();
   button = gtk_button_new ();
   gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
-  image = gtk_image_new_from_stock (GM_STOCK_AUDIO_VOLUME_HIGH,
-                                    GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_icon_name (GM_STOCK_AUDIO_VOLUME_HIGH,
+                                        GTK_ICON_SIZE_MENU);
   gtk_container_add (GTK_CONTAINER (button), image);
   gtk_container_add (GTK_CONTAINER (item), button);
   gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), FALSE);
@@ -1872,8 +1870,8 @@
   item = gtk_tool_item_new ();
   mw->preview_button = gtk_toggle_button_new ();
   gtk_button_set_relief (GTK_BUTTON (mw->preview_button), GTK_RELIEF_NONE);
-  image = gtk_image_new_from_stock (GM_STOCK_CAMERA_VIDEO, 
-                                    GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_icon_name (GM_STOCK_CAMERA_VIDEO, 
+                                        GTK_ICON_SIZE_MENU);
   gtk_container_add (GTK_CONTAINER (mw->preview_button), image);
   gtk_container_add (GTK_CONTAINER (item), mw->preview_button);
   gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), FALSE);
@@ -1892,8 +1890,8 @@
   /* Call Pause */
   item = gtk_tool_item_new ();
   mw->hold_button = gtk_toggle_button_new ();
-  image = gtk_image_new_from_stock (GM_STOCK_MEDIA_PLAYBACK_PAUSE,
-                                    GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_icon_name (GM_STOCK_MEDIA_PLAYBACK_PAUSE,
+                                        GTK_ICON_SIZE_MENU);
   gtk_button_set_relief (GTK_BUTTON (mw->hold_button), GTK_RELIEF_NONE);
   gtk_container_add (GTK_CONTAINER (mw->hold_button), image);
   gtk_container_add (GTK_CONTAINER (item), mw->hold_button);
@@ -2858,39 +2856,17 @@
 {
   GmWindow *mw = NULL;
 
-  GdkPixbuf *text_logo_pix = NULL;
-  GdkPixbuf *pic = NULL;
-
-  int width = 0;
-  int height = 0;
-
   g_return_if_fail (main_window != NULL);
 
   mw = gm_mw_get_mw (main_window);
 
-  text_logo_pix = gdk_pixbuf_new_from_xpm_data ((const char **) text_logo_xpm);
-  width = gdk_pixbuf_get_width (text_logo_pix);
-  height = gdk_pixbuf_get_height (text_logo_pix);
-
-  pic = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
-			GM_QCIF_WIDTH, GM_QCIF_HEIGHT);
-  gdk_pixbuf_fill (pic, 0xFFFFFFFF);  
-
-  gdk_pixbuf_copy_area (text_logo_pix, 0, 0, 
-			width, height,
-			pic, 
-			((GM_QCIF_WIDTH - width) / 2),
-			(GM_QCIF_HEIGHT - height) / 2);
-
-  gtk_image_set_from_pixbuf (GTK_IMAGE (mw->main_video_image),
-			     pic);
-
+  g_object_set (G_OBJECT (mw->main_video_image),
+		"icon-name", GM_STOCK_LOGO,
+		"pixel-size", 72,
+		NULL);
+  
   gtk_widget_set_size_request (GTK_WIDGET (mw->main_video_image),
-                               gdk_pixbuf_get_width (pic),
-                               gdk_pixbuf_get_height (pic));
-
-  g_object_unref (text_logo_pix);
-  g_object_unref (pic);
+                               GM_QCIF_WIDTH, GM_QCIF_HEIGHT);
 }
 
 
@@ -3881,7 +3857,6 @@
   
   GtkWidget *main_toolbar = NULL;
   GtkWidget *uri_toolbar = NULL;
-  GdkPixbuf *pixbuf = NULL;
 
   PanelSection section = DIALPAD;
   guint status = CONTACT_ONLINE;
@@ -4051,16 +4026,7 @@
   g_signal_connect (G_OBJECT (mw->statusbar_ebox), "button-press-event",
 		    GTK_SIGNAL_FUNC (statusbar_clicked_cb), window);
  
-  pixbuf = gtk_widget_render_icon (GTK_WIDGET (window),
-				   GM_STOCK_LOGO_SMALL,
-				   GTK_ICON_SIZE_MENU, NULL);
-
-  if (pixbuf) {
-    gtk_window_set_default_icon (pixbuf);
-    g_object_unref (G_OBJECT (pixbuf));
-  }
-  
-  /* Add the window icon and title */
+  /* Add title */
   gtk_window_set_title (GTK_WINDOW (window), _("Ekiga"));
 
   gtk_widget_realize (window);
Index: src/gui/statusicon.cpp
===================================================================
--- src/gui/statusicon.cpp	(revision 5229)
+++ src/gui/statusicon.cpp	(working copy)
@@ -136,11 +136,11 @@
 
       GTK_MENU_SEPARATOR,
 
-      GTK_MENU_ENTRY("address_book", _("Address _Book"),
-		     _("Open the address book"),
-		     GM_STOCK_ADDRESSBOOK, 0,
-		     GTK_SIGNAL_FUNC (show_window_cb),
-		     (gpointer) addressbook_window, TRUE),
+      GTK_MENU_THEME_ENTRY("address_book", _("Address _Book"),
+			   _("Open the address book"),
+			   GM_STOCK_ADDRESSBOOK, 0,
+			   GTK_SIGNAL_FUNC (show_window_cb),
+			   (gpointer) addressbook_window, TRUE),
 
       GTK_MENU_SEPARATOR,
 
Index: lib/gui/gmstockicons.c
===================================================================
--- lib/gui/gmstockicons.c	(revision 5229)
+++ lib/gui/gmstockicons.c	(working copy)
@@ -57,24 +57,10 @@
                 const guint8 *data;
         } GmStockIcon;                
 
-	static GmStockIcon items[] =
+	static const GmStockIcon items[] =
 	{
-	  	{ GM_STOCK_LOGO_SMALL,    gm_logo_small_stock_data },
-		{ GM_STOCK_LOGO_LARGE,    gm_logo_large_stock_data },
-	        { GM_STOCK_ADDRESSBOOK, gm_addressbook_stock_data },
-	        { GM_STOCK_AUDIO_VOLUME_HIGH, gm_audio_volume_high_stock_data },
 	        { GM_STOCK_COLOR_BRIGHTNESS_CONTRAST, gm_color_brightness_contrast_stock_data },
-		{ GM_STOCK_INTERNET_GROUP_CHAT,     gm_internet_group_chat_stock_data },
-		{ GM_STOCK_CONTROL_PANEL, gm_control_panel_stock_data },
-		{ GM_STOCK_EDIT,          gm_edit_stock_data },
-		{ GM_STOCK_CAMERA_VIDEO,  gm_camera_video_stock_data },
-		{ GM_STOCK_VOLUME,        gm_volume_stock_data },
-		{ GM_STOCK_MICROPHONE,    gm_microphone_stock_data },
-                { GM_STOCK_SPEAKER_PHONE, gm_speaker_phone_stock_data },
-		{ GM_STOCK_MEDIA_PLAYBACK_PAUSE, gm_media_playback_pause_stock_data },
 
-		{ GM_STOCK_STATUS_AUTO_ANSWER, gm_status_auto_answer_stock_data },
-		{ GM_STOCK_STATUS_FORWARD, gm_status_forward_stock_data },
 		{ GM_STOCK_STATUS_FREEFORCHAT, gm_status_freeforchat_stock_data },
 		{ GM_STOCK_STATUS_RINGING, gm_status_ringing_stock_data },
 
@@ -86,18 +72,10 @@
 
 		{ GM_STOCK_REMOTE_CONTACT, gm_remote_contact_stock_data},
 		{ GM_STOCK_LOCAL_CONTACT, gm_local_contact_stock_data},
-		{ GM_STOCK_WHITENESS, gm_whiteness_stock_data},
-		{ GM_STOCK_BRIGHTNESS, gm_brightness_stock_data},
-		{ GM_STOCK_COLOURNESS, gm_colourness_stock_data},
-		{ GM_STOCK_CONTRAST, gm_contrast_stock_data},
-		{ GM_STOCK_CALLS_HISTORY, gm_calls_history_stock_data},
 		{ GM_STOCK_MESSAGE, gm_message_stock_data},
-		{ GM_STOCK_FIND_CONTACT, gm_find_contact_stock_data},
-		{ GM_STOCK_ADD_CONTACT, gm_add_contact_stock_data},
 		{ GM_STOCK_CALL_PLACED, gm_call_placed_stock_data},
 		{ GM_STOCK_CALL_MISSED, gm_call_missed_stock_data},
 		{ GM_STOCK_CALL_RECEIVED, gm_call_received_stock_data},
-		{ GM_STOCK_SYSTEM_SEARCH, gm_system_search_stock_data},
 
 		{ GM_STOCK_PHONE_HANG_UP_16, gm_phone_hang_up_stock_data_16},
 		{ GM_STOCK_PHONE_PICK_UP_16, gm_phone_pick_up_stock_data_16},
@@ -105,6 +83,35 @@
 		{ GM_STOCK_PHONE_PICK_UP_24, gm_phone_pick_up_stock_data_24},
 	};
 
+        typedef struct 
+        {
+                char *id;
+                gint size;
+                const guint8 *data;
+        } GmThemeIcon;                
+
+	static const GmThemeIcon theme_builtins[] =
+	{
+		{ GM_STOCK_ADD_CONTACT, 24, gm_add_contact_24_stock_data},
+	        { GM_STOCK_ADDRESSBOOK, 24, gm_addressbook_24_stock_data },
+	        { GM_STOCK_AUDIO_VOLUME_HIGH, 16, gm_audio_volume_high_16_stock_data },
+		{ GM_STOCK_BRIGHTNESS, 16, gm_brightness_16_stock_data},
+		{ GM_STOCK_CAMERA_VIDEO, 16, gm_camera_video_16_stock_data },
+		{ GM_STOCK_COLOURNESS, 16, gm_colourness_16_stock_data},
+		{ GM_STOCK_CONTRAST, 16, gm_contrast_16_stock_data},
+		{ GM_STOCK_INTERNET_GROUP_CHAT, 24, gm_internet_group_chat_24_stock_data },
+	        { GM_STOCK_LOGO, 16, gm_logo_16_stock_data },
+	        { GM_STOCK_LOGO, 22, gm_logo_22_stock_data },
+	        { GM_STOCK_LOGO, 32, gm_logo_32_stock_data },
+	        { GM_STOCK_LOGO, 48, gm_logo_48_stock_data },
+	        { GM_STOCK_LOGO, 72, gm_logo_72_stock_data },
+		{ GM_STOCK_MEDIA_PLAYBACK_PAUSE, 16, gm_media_playback_pause_16_stock_data },
+		{ GM_STOCK_MICROPHONE, 24, gm_microphone_24_stock_data },
+		{ GM_STOCK_SYSTEM_SEARCH, 16, gm_system_search_16_stock_data},
+		{ GM_STOCK_WHITENESS, 16, gm_whiteness_16_stock_data},
+	};
+
+	/* First, register honest-to-goodness custom stock icons */
 	factory = gtk_icon_factory_new ();
 	gtk_icon_factory_add_default (factory);
 
@@ -124,4 +131,18 @@
 	}
 
 	g_object_unref (G_OBJECT (factory));
+	
+	/* Now install theme builtins */
+	for (i = 0; i < (int) G_N_ELEMENTS (theme_builtins); i++)
+	{
+		GdkPixbuf *pixbuf;
+
+		pixbuf = gdk_pixbuf_new_from_inline (-1, theme_builtins[i].data,
+						     FALSE, NULL);
+
+		gtk_icon_theme_add_builtin_icon (theme_builtins[i].id,
+						 theme_builtins[i].size, pixbuf);
+
+		g_object_unref (G_OBJECT (pixbuf));
+	}
 }
Index: lib/gui/gmstockicons.h
===================================================================
--- lib/gui/gmstockicons.h	(revision 5229)
+++ lib/gui/gmstockicons.h	(working copy)
@@ -34,39 +34,35 @@
 #ifndef __GM_STOCK_ICONS_H
 #define __GM_STOCK_ICONS_H
 
+#include "../../config.h"
+
 G_BEGIN_DECLS
 
-#define GM_STOCK_LOGO_SMALL "gm_logo_small_stock"
-#define GM_STOCK_LOGO_LARGE "gm_logo_large_stock"
-#define GM_STOCK_ADDRESSBOOK      "gm_addressbook_stock"
-#define GM_STOCK_AUDIO_VOLUME_HIGH "gm_audio_volume_high_stock"
+/* Icon theme builtins */
+#define GM_STOCK_ADD_CONTACT                "contact-new"
+#define GM_STOCK_ADDRESSBOOK                "stock_addressbook"
+#define GM_STOCK_AUDIO_VOLUME_HIGH          "audio-volume-high"
+#define GM_STOCK_BRIGHTNESS                 "stock_brightness"
+#define GM_STOCK_CAMERA_VIDEO               "camera-video"
+#define GM_STOCK_COLOURNESS                 "stock_color"
+#define GM_STOCK_CONTRAST                   "stock_contrast"
+#define GM_STOCK_INTERNET_GROUP_CHAT        "internet-group-chat"
+#define GM_STOCK_LOGO                       PACKAGE_NAME
+#define GM_STOCK_MEDIA_PLAYBACK_PAUSE       "media-playback-pause"
+#define GM_STOCK_MICROPHONE                 "audio-input-microphone"
+#define GM_STOCK_SYSTEM_SEARCH              "system-search"
+#define GM_STOCK_WHITENESS                  "stock_channel-blue"
+
+/* True stock icons */
 #define GM_STOCK_COLOR_BRIGHTNESS_CONTRAST   "gm_color_brightness_contrast_stock"
-#define GM_STOCK_INTERNET_GROUP_CHAT        "gm_internet_group_chat_stock"
-#define GM_STOCK_CONTROL_PANEL    "gm_control_panel_stock"
-#define GM_STOCK_EDIT             "gm_edit_stock"
-#define GM_STOCK_CAMERA_VIDEO     "gm_camera_video_stock"
-#define GM_STOCK_VOLUME           "gm_volume_stock"
-#define GM_STOCK_MICROPHONE       "gm_microphone_stock"
-#define GM_STOCK_SPEAKER_PHONE    "gm_speaker_phone_stock"
-#define GM_STOCK_MEDIA_PLAYBACK_PAUSE "gm_media_playback_pause_stock"
-#define GM_STOCK_STATUS_AUTO_ANSWER "gm_status_auto_answer_stock"
-#define GM_STOCK_STATUS_FORWARD "gm_status_forward_stock"
 #define GM_STOCK_STATUS_FREEFORCHAT "gm_status_freeforchat_stock"
 #define GM_STOCK_STATUS_RINGING "gm_status_ringing_stock"
 #define GM_STOCK_LOCAL_CONTACT    "gm_local_contact_stock"
 #define GM_STOCK_REMOTE_CONTACT   "gm_remote_contact_stock"
-#define GM_STOCK_CONTRAST         "gm_contrast_stock"
-#define GM_STOCK_WHITENESS        "gm_whiteness_stock"
-#define GM_STOCK_BRIGHTNESS       "gm_brightness_stock"
-#define GM_STOCK_COLOURNESS       "gm_colourness_stock"
-#define GM_STOCK_CALLS_HISTORY    "gm_calls_history_stock"
 #define GM_STOCK_MESSAGE          "gm_message_stock"
-#define GM_STOCK_FIND_CONTACT     "gm_find_contact_stock"
-#define GM_STOCK_ADD_CONTACT      "gm_add_contact_stock"
 #define GM_STOCK_CALL_PLACED      "gm_call_placed_stock"
 #define GM_STOCK_CALL_MISSED      "gm_call_missed_stock"
 #define GM_STOCK_CALL_RECEIVED    "gm_call_received_stock"
-#define GM_STOCK_SYSTEM_SEARCH    "gm_system_search_stock"
 
 #define GM_STOCK_STATUS_ONLINE "gm_status_online_stock"
 #define GM_STOCK_STATUS_OFFLINE "gm_status_offline_stock"
Index: lib/gui/gmmenuaddon.c
===================================================================
--- lib/gui/gmmenuaddon.c	(revision 5229)
+++ lib/gui/gmmenuaddon.c	(working copy)
@@ -285,7 +285,7 @@
     if (menu [i].type != MENU_RADIO_ENTRY) 
       group = NULL;
 
-    if (menu [i].stock_id && !menu [i].name) {
+    if (menu [i].stock_id && !menu [i].stock_is_theme && !menu [i].name) {
 
       if (gtk_stock_lookup (menu [i].stock_id, &item))
         menu_name = g_strdup (gettext (item.label));
@@ -329,8 +329,12 @@
 
       if (menu [i].stock_id && show_icons) {
 
-	image = gtk_image_new_from_stock (menu [i].stock_id,
-					  GTK_ICON_SIZE_MENU);
+	if (menu [i].stock_is_theme)
+	  image = gtk_image_new_from_icon_name(menu [i].stock_id,
+					       GTK_ICON_SIZE_MENU);
+	else
+	  image = gtk_image_new_from_stock (menu [i].stock_id,
+					    GTK_ICON_SIZE_MENU);
 	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu[i].widget),
 				       image);
 	gtk_widget_show (image);
@@ -609,8 +613,12 @@
 
 	if (!image) {
 	  
-	  image = gtk_image_new_from_stock (menu_entry [i].stock_id,
-					    GTK_ICON_SIZE_MENU);
+	  if (menu_entry [i].stock_is_theme)
+	    image = gtk_image_new_from_icon_name(menu_entry [i].stock_id,
+						 GTK_ICON_SIZE_MENU);
+	  else
+	    image = gtk_image_new_from_stock (menu_entry [i].stock_id,
+					      GTK_ICON_SIZE_MENU);
 	  gtk_widget_show (image);
 
 	  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_entry [i].widget), image);
Index: lib/gui/gmmenuaddon.h
===================================================================
--- lib/gui/gmmenuaddon.h	(revision 5229)
+++ lib/gui/gmmenuaddon.h	(working copy)
@@ -67,6 +67,7 @@
   char *name;
   char *tooltip;
   char *stock_id;
+  gboolean stock_is_theme;
   guint accel;
   MenuEntryType type;
   GtkSignalFunc func;
@@ -79,28 +80,31 @@
 
 
 #define GTK_MENU_SEPARATOR \
-{NULL, NULL, NULL, NULL, 0, MENU_SEP, NULL, NULL, NULL, NULL, TRUE, TRUE}
+{NULL, NULL, NULL, NULL, FALSE, 0, MENU_SEP, NULL, NULL, NULL, NULL, TRUE, TRUE}
 
 #define GTK_MENU_ENTRY(a, b, c, d, e, f, g, h) \
-{a, b, c, d, e, MENU_ENTRY, f, NULL, g, NULL, TRUE, h}
+{a, b, c, d, FALSE, e, MENU_ENTRY, f, NULL, g, NULL, TRUE, h}
 
+#define GTK_MENU_THEME_ENTRY(a, b, c, d, e, f, g, h) \
+{a, b, c, d, TRUE, e, MENU_ENTRY, f, NULL, g, NULL, TRUE, h}
+
 #define GTK_MENU_ENTRY_WITH_CLOSURE(a, b, c, d, e, f, g, h, i) \
-{a, b, c, d, e, MENU_ENTRY, f, g, h, NULL, TRUE, i}
+{a, b, c, d, FALSE, e, MENU_ENTRY, f, g, h, NULL, TRUE, i}
 
 #define GTK_MENU_RADIO_ENTRY(a, b, c, d, e, f, g, h, i) \
-{a, b, c, d, e, MENU_RADIO_ENTRY, f, NULL, g, NULL, h, i}
+{a, b, c, d, FALSE, e, MENU_RADIO_ENTRY, f, NULL, g, NULL, h, i}
 
 #define GTK_MENU_TOGGLE_ENTRY(a, b, c, d, e, f, g, h, i) \
-{a, b, c, d, e, MENU_TOGGLE_ENTRY, f, NULL, g, NULL, h, i}
+{a, b, c, d, FALSE, e, MENU_TOGGLE_ENTRY, f, NULL, g, NULL, h, i}
 
 #define GTK_MENU_NEW(a) \
-{NULL, a, NULL, NULL, 0, MENU_NEW, NULL, NULL, NULL, NULL, TRUE, TRUE}
+{NULL, a, NULL, NULL, FALSE, 0, MENU_NEW, NULL, NULL, NULL, NULL, TRUE, TRUE}
 
 #define GTK_SUBMENU_NEW(a, b) \
-{a, b, NULL, NULL, 0, MENU_SUBMENU_NEW, NULL, NULL, NULL, NULL, TRUE, TRUE}
+{a, b, NULL, NULL, FALSE, 0, MENU_SUBMENU_NEW, NULL, NULL, NULL, NULL, TRUE, TRUE}
 
 #define GTK_MENU_END \
-{NULL, NULL, NULL, NULL, 0, MENU_END, NULL, NULL, NULL, NULL, TRUE, TRUE}
+{NULL, NULL, NULL, NULL, FALSE, 0, MENU_END, NULL, NULL, NULL, NULL, TRUE, TRUE}
 
 
 /* DESCRIPTION  :  This callback is called when the user 
Index: lib/gui/gmtextbufferaddon.c
===================================================================
--- lib/gui/gmtextbufferaddon.c	(revision 5229)
+++ lib/gui/gmtextbufferaddon.c	(working copy)
@@ -47,7 +47,9 @@
 
 #include <regex.h>
 
+#define GM_REGEX_SPECIAL_CHARS "\\.[]()*+?{}|^$"
 
+
 struct regex_match
 {
   const gchar *buffer;
@@ -62,6 +64,7 @@
   gint match;
   regmatch_t regmatch;
   struct regex_match *smatch = data;
+  
   regex_t *regex = g_object_get_data (G_OBJECT(tag), "regex");
 
   if(regex != NULL) { // we are concerned only by the tags that use the regex addon!
@@ -154,60 +157,53 @@
  * of a specialized function
  */
 
-/* the smileys as pictures */
-#include "../../pixmaps/inline_emoticons.h"
-
 /* needed to store the association of a string with an image */
 struct _smiley
 {
   const char *smile;
-  const guint8 *picture;
+  const char *icon_name;
 };
 
 /* the table that associates each smiley-as-a-text with a smiley-as-a-picture */
 static const struct _smiley table_smiley [] =
   {
-    {":)", gm_emoticon_face1},
-    {"8)", gm_emoticon_face2},
-    {"8-)", gm_emoticon_face2},
-    {";)", gm_emoticon_face3},
-    {";-)", gm_emoticon_face3},
-    {":(", gm_emoticon_face4},
-    {":-(", gm_emoticon_face4},
-    {":O", gm_emoticon_face5},
-    {":o", gm_emoticon_face5},
-    {":-O", gm_emoticon_face5},
-    {":-o", gm_emoticon_face5},
-    {":-D", gm_emoticon_face6},
-    {":D", gm_emoticon_face6},
-    {":-)", gm_emoticon_face7},
-    {":|", gm_emoticon_face8},
-    {":-|", gm_emoticon_face8},
-    {":-/", gm_emoticon_face9},
-    {":/", gm_emoticon_face9},
-    {":-P", gm_emoticon_face10},
-    {":-p", gm_emoticon_face10},
-    {":P", gm_emoticon_face10},
-    {":p", gm_emoticon_face10},
-    {":'(", gm_emoticon_face11},
-    {":[", gm_emoticon_face12},
-    {":-*", gm_emoticon_face13},
-    {":-x", gm_emoticon_face14},
-    {"B-)", gm_emoticon_face15},
-    {"B)", gm_emoticon_face15},
-    {"x*O", gm_emoticon_face16},
-    {"(.)", gm_emoticon_face17},
-    {"(|)", gm_emoticon_face18},
-    {":-.", gm_emoticon_face19},
-    {"X)", gm_emoticon_dead_happy},
-    {"X|", gm_emoticon_dead},
-    {"X(", gm_emoticon_dead_sad},
-    {"}:)", gm_emoticon_happy_devil},
-    {"|)", gm_emoticon_nose_glasses},
-    {"}:(", gm_emoticon_sad_devil},
-    {"|(", gm_emoticon_sad_glasses},
-    {"|-(", gm_emoticon_sad_nose_glasses},
-    {"|-)", gm_emoticon_happy_nose_glasses},
+    {"O:-)", "face-angel"},
+    {"0:-)", "face-angel"},
+    {"O:)", "face-angel"},
+    {"0:)", "face-angel"},
+    {":'(", "face-crying"},
+    {">:-)", "face-devil-grin"},
+    {">:)", "face-devil-grin"},
+    {"}:-)", "face-devil-grin"},
+    {"}:)", "face-devil-grin"},
+    {">:-(", "face-devil-sad"},
+    {">:(", "face-devil-sad"},
+    {"}:-(", "face-devil-sad"},
+    {"}:(", "face-devil-sad"},
+    {"B-)", "face-glasses"},
+    {"B)", "face-glasses"},
+    {":-*", "face-kiss"},
+    {":*", "face-kiss"},
+    {":-(|)", "face-monkey"},
+    {":(|)", "face-monkey"},
+    {":-|", "face-plain"},
+    {":|", "face-plain"},
+    {":-(", "face-sad"},
+    {":(", "face-sad"},
+    {":-)", "face-smile"},
+    {":)", "face-smile"},
+    {":-D", "face-smile-big"},
+    {":D", "face-smile-big"},
+    {":-!", "face-smirk"},
+    {":!", "face-smirk"},
+    {":-O", "face-surprise"},
+    {":O", "face-surprise"},
+    {":-0", "face-surprise"},
+    {":0", "face-surprise"},
+    {":-o", "face-surprise"},
+    {":o", "face-surprise"},
+    {";-)", "face-wink"},
+    {";)", "face-wink"},
     {NULL}
   };
 
@@ -218,16 +214,16 @@
 			       GtkTextTag *tag,
 			       const gchar *smile)
 {
+  GtkIconTheme *theme = gtk_icon_theme_get_default();
   GdkPixbuf *pixbuf = NULL;
   const struct _smiley *tmp;
 
   for (tmp = table_smiley;
-       tmp->smile != NULL && tmp->picture != NULL;
+       tmp->smile != NULL && tmp->icon_name != NULL;
        tmp++) {
 
     if (strcmp (smile, tmp->smile) == 0) {
-      pixbuf = gdk_pixbuf_new_from_inline (-1, tmp->picture, 
-					   FALSE, NULL);
+      pixbuf = gtk_icon_theme_load_icon(theme, tmp->icon_name, 22, 0, NULL);
       break;
     }
   }
@@ -238,7 +234,55 @@
     gtk_text_buffer_insert (buf, iter, smile, -1); 
 }
 
+/**
+ * gtk_text_buffer_get_smiley_regex:
+ *
+ * Returns a regex suitable for matching smilies recognized by
+ * gtk_text_buffer_insert_smiley ().
+ **/
+const gchar *
+gtk_text_buffer_get_smiley_regex ()
+{
+  const struct _smiley *tmp;
+  gchar *regex;
+  size_t regex_len = 0;
+  size_t i, j;
+  
+  /* Discover total smiley length */
+  for (tmp = table_smiley;
+       tmp->smile != NULL;
+       tmp++) {
 
+    /* Twice len for backslashes + 3 for control characters ')', '(', and '|' */
+    regex_len += strlen (tmp->smile) * 2 + 3;
+  }
+  
+  /* Would normally add 1 for ending null, but we'll skip one of the allocated
+     '|' characters, so there's an extra space available. */
+  regex = (gchar *) g_malloc (regex_len);
+
+  /* Now fill in regex string */
+  j = 0;
+  for (tmp = table_smiley;
+       tmp->smile != NULL;
+       tmp++) {
+
+    if (j)
+      regex[j++] = '|';
+
+    regex[j++] = '(';
+    for (i = 0; tmp->smile[i]; ++i) {
+      if (strchr(GM_REGEX_SPECIAL_CHARS, tmp->smile[i]) != NULL)
+      	regex[j++] = '\\';
+      regex[j++] = tmp->smile[i];
+    }
+    regex[j++] = ')';
+  }
+  regex[j] = 0;
+
+  return regex;
+}
+
 void
 gtk_text_buffer_insert_markup (GtkTextBuffer *buf,
 			       GtkTextIter *iter,
Index: lib/gui/gmtextbufferaddon.h
===================================================================
--- lib/gui/gmtextbufferaddon.h	(revision 5229)
+++ lib/gui/gmtextbufferaddon.h	(working copy)
@@ -99,7 +99,15 @@
 				    GtkTextTag *tag,
 				    const gchar *smile);
 
+/**
+ * gtk_text_buffer_get_smiley_regex:
+ *
+ * Returns a regex suitable for matching smilies recognized by
+ * gtk_text_buffer_insert_smiley ().
+ **/
+const gchar *gtk_text_buffer_get_smiley_regex ();
 
+
 /**
  * gtk_text_buffer_insert_markup:
  * @buf: A pointer to a GtkTextBuffer
Index: Makefile.am
===================================================================
--- Makefile.am	(revision 5229)
+++ Makefile.am	(working copy)
@@ -1,5 +1,3 @@
-icondir=$(datadir)/pixmaps
-
 ### Don't execute make in the help subdirectory if DISABLE_GNOME is set
 if DISABLE_GNOME
 SUBDIRS = man sounds pixmaps lib src po plugins
@@ -22,9 +20,6 @@
 SCHEMAS_FILE = @PACKAGE_NAME@.schemas
 
 
-### Icon
-icon_DATA = pixmaps/@PACKAGE_NAME@.png
-
 ### Win32 files
 WIN32_DIST = \
 	win32/ico/ekiga.ico					\
