diff --git a/src/build.c b/src/build.c
index 0385902..543eb36 100644
--- a/src/build.c
+++ b/src/build.c
@@ -2339,8 +2339,8 @@ static void show_build_commands_dialog(void)
 		ft = doc->file_type;
 	dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(main_widgets.window),
 										GTK_DIALOG_DESTROY_WITH_PARENT,
-										GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-										GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+										_("_Cancel"), GTK_RESPONSE_CANCEL,
+										_("_OK"), GTK_RESPONSE_ACCEPT, NULL);
 	table = build_commands_table(doc, GEANY_BCS_PREF, &table_data, ft);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
 	gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0);
diff --git a/src/callbacks.c b/src/callbacks.c
index b09f822..879f397 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -145,7 +145,7 @@ G_MODULE_EXPORT gboolean on_exit_clicked(GtkWidget *widget, gpointer gdata)
 	}
 	else
 	if (! prefs.confirm_exit ||
-		dialogs_show_question_full(NULL, GTK_STOCK_QUIT, GTK_STOCK_CANCEL, NULL,
+		dialogs_show_question_full(NULL, _("_Quit"), _("_Cancel"), NULL,
 			_("Do you really want to quit?")))
 	{
 		quit_app();
@@ -430,7 +430,7 @@ G_MODULE_EXPORT void on_reload_as_activate(GtkMenuItem *menuitem, gpointer user_
 	base_name = g_path_get_basename(doc->file_name);
 	/* don't prompt if file hasn't been edited at all */
 	if ((!doc->changed && !document_can_undo(doc) && !document_can_redo(doc)) ||
-		dialogs_show_question_full(NULL, _("_Reload"), GTK_STOCK_CANCEL,
+		dialogs_show_question_full(NULL, _("_Reload"), _("_Cancel"),
 		_("Any unsaved changes will be lost."),
 		_("Are you sure you want to reload '%s'?"), base_name))
 	{
diff --git a/src/dialogs.c b/src/dialogs.c
index 94b0e8b..2f5807f 100644
--- a/src/dialogs.c
+++ b/src/dialogs.c
@@ -361,7 +361,7 @@ static GtkWidget *create_open_file_dialog(void)
 		_("Opens the file in read-only mode. If you choose more than one file to open, all files will be opened read-only."));
 
 	gtk_dialog_add_buttons(GTK_DIALOG(dialog),
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		_("_Cancel"), GTK_RESPONSE_CANCEL,
 		GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
 	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
 
@@ -567,7 +567,7 @@ static GtkWidget *create_save_file_dialog(GeanyDocument *doc)
 	gtk_widget_set_sensitive(rename_btn, doc->real_path != NULL);
 
 	gtk_dialog_add_buttons(GTK_DIALOG(dialog),
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		_("_Cancel"), GTK_RESPONSE_CANCEL,
 		GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
 	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
 
@@ -760,15 +760,18 @@ void dialogs_show_msgbox_with_secondary(GtkMessageType type, const gchar *text,
 static gint run_unsaved_dialog(const gchar *msg, const gchar *msg2)
 {
 	GtkWidget *dialog, *button;
+	gboolean rtl;
 	gint ret;
 
+	rtl = gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL;
+
 	dialog = gtk_message_dialog_new(GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
 			GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", msg);
 	gtk_window_set_title(GTK_WINDOW(dialog), _("Question"));
 	gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", msg2);
-	gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+	gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Cancel"), GTK_RESPONSE_CANCEL);
 
-	button = ui_button_new_with_image(GTK_STOCK_CLEAR, _("_Don't save"));
+	button = ui_button_new_with_image(rtl ? "edit-clear-rtl-symbolic" : "edit-clear-symbolic", _("_Don't save"));
 	gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button, GTK_RESPONSE_NO);
 	gtk_widget_show(button);
 
@@ -1007,8 +1010,8 @@ dialogs_show_input_full(const gchar *title, GtkWindow *parent,
 	GtkWidget *dialog, *vbox;
 
 	dialog = gtk_dialog_new_with_buttons(title, parent,
-		GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-		GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+		GTK_DIALOG_DESTROY_WITH_PARENT, _("_Cancel"), GTK_RESPONSE_CANCEL,
+		_("_OK"), GTK_RESPONSE_ACCEPT, NULL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
 	gtk_widget_set_name(dialog, "GeanyDialog");
 	gtk_box_set_spacing(GTK_BOX(vbox), 6);
@@ -1112,8 +1115,8 @@ gboolean dialogs_show_input_numeric(const gchar *title, const gchar *label_text,
 
 	dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(main_widgets.window),
 										GTK_DIALOG_DESTROY_WITH_PARENT,
-										GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-										GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+										_("_Cancel"), GTK_RESPONSE_CANCEL,
+										_("_OK"), GTK_RESPONSE_ACCEPT, NULL);
 	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CANCEL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
 	gtk_widget_set_name(dialog, "GeanyDialog");
@@ -1341,7 +1344,7 @@ static gint show_prompt(GtkWidget *parent,
 
 	/* For a cancel button, use cancel response so user can press escape to cancel */
 	btn = gtk_dialog_add_button(GTK_DIALOG(dialog), btn_2,
-		utils_str_equal(btn_2, GTK_STOCK_CANCEL) ? GTK_RESPONSE_CANCEL : response_2);
+		utils_str_equal(btn_2, _("_Cancel")) ? GTK_RESPONSE_CANCEL : response_2);
 	/* we don't want a default, but we need to override the apply button as default */
 	gtk_widget_grab_default(btn);
 	gtk_dialog_add_button(GTK_DIALOG(dialog), btn_3, response_3);
diff --git a/src/document.c b/src/document.c
index 1e05c88..ba521b3 100644
--- a/src/document.c
+++ b/src/document.c
@@ -1957,7 +1957,7 @@ gint document_find_text(GeanyDocument *doc, const gchar *text, const gchar *orig
 
 		/* we searched only part of the document, so ask whether to wraparound. */
 		if (search_prefs.always_wrap ||
-			dialogs_show_question_full(parent, GTK_STOCK_FIND, GTK_STOCK_CANCEL,
+			dialogs_show_question_full(parent, GTK_STOCK_FIND, _("_Cancel"),
 				_("Wrap search and find again?"), _("\"%s\" was not found."), original_text))
 		{
 			gint ret;
@@ -2969,7 +2969,7 @@ static gboolean monitor_resave_missing_file(GeanyDocument *doc)
 
 	ret = dialogs_show_prompt(NULL,
 		_("Close _without saving"), GTK_RESPONSE_CLOSE,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		_("_Cancel"), GTK_RESPONSE_CANCEL,
 		GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
 		_("Try to resave the file?"),
 		_("File \"%s\" was not found on disk!"),
diff --git a/src/geanymenubuttonaction.c b/src/geanymenubuttonaction.c
index 4f4dfba..1a0f45f 100644
--- a/src/geanymenubuttonaction.c
+++ b/src/geanymenubuttonaction.c
@@ -158,14 +158,14 @@ GtkAction *geany_menu_button_action_new(const gchar *name,
 										const gchar *label,
 									    const gchar *tooltip,
 									    const gchar *tooltip_arrow,
-										const gchar *stock_id)
+										const gchar *icon_name)
 {
 	GtkAction *action = g_object_new(GEANY_MENU_BUTTON_ACTION_TYPE,
 		"name", name,
 		"label", label,
 		"tooltip", tooltip,
 		"tooltip-arrow", tooltip_arrow,
-		"stock-id", stock_id,
+		"icon-name", icon_name,
 		NULL);
 
 	return action;
diff --git a/src/geanymenubuttonaction.h b/src/geanymenubuttonaction.h
index ac23faf..6af04ce 100644
--- a/src/geanymenubuttonaction.h
+++ b/src/geanymenubuttonaction.h
@@ -56,7 +56,7 @@ GtkAction*	geany_menu_button_action_new		(const gchar	*name,
 												 const gchar	*label,
 												 const gchar	*tooltip,
 												 const gchar	*tooltip_arrow,
-												 const gchar	*stock_id);
+												 const gchar	*icon_name);
 GtkWidget*	geany_menu_button_action_get_menu	(GeanyMenubuttonAction *action);
 
 void		geany_menu_button_action_set_menu	(GeanyMenubuttonAction *action, GtkWidget *menu);
diff --git a/src/gtkcompat.h b/src/gtkcompat.h
index ca1c187..44bc111 100644
--- a/src/gtkcompat.h
+++ b/src/gtkcompat.h
@@ -130,6 +130,14 @@ G_BEGIN_DECLS
 #	define gtk_hscrollbar_new(adj)	gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, (adj))
 #endif
 
+/* gtk_button_new_from_icon_name() is added in GTK 3.10 */
+#if ! GTK_CHECK_VERSION(3, 10, 0)
+#	define gtk_button_new_from_icon_name(icon__name, __size__) \
+		g_object_new(GTK_TYPE_BUTTON, \
+					    "image", gtk_image_new_from_icon_name ((icon__name), (__size__)), \
+					    NULL)
+#endif
+
 
 G_END_DECLS
 
diff --git a/src/main.c b/src/main.c
index f958607..21efb2b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -664,7 +664,7 @@ static gint create_config_dir(void)
 			if (g_file_test(old_dir, G_FILE_TEST_EXISTS))
 			{
 				if (! dialogs_show_question_full(main_widgets.window,
-					GTK_STOCK_YES, GTK_STOCK_QUIT, _("Move it now?"),
+					GTK_STOCK_YES, _("_Quit"), _("Move it now?"),
 					"%s",
 					_("Geany needs to move your old configuration directory before starting.")))
 					exit(0);
diff --git a/src/notebook.c b/src/notebook.c
index cea60e8..f11bc19 100644
--- a/src/notebook.c
+++ b/src/notebook.c
@@ -645,7 +645,7 @@ static void notebook_tab_close_button_style_set(GtkWidget *btn, GtkRcStyle *prev
 {
 	gint w, h;
 
-	gtk_icon_size_lookup_for_settings(gtk_widget_get_settings(btn), GTK_ICON_SIZE_MENU, &w, &h);
+	gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &w, &h);
 	gtk_widget_set_size_request(btn, w + 2, h + 2);
 }
 
@@ -679,16 +679,13 @@ gint notebook_new_tab(GeanyDocument *this)
 
 	if (file_prefs.show_tab_cross)
 	{
-		GtkWidget *image, *btn, *align;
+		GtkWidget *btn, *align;
 
-		btn = gtk_button_new();
+		btn = gtk_button_new_from_icon_name("edit-delete-symbolic", GTK_ICON_SIZE_MENU);
 		gtk_button_set_relief(GTK_BUTTON(btn), GTK_RELIEF_NONE);
 		gtk_button_set_focus_on_click(GTK_BUTTON(btn), FALSE);
 		gtk_widget_set_name(btn, "geany-close-tab-button");
 
-		image = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
-		gtk_container_add(GTK_CONTAINER(btn), image);
-
 		align = gtk_alignment_new(1.0, 0.5, 0.0, 0.0);
 		gtk_container_add(GTK_CONTAINER(align), btn);
 		gtk_box_pack_start(GTK_BOX(hbox), align, TRUE, TRUE, 0);
diff --git a/src/plugins.c b/src/plugins.c
index 08523d8..f9aff9b 100644
--- a/src/plugins.c
+++ b/src/plugins.c
@@ -1423,7 +1423,7 @@ static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data)
 
 	pm_widgets.dialog = gtk_dialog_new_with_buttons(_("Plugins"), GTK_WINDOW(main_widgets.window),
 						GTK_DIALOG_DESTROY_WITH_PARENT,
-						GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+						_("_OK"), GTK_RESPONSE_OK, NULL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(pm_widgets.dialog));
 	gtk_widget_set_name(pm_widgets.dialog, "GeanyDialog");
 	gtk_box_set_spacing(GTK_BOX(vbox), 6);
diff --git a/src/pluginutils.c b/src/pluginutils.c
index 102369f..13157de 100644
--- a/src/pluginutils.c
+++ b/src/pluginutils.c
@@ -330,8 +330,8 @@ static void configure_plugins(Plugin *current_plugin)
 	dialog = gtk_dialog_new_with_buttons(_("Configure Plugins"),
 		GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
 		GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-		GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+		_("_Cancel"), GTK_RESPONSE_CANCEL,
+		_("_OK"), GTK_RESPONSE_OK, NULL);
 	gtk_widget_set_name(dialog, "GeanyDialog");
 
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
diff --git a/src/prefs.c b/src/prefs.c
index 52049f0..07c8e36 100644
--- a/src/prefs.c
+++ b/src/prefs.c
@@ -178,8 +178,8 @@ static void kb_tree_view_change_button_clicked_cb(GtkWidget *button, gpointer da
 
 			dialog = gtk_dialog_new_with_buttons(_("Grab Key"), GTK_WINDOW(ui_widgets.prefs_dialog),
 					GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
-					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-					GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+					_("_Cancel"), GTK_RESPONSE_CANCEL,
+					_("_OK"), GTK_RESPONSE_ACCEPT, NULL);
 
 			str = g_strdup_printf(
 					_("Press the combination of the keys you want to use for \"%s\"."), name);
@@ -1491,7 +1491,7 @@ static gboolean kb_find_duplicate(GtkWidget *parent, GtkTreeIter *old_iter,
 				gtk_tree_model_get(model, &iter, KB_TREE_ACTION, &label, -1);
 				ret = dialogs_show_prompt(parent,
 					_("_Allow"), GTK_RESPONSE_APPLY,
-					GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
+					_("_Cancel"), GTK_RESPONSE_NO,
 					_("_Override"), GTK_RESPONSE_YES,
 					_("Override that keybinding?"),
 					_("The combination '%s' is already used for \"%s\"."),
diff --git a/src/project.c b/src/project.c
index 59df23a..bd3a32f 100644
--- a/src/project.c
+++ b/src/project.c
@@ -118,7 +118,7 @@ void project_new(void)
 	e = g_new0(PropertyDialogElements, 1);
 	e->dialog = gtk_dialog_new_with_buttons(_("New Project"), GTK_WINDOW(main_widgets.window),
 										 GTK_DIALOG_DESTROY_WITH_PARENT,
-										 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+										 _("_Cancel"), GTK_RESPONSE_CANCEL, NULL);
 
 	gtk_widget_set_name(e->dialog, "GeanyDialogProject");
 	bbox = gtk_hbox_new(FALSE, 0);
@@ -283,7 +283,7 @@ void project_open(void)
 
 	dialog = gtk_file_chooser_dialog_new(_("Open Project"), GTK_WINDOW(main_widgets.window),
 			GTK_FILE_CHOOSER_ACTION_OPEN,
-			GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+			_("_Cancel"), GTK_RESPONSE_CANCEL,
 			GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
 	gtk_widget_set_name(dialog, "GeanyDialogProject");
 
@@ -424,7 +424,7 @@ on_project_properties_base_path_button_clicked(GtkWidget *button,
 
 	dialog = gtk_file_chooser_dialog_new(_("Choose Project Base Path"),
 		NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		_("_Cancel"), GTK_RESPONSE_CANCEL,
 		GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
 		NULL);
 
@@ -600,7 +600,7 @@ gboolean project_ask_close(void)
 {
 	if (app->project != NULL)
 	{
-		if (dialogs_show_question_full(NULL, GTK_STOCK_CLOSE, GTK_STOCK_CANCEL,
+		if (dialogs_show_question_full(NULL, GTK_STOCK_CLOSE, _("_Cancel"),
 			_("Do you want to close it before proceeding?"),
 			_("The '%s' project is open."), app->project->name))
 		{
@@ -691,7 +691,7 @@ static gboolean update_config(const PropertyDialogElements *e, gboolean new_proj
 		{
 			gboolean create_dir;
 
-			create_dir = dialogs_show_question_full(NULL, GTK_STOCK_OK, GTK_STOCK_CANCEL,
+			create_dir = dialogs_show_question_full(NULL, _("_OK"), _("_Cancel"),
 				_("Create the project's base path directory?"),
 				_("The path \"%s\" does not exist."),
 				base_path);
@@ -872,7 +872,7 @@ static void on_file_save_button_clicked(GtkButton *button, PropertyDialogElement
 	/* initialise the dialog */
 	dialog = gtk_file_chooser_dialog_new(_("Choose Project Filename"), NULL,
 					GTK_FILE_CHOOSER_ACTION_SAVE,
-					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+					_("_Cancel"), GTK_RESPONSE_CANCEL,
 					GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
 	gtk_widget_set_name(dialog, "GeanyDialogProject");
 	gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
diff --git a/src/search.c b/src/search.c
index 2c04e17..acff626 100644
--- a/src/search.c
+++ b/src/search.c
@@ -448,20 +448,23 @@ static void create_find_dialog(void)
 {
 	GtkWidget *label, *entry, *sbox, *vbox;
 	GtkWidget *exp, *bbox, *button, *check_close;
+	gboolean rtl;
+
+	rtl = gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL;
 
 	find_dlg.dialog = gtk_dialog_new_with_buttons(_("Find"),
 		GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
-		GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL);
+		_("_Close"), GTK_RESPONSE_CANCEL, NULL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(find_dlg.dialog));
 	gtk_widget_set_name(find_dlg.dialog, "GeanyDialogSearch");
 	gtk_box_set_spacing(GTK_BOX(vbox), 9);
 
-	button = ui_button_new_with_image(GTK_STOCK_GO_BACK, _("_Previous"));
+	button = ui_button_new_with_image(rtl ? "go-previous-rtl-symbolic" : "go-previous-symbolic", _("_Previous"));
 	gtk_dialog_add_action_widget(GTK_DIALOG(find_dlg.dialog), button,
 		GEANY_RESPONSE_FIND_PREVIOUS);
 	ui_hookup_widget(find_dlg.dialog, button, "btn_previous");
 
-	button = ui_button_new_with_image(GTK_STOCK_GO_FORWARD, _("_Next"));
+	button = ui_button_new_with_image(rtl ? "go-next-rtl-symbolic" : "go-next-symbolic", _("_Next"));
 	gtk_dialog_add_action_widget(GTK_DIALOG(find_dlg.dialog), button,
 		GEANY_RESPONSE_FIND);
 
@@ -605,22 +608,18 @@ static void create_replace_dialog(void)
 
 	replace_dlg.dialog = gtk_dialog_new_with_buttons(_("Replace"),
 		GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
-		GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL);
+		_("_Close"), GTK_RESPONSE_CANCEL, NULL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(replace_dlg.dialog));
 	gtk_box_set_spacing(GTK_BOX(vbox), 9);
 	gtk_widget_set_name(replace_dlg.dialog, "GeanyDialogSearch");
 
-	button = gtk_button_new_from_stock(GTK_STOCK_FIND);
+	button = gtk_button_new_with_mnemonic(_("_Find"));
 	gtk_dialog_add_action_widget(GTK_DIALOG(replace_dlg.dialog), button,
 		GEANY_RESPONSE_FIND);
 	button = gtk_button_new_with_mnemonic(_("_Replace"));
-	gtk_button_set_image(GTK_BUTTON(button),
-		gtk_image_new_from_stock(GTK_STOCK_FIND_AND_REPLACE, GTK_ICON_SIZE_BUTTON));
 	gtk_dialog_add_action_widget(GTK_DIALOG(replace_dlg.dialog), button,
 		GEANY_RESPONSE_REPLACE);
 	button = gtk_button_new_with_mnemonic(_("Replace & Fi_nd"));
-	gtk_button_set_image(GTK_BUTTON(button),
-		gtk_image_new_from_stock(GTK_STOCK_FIND_AND_REPLACE, GTK_ICON_SIZE_BUTTON));
 	gtk_dialog_add_action_widget(GTK_DIALOG(replace_dlg.dialog), button,
 		GEANY_RESPONSE_REPLACE_AND_FIND);
 
@@ -854,12 +853,12 @@ static void create_fif_dialog(void)
 
 	fif_dlg.dialog = gtk_dialog_new_with_buttons(
 		_("Find in Files"), GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+		_("_Cancel"), GTK_RESPONSE_CANCEL, NULL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(fif_dlg.dialog));
 	gtk_box_set_spacing(GTK_BOX(vbox), 9);
 	gtk_widget_set_name(fif_dlg.dialog, "GeanyDialogSearch");
 
-	gtk_dialog_add_button(GTK_DIALOG(fif_dlg.dialog), GTK_STOCK_FIND, GTK_RESPONSE_ACCEPT);
+	gtk_dialog_add_button(GTK_DIALOG(fif_dlg.dialog), "edit-find-symbolic", GTK_RESPONSE_ACCEPT);
 	gtk_dialog_set_default_response(GTK_DIALOG(fif_dlg.dialog),
 		GTK_RESPONSE_ACCEPT);
 
diff --git a/src/symbols.c b/src/symbols.c
index 0eeba04..81cef2e 100644
--- a/src/symbols.c
+++ b/src/symbols.c
@@ -1823,7 +1823,7 @@ void symbols_show_load_tags_dialog(void)
 
 	dialog = gtk_file_chooser_dialog_new(_("Load Tags"), GTK_WINDOW(main_widgets.window),
 		GTK_FILE_CHOOSER_ACTION_OPEN,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		_("_Cancel"), GTK_RESPONSE_CANCEL,
 		GTK_STOCK_OPEN, GTK_RESPONSE_OK,
 		NULL);
 	gtk_widget_set_name(dialog, "GeanyDialog");
diff --git a/src/toolbar.c b/src/toolbar.c
index 8369b90..14f1661 100644
--- a/src/toolbar.c
+++ b/src/toolbar.c
@@ -51,37 +51,29 @@ static GSList *plugin_items = NULL;
  * Fields: name, stock_id, label, accelerator, tooltip, callback */
 static const GtkActionEntry ui_entries[] = {
 	/* custom actions defined in toolbar_init(): "New", "Open", "SearchEntry", "GotoEntry", "Build" */
-	{ "Save", GTK_STOCK_SAVE, NULL, NULL, N_("Save the current file"), G_CALLBACK(on_toolbutton_save_clicked) },
-	{ "SaveAs", GTK_STOCK_SAVE_AS, NULL, NULL, N_("Save as"), G_CALLBACK(on_save_as1_activate) },
-	{ "SaveAll", GEANY_STOCK_SAVE_ALL, NULL, NULL, N_("Save all open files"), G_CALLBACK(on_save_all1_activate) },
-	{ "Reload", GTK_STOCK_REVERT_TO_SAVED, NULL, NULL, N_("Reload the current file from disk"), G_CALLBACK(on_toolbutton_reload_clicked) },
-	{ "Close", GTK_STOCK_CLOSE, NULL, NULL, N_("Close the current file"), G_CALLBACK(on_toolbutton_close_clicked) },
-	{ "CloseAll", GEANY_STOCK_CLOSE_ALL, NULL, NULL, N_("Close all open files"), G_CALLBACK(on_toolbutton_close_all_clicked) },
-	{ "Cut", GTK_STOCK_CUT, NULL, NULL, N_("Cut the current selection"), G_CALLBACK(on_cut1_activate) },
-	{ "Copy", GTK_STOCK_COPY, NULL, NULL, N_("Copy the current selection"), G_CALLBACK(on_copy1_activate) },
-	{ "Paste", GTK_STOCK_PASTE, NULL, NULL, N_("Paste the contents of the clipboard"), G_CALLBACK(on_paste1_activate) },
-	{ "Delete", GTK_STOCK_DELETE, NULL, NULL, N_("Delete the current selection"), G_CALLBACK(on_delete1_activate) },
-	{ "Undo", GTK_STOCK_UNDO, NULL, NULL, N_("Undo the last modification"), G_CALLBACK(on_undo1_activate) },
-	{ "Redo", GTK_STOCK_REDO, NULL, NULL, N_("Redo the last modification"), G_CALLBACK(on_redo1_activate) },
-	{ "NavBack", GTK_STOCK_GO_BACK, NULL, NULL, N_("Navigate back a location"), G_CALLBACK(on_back_activate) },
-	{ "NavFor", GTK_STOCK_GO_FORWARD, NULL, NULL, N_("Navigate forward a location"), G_CALLBACK(on_forward_activate) },
+	{ "Save", "document-save-symbolic", N_("_Save"), NULL, N_("Save the current file"), G_CALLBACK(on_toolbutton_save_clicked) },
+	{ "SaveAs", "document-save-as-symbolic", N_("Save _As"), NULL, N_("Save as"), G_CALLBACK(on_save_as1_activate) },
+	{ "SaveAll", GEANY_STOCK_SAVE_ALL, N_("Save _All"), NULL, N_("Save all open files"), G_CALLBACK(on_save_all1_activate) },
+	{ "Reload", "document-revert", N_("_Revert"), NULL, N_("Reload the current file from disk"), G_CALLBACK(on_toolbutton_reload_clicked) },
+	{ "Close", "window-close-symbolic", N_("_Close"), NULL, N_("Close the current file"), G_CALLBACK(on_toolbutton_close_clicked) },
+	{ "CloseAll", GEANY_STOCK_CLOSE_ALL, N_("Close All"), NULL, N_("Close all open files"), G_CALLBACK(on_toolbutton_close_all_clicked) },
+	{ "Cut", "edit-cut-symbolic", N_("Cu_t"), NULL, N_("Cut the current selection"), G_CALLBACK(on_cut1_activate) },
+	{ "Copy", "edit-copy-symbolic", N_("_Copy"), NULL, N_("Copy the current selection"), G_CALLBACK(on_copy1_activate) },
+	{ "Paste", "edit-paste-symbolic", N_("_Paste"), NULL, N_("Paste the contents of the clipboard"), G_CALLBACK(on_paste1_activate) },
+	{ "Delete", "edit-delete-symbolic", N_("_Delete"), NULL, N_("Delete the current selection"), G_CALLBACK(on_delete1_activate) },
 	{ "Compile", GTK_STOCK_CONVERT, N_("Compile"), NULL, N_("Compile the current file"), G_CALLBACK(on_toolbutton_compile_clicked) },
-	{ "Run", GTK_STOCK_EXECUTE, NULL, NULL, N_("Run or view the current file"), G_CALLBACK(on_toolbutton_run_clicked) },
+	{ "Run", "system-run-symbolic", N_("_Execute"), NULL, N_("Run or view the current file"), G_CALLBACK(on_toolbutton_run_clicked) },
 	{ "Color", GTK_STOCK_SELECT_COLOR, N_("Color Chooser"), NULL, N_("Open a color chooser dialog, to interactively pick colors from a palette"), G_CALLBACK(on_show_color_chooser1_activate) },
-	{ "ZoomIn", GTK_STOCK_ZOOM_IN, NULL, NULL, N_("Zoom in the text"), G_CALLBACK(on_zoom_in1_activate) },
-	{ "ZoomOut", GTK_STOCK_ZOOM_OUT, NULL, NULL, N_("Zoom out the text"), G_CALLBACK(on_zoom_out1_activate) },
-	{ "UnIndent", GTK_STOCK_UNINDENT, NULL, NULL, N_("Decrease indentation"), G_CALLBACK(on_menu_decrease_indent1_activate) },
-	{ "Indent", GTK_STOCK_INDENT, NULL, NULL, N_("Increase indentation"), G_CALLBACK(on_menu_increase_indent1_activate) },
-	{ "Search", GTK_STOCK_FIND, NULL, NULL, N_("Find the entered text in the current file"), G_CALLBACK(on_toolbutton_search_clicked) },
-	{ "Goto", GTK_STOCK_JUMP_TO, NULL, NULL, N_("Jump to the entered line number"), G_CALLBACK(on_toolbutton_goto_clicked) },
-	{ "Preferences", GTK_STOCK_PREFERENCES, NULL, NULL, N_("Show the preferences dialog"), G_CALLBACK(on_toolbutton_preferences_clicked) },
-	{ "Quit", GTK_STOCK_QUIT, NULL, NULL, N_("Quit Geany"), G_CALLBACK(on_toolbutton_quit_clicked) },
-	{ "Print", GTK_STOCK_PRINT, NULL, NULL, N_("Print document"), G_CALLBACK(on_print1_activate) },
-	{ "Replace", GTK_STOCK_FIND_AND_REPLACE, NULL, NULL, N_("Replace text in the current document"), G_CALLBACK(on_replace1_activate) }
+	{ "ZoomIn", "zoom-in-symbolic", N_("Zoom _In"), NULL, N_("Zoom in the text"), G_CALLBACK(on_zoom_in1_activate) },
+	{ "ZoomOut", "zoom-out-symbolic", N_("Zoom _Out"), NULL, N_("Zoom out the text"), G_CALLBACK(on_zoom_out1_activate) },
+	{ "Search", "edit-find-symbolic", N_("_Serach"), NULL, N_("Find the entered text in the current file"), G_CALLBACK(on_toolbutton_search_clicked) },
+	{ "Preferences", "preferences-system-symbolic", N_("_Preferences"), NULL, N_("Show the preferences dialog"), G_CALLBACK(on_toolbutton_preferences_clicked) },
+	{ "Quit", "application-exit", N_("_Quit"), NULL, N_("Quit Geany"), G_CALLBACK(on_toolbutton_quit_clicked) },
+	{ "Print", "printer-symbolic", N_("_Print"), NULL, N_("Print document"), G_CALLBACK(on_print1_activate) },
+	{ "Replace", "edit-find-replace", N_("_Replace"), NULL, N_("Replace text in the current document"), G_CALLBACK(on_replace1_activate) }
 };
 static const guint ui_entries_n = G_N_ELEMENTS(ui_entries);
 
-
 /* fallback UI definition */
 static const gchar *toolbar_markup =
 "<ui>"
@@ -343,6 +335,7 @@ GtkWidget *toolbar_init(void)
 	GtkAction *action_searchentry;
 	GtkAction *action_gotoentry;
 	GtkSettings *gtk_settings;
+	gboolean rtl;
 
 	uim = gtk_ui_manager_new();
 	group = gtk_action_group_new("GeanyToolbar");
@@ -350,25 +343,27 @@ GtkWidget *toolbar_init(void)
 	gtk_action_group_set_translation_domain(group, GETTEXT_PACKAGE);
 	gtk_action_group_add_actions(group, ui_entries, ui_entries_n, NULL);
 
+	rtl = gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL;
+
 	/* Create our custom actions */
 	action_new = geany_menu_button_action_new(
-		"New", NULL,
+		"New", _("_New"),
 		_("Create a new file"),
 		_("Create a new file from a template"),
-		GTK_STOCK_NEW);
+		"folder-documents-symbolic");
 	g_signal_connect(action_new, "button-clicked", G_CALLBACK(on_toolbutton_new_clicked), NULL);
 	gtk_action_group_add_action(group, action_new);
 
 	action_open = geany_menu_button_action_new(
-		"Open", NULL,
+		"Open", _("_Open"),
 		_("Open an existing file"),
 		_("Open a recent file"),
-		GTK_STOCK_OPEN);
+		"document-open-symbolic");
 	g_signal_connect(action_open, "button-clicked", G_CALLBACK(on_toolbutton_open_clicked), NULL);
 	gtk_action_group_add_action(group, action_open);
 
 	action_build = geany_menu_button_action_new(
-		"Build", NULL,
+		"Build", _("_Build"),
 		_("Build the current file"),
 		_("Choose more build actions"),
 		GEANY_STOCK_BUILD);
@@ -376,6 +371,70 @@ GtkWidget *toolbar_init(void)
 		G_CALLBACK(build_toolbutton_build_clicked), NULL);
 	gtk_action_group_add_action(group, action_build);
 
+	/* Handle in RTL icons */
+	action_new = g_object_new(GTK_TYPE_ACTION,
+		"name", "NavBack",
+		"label", _("_Back"),
+		"tooltip", _("Navigate back a location"),
+		"icon-name", rtl ? "go-previous-rtl-symbolic" : "go-previous-symbolic",
+		NULL);
+	g_signal_connect(action_new, "activate", G_CALLBACK(on_back_activate), NULL);
+	gtk_action_group_add_action(group, action_new);
+
+	action_new = g_object_new(GTK_TYPE_ACTION,
+		"name", "NavFor",
+		"label", _("_Forward"),
+		"tooltip", _("Navigate forward a location"),
+		"icon-name", rtl ? "go-next-rtl-symbolic" : "go-next-symbolic",
+		NULL);
+	g_signal_connect(action_new, "activate", G_CALLBACK(on_forward_activate), NULL);
+	gtk_action_group_add_action(group, action_new);
+
+	action_new = g_object_new(GTK_TYPE_ACTION,
+		"name", "Undo",
+		"label", _("_Undo"),
+		"tooltip", _("Undo the last modification"),
+		"icon-name", rtl ? "edit-undo-rtl-symbolic" : "edit-undo-symbolic",
+		NULL);
+	g_signal_connect(action_new, "activate", G_CALLBACK(on_menu_decrease_indent1_activate), NULL);
+	gtk_action_group_add_action(group, action_new);
+
+	action_new = g_object_new(GTK_TYPE_ACTION,
+		"name", "Redo",
+		"label", _("_Redo"),
+		"tooltip", _("Redo the last modification"),
+		"icon-name", rtl ? "edit-redo-rtl-symbolic" : "edit-redo-symbolic",
+		NULL);
+	g_signal_connect(action_new, "activate", G_CALLBACK(on_menu_increase_indent1_activate), NULL);
+	gtk_action_group_add_action(group, action_new);
+
+	action_new = g_object_new(GTK_TYPE_ACTION,
+		"name", "UnIndent",
+		"label", _("_Decrease Indent"),
+		"tooltip", _("Decrease indentation"),
+		"icon-name", rtl ? "format-indent-less-rtl-symbolic" : "format-indent-less-symbolic",
+		NULL);
+	g_signal_connect(action_new, "activate", G_CALLBACK(on_menu_decrease_indent1_activate), NULL);
+	gtk_action_group_add_action(group, action_new);
+
+	action_new = g_object_new(GTK_TYPE_ACTION,
+		"name", "Indent",
+		"label", _("_Increase Indent"),
+		"tooltip", _("Decrease indentation"),
+		"icon-name", rtl ? "format-indent-more-rtl-symbolic" : "format-indent-more-symbolic",
+		NULL);
+	g_signal_connect(action_new, "activate", G_CALLBACK(on_menu_increase_indent1_activate), NULL);
+	gtk_action_group_add_action(group, action_new);
+
+	action_new = g_object_new(GTK_TYPE_ACTION,
+		"name", "Goto",
+		"label", _("_Jump to"),
+		"tooltip", _("Jump to the entered line number"),
+		"icon-name", rtl ? "go-jump-rtl-symbolic" : "go-jump-symbolic",
+		NULL);
+	g_signal_connect(action_new, "activate", G_CALLBACK(on_toolbutton_goto_clicked), NULL);
+	gtk_action_group_add_action(group, action_new);
+
 	action_searchentry = geany_entry_action_new(
 		"SearchEntry", _("Search Field"), _("Find the entered text in the current file"), FALSE);
 	g_signal_connect(action_searchentry, "entry-activate",
@@ -929,14 +988,17 @@ static TBEditorWidget *tb_editor_create_dialog(GtkWindow *parent)
 	GtkCellRenderer *text_renderer, *icon_renderer;
 	GtkTreeViewColumn *column;
 	TBEditorWidget *tbw = g_new(TBEditorWidget, 1);
+	gboolean rtl;
 
 	if (parent == NULL)
 		parent = GTK_WINDOW(main_widgets.window);
 
+	rtl = gtk_widget_get_direction (GTK_WIDGET (parent)) == GTK_TEXT_DIR_RTL;
+
 	dialog = gtk_dialog_new_with_buttons(_("Customize Toolbar"),
 				parent,
 				GTK_DIALOG_DESTROY_WITH_PARENT,
-				GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
+				_("_Close"), GTK_RESPONSE_CLOSE, NULL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
 	gtk_box_set_spacing(GTK_BOX(vbox), 6);
 	gtk_widget_set_name(dialog, "GeanyDialog");
@@ -960,7 +1022,7 @@ static TBEditorWidget *tb_editor_create_dialog(GtkWindow *parent)
 
 	icon_renderer = gtk_cell_renderer_pixbuf_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		NULL, icon_renderer, "stock-id", TB_EDITOR_COL_ICON, NULL);
+		NULL, icon_renderer, "icon-name", TB_EDITOR_COL_ICON, NULL);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_available), column);
 
 	text_renderer = gtk_cell_renderer_text_new();
@@ -981,7 +1043,7 @@ static TBEditorWidget *tb_editor_create_dialog(GtkWindow *parent)
 
 	icon_renderer = gtk_cell_renderer_pixbuf_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		NULL, icon_renderer, "stock-id", TB_EDITOR_COL_ICON, NULL);
+		NULL, icon_renderer, "icon-name", TB_EDITOR_COL_ICON, NULL);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_used), column);
 
 	text_renderer = gtk_cell_renderer_text_new();
@@ -1019,8 +1081,8 @@ static TBEditorWidget *tb_editor_create_dialog(GtkWindow *parent)
 		G_CALLBACK(tb_editor_drag_motion_cb), tbw);
 
 
-	button_add = ui_button_new_with_image(GTK_STOCK_GO_FORWARD, NULL);
-	button_remove = ui_button_new_with_image(GTK_STOCK_GO_BACK, NULL);
+	button_add = gtk_button_new_from_icon_name(rtl ? "go-next-rtl-symbolic" : "go-next-symbolic", GTK_ICON_SIZE_MENU);
+	button_remove = gtk_button_new_from_icon_name(rtl ? "go-previous-rtl-symbolic" : "go-previous-symbolic", GTK_ICON_SIZE_MENU);
 	g_signal_connect(button_add, "clicked", G_CALLBACK(tb_editor_btn_add_clicked_cb), tbw);
 	g_signal_connect(button_remove, "clicked", G_CALLBACK(tb_editor_btn_remove_clicked_cb), tbw);
 
diff --git a/src/tools.c b/src/tools.c
index aa18f6b..65cddb0 100644
--- a/src/tools.c
+++ b/src/tools.c
@@ -526,8 +526,8 @@ static void cc_show_dialog_custom_commands(void)
 	struct cc_dialog cc;
 
 	dialog = gtk_dialog_new_with_buttons(_("Set Custom Commands"), GTK_WINDOW(main_widgets.window),
-						GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-						GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+						GTK_DIALOG_DESTROY_WITH_PARENT, _("_Cancel"), GTK_RESPONSE_CANCEL,
+						_("_OK"), GTK_RESPONSE_ACCEPT, NULL);
 	gtk_window_set_default_size(GTK_WINDOW(dialog), 300, 300); /* give a reasonable minimal default size */
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
 	gtk_box_set_spacing(GTK_BOX(vbox), 6);
diff --git a/src/ui_utils.c b/src/ui_utils.c
index f495945..32b0fe9 100644
--- a/src/ui_utils.c
+++ b/src/ui_utils.c
@@ -1338,13 +1338,13 @@ GtkWidget *ui_dialog_vbox_new(GtkDialog *dialog)
  * @param text Button label text, can include mnemonics.
  * @return The new @c GtkButton.
  */
-GtkWidget *ui_button_new_with_image(const gchar *stock_id, const gchar *text)
+GtkWidget *ui_button_new_with_image(const gchar *icon_name, const gchar *text)
 {
 	GtkWidget *image, *button;
 
 	button = gtk_button_new_with_mnemonic(text);
 	gtk_widget_show(button);
-	image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_BUTTON);
+	image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_BUTTON);
 	gtk_button_set_image(GTK_BUTTON(button), image);
 	/* note: image is shown by gtk */
 	return button;
@@ -1390,7 +1390,11 @@ static void entry_clear_icon_release_cb(GtkEntry *entry, gint icon_pos,
  */
 void ui_entry_add_clear_icon(GtkEntry *entry)
 {
-	g_object_set(entry, "secondary-icon-stock", GTK_STOCK_CLEAR,
+	gboolean rtl;
+
+	rtl = gtk_widget_get_direction (GTK_WIDGET(entry)) == GTK_TEXT_DIR_RTL;
+
+	g_object_set(entry, "secondary-icon-name", rtl ? "edit-clear-rtl-symbolic" : "edit-clear-symbolic",
 		"secondary-icon-activatable", TRUE, NULL);
 	g_signal_connect(entry, "icon-release", G_CALLBACK(entry_clear_icon_release_cb), NULL);
 }
@@ -1690,7 +1694,7 @@ static gchar *run_file_chooser(const gchar *title, GtkFileChooserAction action,
 {
 	GtkWidget *dialog = gtk_file_chooser_dialog_new(title,
 		GTK_WINDOW(main_widgets.window), action,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		_("_Cancel"), GTK_RESPONSE_CANCEL,
 		GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL);
 	gchar *locale_path;
 	gchar *ret_path = NULL;
