diff -urN logjam-4.4.1/src/friends.c logjam-4.4.1.olo/src/friends.c
--- logjam-4.4.1/src/friends.c	2004-03-29 07:28:25.000000000 +0200
+++ logjam-4.4.1.olo/src/friends.c	2005-02-17 21:53:08.000000000 +0100
@@ -983,8 +983,13 @@
 }
 
 static void
-export_do(JamFriendsUI *fui, GtkFileSelection *fsel) {
-	const char *filename = gtk_file_selection_get_filename(fsel);
+#if GTK_CHECK_VERSION(2,4,0)
+export_do(JamFriendsUI *fui, GtkFileChooser *fsel) {
+	const char *filename = gtk_file_chooser_get_filename(fsel);
+#else
+export_do(JamFriendsUI *fui, GtkFileChooser *fsel) {
+	const char *filename = gtk_file_chooser_get_filename(fsel);
+#endif
 	FILE *fout;
 	LJFriend *f;
 	GSList *l;
@@ -1007,7 +1012,11 @@
 }
 
 static void
+#if GTK_CHECK_VERSION(2,4,0)
+suggest_cb(GtkWidget *w, GtkFileChooser *fsel) {
+#else
 suggest_cb(GtkWidget *w, GtkWidget *entry) {
+#endif
 	char buf[50];
 	time_t curtime;
 	struct tm *date;
@@ -1018,7 +1027,11 @@
 	sprintf(buf, "friends.%04d-%02d-%02d", 
 			date->tm_year+1900, date->tm_mon+1, date->tm_mday);
 
+#if GTK_CHECK_VERSION(2,4,0)
+	gtk_file_chooser_set_filename(fsel, buf);
+#else
 	gtk_entry_set_text(GTK_ENTRY(entry), buf);
+#endif
 }
 
 static void
@@ -1026,18 +1039,38 @@
 	GtkWidget *fsel;
 	GtkWidget *bstamp;
 
+#if GTK_CHECK_VERSION(2,4,0)
+	fsel = jam_filesel_new(_("Select output file"), GTK_WINDOW(fui), GTK_FILE_CHOOSER_ACTION_SAVE);
+#else
 	fsel = jam_filesel_new(_("Select output file"), GTK_WINDOW(fui));
+#endif
 
 	bstamp = gtk_button_new_with_label(_("  Suggest Filename  "));
+
+#if GTK_CHECK_VERSION(2,4,0)
+	gtk_widget_show(bstamp);
+	gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(fsel), bstamp);
+#else
 	gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(fsel)->action_area),
-			bstamp, FALSE, FALSE, 0);
+	     bstamp, FALSE, FALSE, 0);
+#endif
+
 	g_signal_connect(G_OBJECT(bstamp), "clicked",
 			G_CALLBACK(suggest_cb), 
+#if GTK_CHECK_VERSION(2,4,0)
+			GTK_FILE_CHOOSER(fsel));
+#else
 			GTK_FILE_SELECTION(fsel)->selection_entry);
 	gtk_widget_show(bstamp);
+#endif
 
+#if GTK_CHECK_VERSION(2,4,0)
+	if (gtk_dialog_run(GTK_DIALOG(fsel)) == GTK_RESPONSE_ACCEPT)
+		export_do(fui, GTK_FILE_CHOOSER(fsel));
+#else
 	if (gtk_dialog_run(GTK_DIALOG(fsel)) == GTK_RESPONSE_OK)
 		export_do(fui, GTK_FILE_SELECTION(fsel));
+#endif
 	gtk_widget_destroy(fsel);
 }
 
diff -urN logjam-4.4.1/src/jam.c logjam-4.4.1.olo/src/jam.c
--- logjam-4.4.1/src/jam.c	2004-03-29 07:28:32.000000000 +0200
+++ logjam-4.4.1.olo/src/jam.c	2005-02-17 21:57:31.000000000 +0100
@@ -98,13 +98,26 @@
 	GError *err = NULL;
 	gboolean ret = FALSE;
 	
+#if GTK_CHECK_VERSION(2,4,0)
+	filesel = jam_filesel_new(_("Save Entry As"), GTK_WINDOW(jw), GTK_FILE_CHOOSER_ACTION_SAVE);
+#else
 	filesel = jam_filesel_new(_("Save Entry As"), GTK_WINDOW(jw));
+#endif
 
+#if GTK_CHECK_VERSION(2,4,0)
+	while (gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT) {
+#else
 	while (gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_OK) {
+#endif
 		const gchar *filename;
 		struct stat sbuf;
+#if GTK_CHECK_VERSION(2,4,0)
+		filename = gtk_file_chooser_get_filename(
+				GTK_FILE_CHOOSER(filesel));
+#else
 		filename = gtk_file_selection_get_filename(
 				GTK_FILE_SELECTION(filesel));
+#endif
 		if (stat(filename, &sbuf) == 0) {
 			if (!jam_confirm(GTK_WINDOW(filesel), _("Save Entry As"),
 						_("File already exists!  Overwrite?")))
@@ -491,7 +504,11 @@
 
 	if (!jam_confirm_lose_entry(jw)) return;
 	
+#if GTK_CHECK_VERSION(2,4,0)
+	filesel = jam_filesel_new(_("Open Entry"), GTK_WINDOW(jw), GTK_FILE_CHOOSER_ACTION_OPEN);
+#else
 	filesel = jam_filesel_new(_("Open Entry"), GTK_WINDOW(jw));
+#endif
 
 	filetype = gtk_option_menu_new();
 	menu = gtk_menu_new();
@@ -508,17 +525,30 @@
 	gtk_box_pack_start(GTK_BOX(hbox), filetype, TRUE, TRUE, 0);
 	gtk_widget_show_all(hbox);
 
+#if GTK_CHECK_VERSION(2,4,0)
+	gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(filesel), hbox);
+#else
 	gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(filesel)->main_vbox),
 			hbox, FALSE, FALSE, 0);
