diff --git a/data/Makefile.am b/data/Makefile.am
index d6aa63e4e..403f2f79c 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -10,7 +10,7 @@ $(desktop_DATA): $(desktop_in_files)
 gsettings_ENUM_NAMESPACE = org.gnome.Epiphany
 gsettings_ENUM_FILES = $(top_srcdir)/lib/ephy-prefs.h
 
-gsettings_SCHEMAS = org.gnome.epiphany.gschema.xml org.gnome.epiphany.host.gschema.xml
+gsettings_SCHEMAS = org.gnome.epiphany.gschema.xml org.gnome.epiphany.host.gschema.xml org.gnome.epiphany.search.engines.gschema.xml
 @GSETTINGS_RULES@
 
 appstream_in_files = org.gnome.Epiphany.appdata.xml.in
@@ -24,7 +24,7 @@ $(appstream_XML): $(appstream_in_files)
 servicedir = $(datadir)/dbus-1/services
 service_in_files = org.gnome.EpiphanySearchProvider.service.in
 service_DATA = $(service_in_files:.service.in=.service)
- 
+
 # Rule to make the service file with bindir expanded
 $(service_DATA): $(service_in_files) Makefile
 	$(AM_V_GEN) sed -e "s|\@libexecdir[@]|$(libexecdir)|g" $< > $@
diff --git a/data/org.gnome.epiphany.search.engines.gschema.xml b/data/org.gnome.epiphany.search.engines.gschema.xml
new file mode 100644
index 000000000..ebb4c6e5d
--- /dev/null
+++ b/data/org.gnome.epiphany.search.engines.gschema.xml
@@ -0,0 +1,20 @@
+<schemalist>
+    <schema id="org.gnome.Epiphany.search.engines" gettext-domain="">
+        <key type="s" name="default-search-engine">
+            <!-- DuckDuckGo is the default search engine. Must exactly match the URL used
+                 in the preferences dialog, except this string is surrounded by single quotes
+                 and uses &amp; instead of simply &. If the match is not otherwise exact,
+                 there will be a spurious, ugly entry in the preferences combo, so please
+                 test this. Should ideally also match the default smart bookmark link in
+                 default-bookmarks.rdf. See the comment there for region parameters to
+                 the URL. -->
+            <default>'DuckDuckGo'</default>
+        </key>
+	<key type="as" name="search-engines-names">
+	    <default>['DuckDuckGo', 'Google', 'Bing' ]</default>
+	</key>
+	<key type="as" name="search-engines-urls">
+	    <default>['https://duckduckgo.com/?q=%s&amp;t=epiphany', 'https://google.com/search?q=%s', 'https://www.bing.com/search?q=%s' ]</default>
+	</key>
+      </schema>
+</schemalist>
diff --git a/embed/ephy-embed-utils.c b/embed/ephy-embed-utils.c
index 90dcd9572..e7ab276b9 100644
--- a/embed/ephy-embed-utils.c
+++ b/embed/ephy-embed-utils.c
@@ -28,6 +28,7 @@
 #include "ephy-settings.h"
 #include "ephy-string.h"
 #include "ephy-view-source-handler.h"
+#include "../src/ephy-search-engines-manager.h"
 
 #include <string.h>
 #include <glib/gi18n.h>
