diff --git a/lib/ephy-search-engine-manager.c b/lib/ephy-search-engine-manager.c
index b38a72986..cda89fa7e 100644
--- a/lib/ephy-search-engine-manager.c
+++ b/lib/ephy-search-engine-manager.c
@@ -337,3 +337,14 @@ ephy_search_engine_manager_parse_bang_search (EphySearchEngineManager *manager,
 
   return search_address;
 }
+
+void
+ephy_search_engine_manager_connect_to_changes (EphySearchEngineManager *manager,
+                                               GCallback                handler,
+                                               gpointer                 user_data)
+{
+   g_signal_connect (EPHY_SETTINGS_MAIN,
+                     "changed::search-engines",
+                     handler,
+                     user_data);
+}
diff --git a/lib/ephy-search-engine-manager.h b/lib/ephy-search-engine-manager.h
index c7d233ed0..c791bf4eb 100644
--- a/lib/ephy-search-engine-manager.h
+++ b/lib/ephy-search-engine-manager.h
@@ -63,5 +63,7 @@ char                        *ephy_search_engine_manager_build_search_address
                                                                                   const char              *search);
 char                        *ephy_search_engine_manager_parse_bang_search        (EphySearchEngineManager *manager,
                                                                                   const char              *search);
-
+void                         ephy_search_engine_manager_connect_to_changes       (EphySearchEngineManager *manager,
+                                                                                  GCallback                handler,
+                                                                                  gpointer                 user_data);
 G_END_DECLS
diff --git a/src/ephy-location-controller.c b/src/ephy-location-controller.c
index 00c9e7bcd..5685b29e2 100644
--- a/src/ephy-location-controller.c
+++ b/src/ephy-location-controller.c
@@ -52,6 +52,8 @@ struct _EphyLocationController {
   char *address;
   guint editable : 1;
   gboolean sync_address_is_blocked;
+  EphySearchEngineManager *search_engine_manager;
+  guint search_engine_actions_number;
 };
 
 static void ephy_location_controller_finalize (GObject *object);
@@ -286,6 +288,89 @@ switch_page_cb (GtkNotebook            *notebook,
 }
 
 static void
+action_activated_cb (GtkEntryCompletion     *completion,
+                     int                     index,
+                     EphyLocationController *controller)
+{
+  GtkWidget *entry;
+  char *content;
+  char *url;
+  char **engines_names;
+  char *name;
+
+  entry = gtk_entry_completion_get_entry (completion);
+  content = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
+  if (content == NULL)
+    return;
+
+  engines_names = ephy_search_engine_manager_get_names (controller->search_engine_manager);
+  name = engines_names[index];
+  url = ephy_search_engine_manager_build_search_address (controller->search_engine_manager,
+                                                         name,
+                                                         content);
+  g_strfreev (engines_names);
+  ephy_link_open (EPHY_LINK (controller), url, NULL,
+                  ephy_link_flags_from_current_event () | EPHY_LINK_TYPED);
+  g_free (content);
+  g_free (url);
+}
+
+static void
+add_completion_actions (EphyLocationController *controller,
+                        EphyLocationEntry      *lentry)
+{
+  GtkEntryCompletion *completion = gtk_entry_get_completion (GTK_ENTRY (lentry));
+  char **engines_names;
+
+  engines_names = ephy_search_engine_manager_get_names (controller->search_engine_manager);
+
+  controller->search_engine_actions_number = 0;
+  for (guint i = 0; engines_names[i] != NULL; i++) {
+    const char *name = engines_names[i];
+    gtk_entry_completion_insert_action_text (completion, i, name);
+    controller->search_engine_actions_number = i;
+  }
+
+  if (controller->search_engine_actions_number != 0)
+    controller->search_engine_actions_number++;  // increment in order to transform an index to a nomber of actions
+
+  g_strfreev (engines_names);
+
+  g_signal_connect (completion, "action_activated",
+                    G_CALLBACK (action_activated_cb), controller);
+}
+static void
+search_engines_completion_cb (GSettings settings,
+                              char     *key,
+                              gpointer  data)
+{
+  EphyLocationController *controller;
+  GtkEntryCompletion *completion;
+  GtkEntry *entry;
+  char **engines_names;
+
+  controller = EPHY_LOCATION_CONTROLLER (data);
+//  completion = gtk_entry_get_completion (GTK_ENTRY (controller->title_widget));
+//
+//  for (guint i = 0; i < controller->search_engine_actions_number; i++) {
+//    gtk_entry_completion_delete_action (completion, i);
+//  }
+//  engines_names = ephy_search_engine_manager_get_names (controller->search_engine_manager);
+//
+//  controller->search_engine_actions_number = 0;
+//  for (guint i = 0; engines_names[i] != NULL; i++) {
+//    const char *name = engines_names[i];
+//    gtk_entry_completion_insert_action_text (completion, i, name);
+//    controller->search_engine_actions_number = i;
+//  }
+//
+//  if (controller->search_engine_actions_number != 0)
+//    controller->search_engine_actions_number++;  // increment in order to transform an index to a nomber of actions
+//
+//  g_strfreev (engines_names);
+}
+
+static void
 ephy_location_controller_constructed (GObject *object)
 {
   EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
@@ -328,6 +413,11 @@ ephy_location_controller_constructed (GObject *object)
                                       controller->title_widget,
                                       NULL);
 
+  add_completion_actions (controller, EPHY_LOCATION_ENTRY (controller->title_widget));
+
+  ephy_search_engine_manager_connect_to_changes (controller->search_engine_manager,
+                                                 G_CALLBACK (search_engines_completion_cb),
+                                                 controller);
   g_object_bind_property (controller, "editable",
                           controller->title_widget, "editable",
                           G_BINDING_SYNC_CREATE);
@@ -487,9 +577,13 @@ ephy_location_controller_class_init (EphyLocationControllerClass *class)
 static void
 ephy_location_controller_init (EphyLocationController *controller)
 {
+  EphyEmbedShell *shell;
+
   controller->address = g_strdup ("");
   controller->editable = TRUE;
   controller->sync_address_is_blocked = FALSE;
+  shell = ephy_embed_shell_get_default ();
+  controller->search_engine_manager = ephy_embed_shell_get_search_engine_manager (shell);
 }
 
 static void