+#endif
 	
+#if GTK_CHECK_VERSION(2,4,0)
+	while (gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT) {
+#else
 	while (gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_OK) {
+#endif
 		const gchar *filename;
 		GError *err = NULL;
 		int op = gtk_option_menu_get_history(GTK_OPTION_MENU(filetype));
 		LJEntryFileType type = filetypes[op].type;
 
+#if GTK_CHECK_VERSION(2,4,0)
+		filename = gtk_file_chooser_get_filename(
+				GTK_FILE_CHOOSER(filesel));
+#else
 		filename = gtk_file_selection_get_filename(
 				GTK_FILE_SELECTION(filesel));
+#endif
 
 		if (!jam_doc_load_file(jw->doc, filename, type, &err)) {
 			jam_warning(GTK_WINDOW(filesel), err->message);
diff -urN logjam-4.4.1/src/tools.c logjam-4.4.1.olo/src/tools.c
--- logjam-4.4.1/src/tools.c	2004-03-29 07:28:29.000000000 +0200
+++ logjam-4.4.1.olo/src/tools.c	2005-02-17 22:00:16.000000000 +0100
@@ -144,7 +144,11 @@
 	GList *strings = NULL;
 	const char *localeenc;
 
+#if GTK_CHECK_VERSION(2,4,0)
+	filesel = jam_filesel_new(_("Select File"), win, GTK_FILE_CHOOSER_ACTION_OPEN);
+#else
 	filesel = jam_filesel_new(_("Select File"), win);
+#endif
 	label = gtk_label_new(NULL);
 	gtk_label_set_text_with_mnemonic(GTK_LABEL(label),
 			_("File _encoding:"));
@@ -167,13 +171,22 @@
 			hbox, FALSE, FALSE, 0);
 	gtk_widget_show_all(hbox);
 
+#if GTK_CHECK_VERSION(2,4,0)
+	while (gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT) {
+#else
 	while (gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_OK) {
+#endif
 		const gchar *filename;
 		const gchar *encoding;
 		GError *err = NULL;
 
+#if GTK_CHECK_VERSION(2,4,0)
+		filename = gtk_file_chooser_get_filename(
+				GTK_FILE_CHOOSER(filesel));
+#else
 		filename = gtk_file_selection_get_filename(
 				GTK_FILE_SELECTION(filesel));
+#endif
 		encoding = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
 
 		if (!jam_doc_insert_file(doc, filename, encoding, &err)) {
diff -urN logjam-4.4.1/src/util-gtk.c logjam-4.4.1.olo/src/util-gtk.c
--- logjam-4.4.1/src/util-gtk.c	2004-03-29 07:28:32.000000000 +0200
+++ logjam-4.4.1.olo/src/util-gtk.c	2005-02-17 21:48:39.000000000 +0100
@@ -421,14 +421,32 @@
 }
 
 GtkWidget*
+#if GTK_CHECK_VERSION(2,4,0)
+jam_filesel_new(const gchar *title, GtkWindow *parent, GtkFileChooserAction action) {
+#else
 jam_filesel_new(const gchar *title, GtkWindow *parent) {
+#endif
 	GtkWidget *filesel;
 
+#if GTK_CHECK_VERSION(2,4,0)
+	if (action == GTK_FILE_CHOOSER_ACTION_SAVE) {
+		filesel = gtk_file_chooser_dialog_new(title, parent, action,
+				GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+				GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+				NULL);
+	} else {
+		filesel = gtk_file_chooser_dialog_new(title, parent, action,
+				GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+				GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+				NULL);
+	}
+#else
 	filesel = gtk_file_selection_new(title);
 	/* this should really be a systemwide setting, but the gtk file selector
 	 * sucks. */
 	gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(filesel));
 	gtk_window_set_transient_for(GTK_WINDOW(filesel), parent);
+#endif
 	return filesel;
 }
 
diff -urN logjam-4.4.1/src/util.h logjam-4.4.1.olo/src/util.h
--- logjam-4.4.1/src/util.h	2005-01-03 09:18:01.000000000 +0100
+++ logjam-4.4.1.olo/src/util.h	2005-02-17 21:49:19.000000000 +0100
@@ -42,7 +42,11 @@
 
 void jam_win_set_size(GtkWindow *win, int width, int height);
 
+#if GTK_CHECK_VERSION(2,4,0)
+GtkWidget* jam_filesel_new(const gchar *title, GtkWindow *parent, GtkFileChooserAction action);
+#else
 GtkWidget* jam_filesel_new(const gchar *title, GtkWindow *parent);
+#endif
 
 GtkWidget* jam_dialog_set_contents(GtkDialog *dlg, GtkWidget *contents);
 