@@ -230,11 +231,14 @@ ephy_embed_utils_normalize_address (const char *address)
 char *
 ephy_embed_utils_autosearch_address (const char *search_key)
 {
-  char *query_param, *url_search;
+  char *query_param, *url_search, *default_name;
   char *effective_address;
 
-  url_search = g_settings_get_string (EPHY_SETTINGS_MAIN,
-                                      EPHY_PREFS_KEYWORD_SEARCH_URL);
+  EphySearchEnginesManager *manager;
+  manager = ephy_search_engines_manager_new ();
+  default_name = ephy_search_engines_manager_get_default (manager);
+  url_search = ephy_search_engines_manager_get_url (manager, default_name);
+
   if (url_search == NULL || url_search[0] == '\0') {
     g_free (url_search);
     url_search = g_strdup (_("https://duckduckgo.com/?q=%s&amp;t=epiphany"));
@@ -249,6 +253,7 @@ ephy_embed_utils_autosearch_address (const char *search_key)
 #pragma GCC diagnostic pop
   g_free (query_param);
   g_free (url_search);
+  g_free (default_name);
 
   return effective_address;
 }
diff --git a/src/Makefile.am b/src/Makefile.am
index ea316e7a4..b16409942 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -58,6 +58,8 @@ libephymain_la_SOURCES = \
 	ephy-lockdown.h				\
 	ephy-notebook.c				\
 	ephy-notebook.h				\
+	ephy-search-engines-manager.c		\
+	ephy-search-engines-manager.h		\
 	ephy-session.c				\
 	ephy-session.h				\
 	ephy-shell.c				\
diff --git a/src/ephy-search-engines-manager.c b/src/ephy-search-engines-manager.c
new file mode 100644
index 000000000..ef2f2638b
--- /dev/null
+++ b/src/ephy-search-engines-manager.c
@@ -0,0 +1,175 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ *  Copyright © 2017 Cedric Le Moigne <cedlemo@gmx.com>
+ *
+ *  This file is part of Epiphany.
+ *
+ *  Epiphany is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  Epiphany is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with Epiphany.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include "ephy-search-engines-manager.h"
+
+#include "ephy-file-helpers.h"
+#include "ephy-string.h"
+
+#define G_SETTINGS_ENABLE_BACKEND 1
+#include <gio/gsettingsbackend.h>
+
+struct _EphySearchEnginesManager
+{
+  GObject parent_instance;
+  GSettingsBackend *backend;
+  GSettings *settings;
+  GHashTable *search_engines;
+};
+
+G_DEFINE_TYPE (EphySearchEnginesManager, ephy_search_engines_manager, G_TYPE_OBJECT)
+
+static void
+ephy_search_engines_manager_init (EphySearchEnginesManager *manager)
+{
+  gchar *key_file = NULL;
+  gchar **search_engines_urls;
+  gchar **search_engines_names;
+  guint i;
+  guint n_engines;
+
+  manager->search_engines = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+  key_file = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "search_engines.ini",
+                              ephy_dot_dir ());
+
+  manager->backend = g_keyfile_settings_backend_new (key_file, "/", "SearchEngines");
+  g_free (key_file);
+
+  manager->settings = g_settings_new_with_backend_and_path("org.gnome.Epiphany.search.engines", manager->backend, "/org/gnome/epiphany/searchengines/");
+
+  search_engines_names = g_settings_get_strv(manager->settings,
+                                             "search-engines-names");
+  search_engines_urls = g_settings_get_strv(manager->settings,
+                                             "search-engines-urls");
+  n_engines = g_strv_length(search_engines_names);
+
+  for (i = 0; i < n_engines; ++i) {
+    const char *name = search_engines_names[i];
+    const char *url = search_engines_urls[i];
+    g_hash_table_insert(manager->search_engines, g_strdup(name), g_strdup(url));
+  }
+
+  g_strfreev(search_engines_names);
+  g_strfreev(search_engines_urls);
+}
+
+static void
+ephy_search_engines_manager_dispose (GObject *object)
+{
+  EphySearchEnginesManager *manager = EPHY_SEARCH_ENGINES_MANAGER (object);
+
+  g_clear_pointer (&manager->search_engines, g_hash_table_destroy);
+  g_object_unref (&manager->backend);
+  g_object_unref (&manager->settings);
+  G_OBJECT_CLASS (ephy_search_engines_manager_parent_class)->dispose (object);
+}
+
+static void
+ephy_search_engines_manager_class_init (EphySearchEnginesManagerClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->dispose = ephy_search_engines_manager_dispose;
+}
+
+EphySearchEnginesManager *
+ephy_search_engines_manager_new (void)
+{
+  return EPHY_SEARCH_ENGINES_MANAGER (g_object_new (EPHY_TYPE_SEARCH_ENGINES_MANAGER, NULL));
+}
+
+gchar *
+ephy_search_engines_manager_get_url(EphySearchEnginesManager *manager, gchar *name)
+{
+  return g_strdup (g_hash_table_lookup (manager->search_engines, name));
+}
+
+gchar *
+ephy_search_engines_manager_get_default(EphySearchEnginesManager *manager)
+{
+  return g_settings_get_string(manager->settings, "default-search-engine");
+}
+
+gchar **
+ephy_search_engines_manager_get_names(EphySearchEnginesManager *manager)
+{
+  return g_settings_get_strv (manager->settings, "search-engines-names");
+}
+
+GSettings *
+ephy_search_engines_manager_get_settings(EphySearchEnginesManager *manager)
+{
+  return g_settings_new_with_backend_and_path("org.gnome.Epiphany.search.engines",
+                                              manager->backend,
+                                              "/org/gnome/epiphany/searchengines/");
+}
+
+static void
+ephy_search_engines_manager_apply_settings(EphySearchEnginesManager *manager)
+{
+  GHashTableIter iter;
+  gpointer key, value;
+  guint size;
+  guint i;
+  size = g_hash_table_size(manager->search_engines);
+  gchar **search_engines_names;
+  gchar **search_engines_urls;
+
+  search_engines_names = g_malloc(sizeof(gchar) *(size + 1));
+  search_engines_urls = g_malloc(sizeof(gchar) *(size + 1));
+
+  g_hash_table_iter_init (&iter, manager->search_engines);
+  while (g_hash_table_iter_next (&iter, &key, &value))
+  {
+    search_engines_names[i] = key;
+    search_engines_urls[i] = value;
+    i++;
+  }
+  search_engines_names[size] = NULL;
+  search_engines_urls[size] = NULL;
+
+  g_settings_set_strv (manager->settings, "search-engines-names", (const gchar * const*) search_engines_names);
+  g_settings_set_strv (manager->settings, "search-engines-urls", (const gchar * const*) search_engines_urls);
+
+  g_strfreev(search_engines_names);
+  g_strfreev(search_engines_urls);
+}
+
+void
+ephy_search_engines_manager_add_engine(EphySearchEnginesManager *manager, gchar *name, gchar *url)
+{
+  g_hash_table_insert(manager->search_engines, g_strdup(name), g_strdup(url));
+  ephy_search_engines_manager_apply_settings(manager);
+}
+
+void
+ephy_search_engines_manager_delete_engine(EphySearchEnginesManager *manager, gchar *name)
+{
+  g_hash_table_remove(manager->search_engines, name);
+  ephy_search_engines_manager_apply_settings(manager);
+}
+
+void
+ephy_search_engines_manager_modify_engine(EphySearchEnginesManager *manager, gchar *name, gchar *url)
+{
+  g_hash_table_replace(manager->search_engines, g_strdup(name), g_strdup(url));
+  ephy_search_engines_manager_apply_settings(manager);
+}
diff --git a/src/ephy-search-engines-manager.h b/src/ephy-search-engines-manager.h
new file mode 100644
index 000000000..de9a4dac0
--- /dev/null
+++ b/src/ephy-search-engines-manager.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ *  Copyright © 2017 Cedric Le Moigne <cedlemo@gmx.com>
+ *
+ *  This file is part of Epiphany.
+ *
+ *  Epiphany is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  Epiphany is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with Epiphany.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef EPHY_SEARCH_ENGINES_MANAGER_H
+#define EPHY_SEARCH_ENGINES_MANAGER_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_SEARCH_ENGINES_MANAGER (ephy_search_engines_manager_get_type ())
+
+G_DECLARE_FINAL_TYPE (EphySearchEnginesManager, ephy_search_engines_manager, EPHY, SEARCH_ENGINES_MANAGER, GObject)
+
+EphySearchEnginesManager*       ephy_search_engines_manager_new (void);
+gchar *ephy_search_engines_manager_get_url(EphySearchEnginesManager *, gchar *);
+gchar *ephy_search_engines_manager_get_default(EphySearchEnginesManager *);
+gchar **ephy_search_engines_manager_get_names(EphySearchEnginesManager *);
+GSettings *ephy_search_engines_manager_get_settings(EphySearchEnginesManager *);
+void ephy_search_engines_manager_add_engine(EphySearchEnginesManager *, gchar *, gchar *);
+void ephy_search_engines_manager_delete_engine(EphySearchEnginesManager *, gchar *);
+void ephy_search_engines_manager_modify_engine(EphySearchEnginesManager *, gchar *, gchar*);
+
+G_END_DECLS
+
+#endif /* EPHY_SEARCH_ENGINES_MANAGER_H */
diff --git a/src/prefs-dialog.c b/src/prefs-dialog.c
index b49dff1b3..6153544f9 100644
--- a/src/prefs-dialog.c
+++ b/src/prefs-dialog.c
@@ -33,6 +33,7 @@
 #include "ephy-gui.h"
 #include "ephy-langs.h"
 #include "ephy-prefs.h"
+#include "ephy-search-engines-manager.h"
 #include "ephy-session.h"
 #include "ephy-settings.h"
 #include "ephy-shell.h"
@@ -53,6 +54,7 @@
 #define DOWNLOAD_BUTTON_WIDTH   8
 #define FXA_IFRAME_URL "https://accounts.firefox.com/signin?service=sync&context=fx_ios_v1"
 
+#include <stdio.h>
 enum {
   COL_LANG_NAME,
   COL_LANG_CODE
@@ -142,7 +144,6 @@ typedef struct {
 
 enum {
   SEARCH_ENGINE_COL_NAME,
-  SEARCH_ENGINE_COL_STOCK_URL,
   SEARCH_ENGINE_COL_URL,
   SEARCH_ENGINE_NUM_COLS
 };
@@ -532,6 +533,20 @@ on_sync_sign_out_button_clicked (GtkWidget   *button,
 #endif
 
 static void
+on_search_engine_dialog_button_clicked (GtkWidget   *button,
+                                        PrefsDialog *dialog)
+{
+/*  GtkWidget *search_engine_dialog;
+
+  search_engine_dialog = ephy_search_engine_dialog_new ();
+
+  gtk_window_set_transient_for (GTK_WINDOW (search_engine_dialog), GTK_WINDOW (dialog));
+  gtk_window_set_modal (GTK_WINDOW (search_engine_dialog), TRUE);
+  gtk_window_present (GTK_WINDOW (search_engine_dialog));
+*/
+}
+
+static void
 on_manage_cookies_button_clicked (GtkWidget   *button,
                                   PrefsDialog *dialog)
 {
@@ -580,7 +595,7 @@ prefs_dialog_class_init (PrefsDialogClass *klass)
   gtk_widget_class_bind_template_child (widget_class, PrefsDialog, enable_plugins_checkbutton);
   gtk_widget_class_bind_template_child (widget_class, PrefsDialog, download_button_hbox);
   gtk_widget_class_bind_template_child (widget_class, PrefsDialog, download_button_label);
-
+  gtk_widget_class_bind_template_callback (widget_class, on_search_engine_dialog_button_clicked);
   /* fonts */
   gtk_widget_class_bind_template_child (widget_class, PrefsDialog, use_gnome_fonts_checkbutton);
   gtk_widget_class_bind_template_child (widget_class, PrefsDialog, custom_fonts_table);
@@ -655,7 +670,7 @@ combo_get_mapping (GValue   *value,
 
   while (valid) {
     char *item_name;
-    gtk_tree_model_get (model, &iter, 1, &item_name, -1);
+    gtk_tree_model_get (model, &iter, 0, &item_name, -1);
 
     if (g_strcmp0 (item_name, settings_name) == 0) {
       g_value_set_int (value, i);
@@ -688,7 +703,7 @@ combo_set_mapping (const GValue       *value,
 
   if (valid) {
     char *item_name;
-    gtk_tree_model_get (model, &iter, 1, &item_name, -1);
+    gtk_tree_model_get (model, &iter, 0, &item_name, -1);
 
     variant = g_variant_new_string (item_name);
 
@@ -1318,82 +1333,22 @@ cookies_set_mapping (const GValue       *value,
 }
 
 static void
-search_engine_combo_add_default_engines (GtkListStore *store)
+search_engine_combo_add_search_engines(GtkListStore *store, EphySearchEnginesManager *manager)
 {
   guint i;
-  const char *default_engines[][3] = {       /* Search engine option in the preferences dialog */
-    { N_("DuckDuckGo"),
-      "https://duckduckgo.com/?q=%s&t=epiphany",
-      /* For the preferences dialog. Must exactly match the URL
-      * you chose in the gschema, but with & instead of &amp;
-      * If the match is not exact, there will be a spurious, ugly
-      * entry in the preferences combo, so please test this. */
-      N_("https://duckduckgo.com/?q=%s&t=epiphany") },
-    /* Search engine option in the preferences dialog */
-    { N_("Google"),
-      "https://google.com/search?q=%s",
-      /* For the preferences dialog. Consider a regional variant, like google.co.uk */
-      N_("https://google.com/search?q=%s") },
-    /* Search engine option in the preferences dialog */
-    { N_("Bing"),
-      "https://www.bing.com/search?q=%s",
-      /* For the preferences dialog. Consider a regional variant, like uk.bing.com */
-      N_("https://www.bing.com/search?q=%s") }
-  };
-
-  for (i = 0; i < G_N_ELEMENTS (default_engines); ++i) {
+  guint n_engines;
+  gchar **engines_names ;
+  engines_names = ephy_search_engines_manager_get_names(manager);
+  n_engines = g_strv_length(engines_names);
+  for (i = 0; i < n_engines; i++) {
+    const char *name = engines_names[i];
+    const char *url = ephy_search_engines_manager_get_url(manager, name);
     gtk_list_store_insert_with_values (store, NULL, -1,
-                                       SEARCH_ENGINE_COL_NAME,
-                                       _(default_engines[i][0]),
-                                       SEARCH_ENGINE_COL_STOCK_URL,
-                                       default_engines[i][1],
-                                       SEARCH_ENGINE_COL_URL,
-                                       _(default_engines[i][2]),
+                                       SEARCH_ENGINE_COL_NAME, name,
+                                       SEARCH_ENGINE_COL_URL, url,
                                        -1);
   }
-}
-
-/* Has the user manually set the engine to something not in the combo?
- * If so, add that URL as an extra item in the combo. */
-static void
-search_engine_combo_add_current_engine (GtkListStore *store)
-{
-  GtkTreeIter iter;
-  char *original_url;
-  gboolean in_combo = FALSE;
-  gboolean has_next = FALSE;
-
-  original_url = g_settings_get_string (EPHY_SETTINGS_MAIN,
-                                        EPHY_PREFS_KEYWORD_SEARCH_URL);
-  if (!original_url)
-    return;
-
-  has_next = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
-
-  while (!in_combo && has_next) {
-    char *stock_url, *url;
-
-    gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
-                        SEARCH_ENGINE_COL_STOCK_URL, &stock_url,
-                        SEARCH_ENGINE_COL_URL, &url, -1);
-
-    if (strcmp (original_url, stock_url) == 0 ||
-        strcmp (original_url, url) == 0)
-      in_combo = TRUE;
-
-    g_free (stock_url);
-    g_free (url);
-    has_next = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
-  }
-
-  if (!in_combo)
-    gtk_list_store_insert_with_values (store, NULL, -1,
-                                       SEARCH_ENGINE_COL_NAME, original_url,
-                                       SEARCH_ENGINE_COL_STOCK_URL, original_url,
-                                       SEARCH_ENGINE_COL_URL, original_url,
-                                       -1);
-
-  g_free (original_url);
+  g_strfreev(engines_names);
 }
 
 static void
@@ -1401,24 +1356,36 @@ create_search_engine_combo (GtkComboBox *combo)
 {
   GtkCellRenderer *renderer;
   GtkListStore *store;
+  char *default_search_engine;
+  GSettings *search_engines_settings;
+
+  EphySearchEnginesManager *search_engines_manager;
+  search_engines_manager = ephy_search_engines_manager_new ();
 
   store = GTK_LIST_STORE (gtk_combo_box_get_model (combo));
+  search_engine_combo_add_search_engines (store, search_engines_manager);
 
-  search_engine_combo_add_default_engines (store);
-  search_engine_combo_add_current_engine (store);
 
-  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), SEARCH_ENGINE_COL_NAME,
+  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+                                        SEARCH_ENGINE_COL_NAME,
                                         GTK_SORT_ASCENDING);
   gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
 
+  default_search_engine = ephy_search_engines_manager_get_default (search_engines_manager);
+
+  gtk_combo_box_set_id_column (combo, SEARCH_ENGINE_COL_NAME);
+  gtk_combo_box_set_active_id (combo, default_search_engine);
+
   renderer = gtk_cell_renderer_text_new ();
   gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
   gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
                                   "text", SEARCH_ENGINE_COL_NAME,
                                   NULL);
 
-  g_settings_bind_with_mapping (EPHY_SETTINGS_MAIN,
-                                EPHY_PREFS_KEYWORD_SEARCH_URL,
+  search_engines_settings = ephy_search_engines_manager_get_settings(search_engines_manager);
+
+  g_settings_bind_with_mapping (search_engines_settings,
+                                "default-search-engine",
                                 combo, "active",
                                 G_SETTINGS_BIND_DEFAULT,
                                 combo_get_mapping,
diff --git a/src/resources/prefs-dialog.ui b/src/resources/prefs-dialog.ui
index ad4f4281c..f3f7b1018 100644
--- a/src/resources/prefs-dialog.ui
+++ b/src/resources/prefs-dialog.ui
@@ -5,10 +5,14 @@
     <columns>
       <!-- column-name name -->
       <column type="gchararray"/>
+
       <!-- column-name stock url -->
       <column type="gchararray"/>
+
       <!-- column-name url -->
-      <column type="gchararray"/>
+      -<column type="gchararray"/>
+
+
     </columns>
   </object>
   <template class="PrefsDialog" parent="GtkDialog">
@@ -169,13 +173,32 @@
                     <property name="orientation">vertical</property>
                     <property name="spacing">6</property>
                     <child>
-                      <object class="GtkLabel">
+                      <object class="GtkBox">
                         <property name="visible">True</property>
-                        <property name="halign">start</property>
-                        <property name="label" translatable="yes">Search</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="visible">True</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes">Search Engines</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
+                        </child>
+			<!--
+			<child>
+                          <object class="GtkButton" id="search_engine_dialog_button">
+                            <property name="label" translatable="yes">_Manage Engines</property>
+                            <property name="visible">True</property>
+                            <property name="use-underline">True</property>
+                            <signal name="clicked" handler="on_search_engine_dialog_button_clicked"/>
+                          </object>
+                          <packing>
+                            <property name="pack-type">end</property>
+                          </packing>
+                        </child>
+			  -->
                       </object>
                     </child>
                     <child>
@@ -191,7 +214,7 @@
                             <child>
                               <object class="GtkLabel">
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">_Engine:</property>
+                                <property name="label" translatable="yes">_Default :</property>
                                 <property name="use-underline">True</property>
                                 <property name="mnemonic-widget">search_engine_combo</property>
                               </object>
@@ -206,6 +229,17 @@
                                 <property name="position">1</property>
                               </packing>
                             </child>
+			<child>
+                          <object class="GtkButton" id="search_engine_dialog_button">
+                            <property name="label" translatable="yes">_Manage Search Engines</property>
+                            <property name="visible">True</property>
+                            <property name="use-underline">True</property>
+                            <signal name="clicked" handler="on_search_engine_dialog_button_clicked"/>
+                          </object>
+                          <packing>
+                                <property name="expand">False</property>
+                          </packing>
+                        </child>
                           </object>
                         </child>
                       </object>
diff --git a/src/search-provider/ephy-search-provider.c b/src/search-provider/ephy-search-provider.c
index 0926a381e..3fb4a0d0d 100644
--- a/src/search-provider/ephy-search-provider.c
+++ b/src/search-provider/ephy-search-provider.c
@@ -28,6 +28,7 @@
 #include "ephy-prefs.h"
 #include "ephy-profile-utils.h"
 #include "ephy-shell.h"
+#include "ephy-search-engines-manager.h"
 
 #include <string.h>
 #include <glib/gi18n.h>
@@ -272,15 +273,18 @@ launch_uri (const char *uri,
   g_spawn_command_line_async (str, NULL);
   g_free (str);
 }
-
+#include <stdio.h>
 static void
 launch_search (EphySearchProvider *self,
                char              **terms,
                guint               timestamp)
 {
-  char *search_string, *url_search, *query_param, *effective_url;
+  char *search_string, *url_search, *query_param, *effective_url, *default_name;
+  EphySearchEnginesManager *manager;
 
-  url_search = g_settings_get_string (self->settings, EPHY_PREFS_KEYWORD_SEARCH_URL);
+  manager = ephy_search_engines_manager_new ();
+  default_name = ephy_search_engines_manager_get_default (manager);
+  url_search = ephy_search_engines_manager_get_url (manager, default_name);
 
   if (url_search == NULL || url_search[0] == '\0') {
     g_free (url_search);
@@ -304,6 +308,7 @@ launch_search (EphySearchProvider *self,
   g_free (url_search);
   g_free (effective_url);
   g_free (search_string);
+  g_free (default_name);
 }
 
 static gboolean
