diff --git a/src/plugins/evolution/e-contact-entry.c b/src/plugins/evolution/e-contact-entry.c
index e190290..9698b3b 100644
--- a/src/plugins/evolution/e-contact-entry.c
+++ b/src/plugins/evolution/e-contact-entry.c
@@ -227,7 +227,7 @@ e_contact_entry_display_func (EContact *contact)
   emails = e_contact_get (contact, E_CONTACT_EMAIL);
   for (l = emails; l != NULL; l = l->next) {
     item = g_new0 (EContactEntyItem, 1);
-    item->identifier = item->identifier = g_strdup (l->data);
+    item->identifier = g_strdup (l->data);
     item->display_string = g_strdup_printf ("%s <%s>", (char*)e_contact_get_const (contact, E_CONTACT_NAME_OR_ORG), item->identifier);
 
     items = g_list_prepend (items, item);
@@ -339,16 +339,15 @@ view_contacts_added_cb (EBook *book, GList *contacts, gpointer user_data)
  * The query on the EBookView has completed.
  */
 static void
-view_completed_cb (EBookView *book_view, EBookViewStatus status, gpointer user_data)
+view_completed_cb (EBookView *book_view, EBookViewStatus status, const gchar *message, gpointer user_data)
 {
   EntryLookup *lookup;
   g_return_if_fail (user_data != NULL);
-  /* TODO: handle status != OK */
-  g_return_if_fail (status == E_BOOK_ERROR_OK);
   g_return_if_fail (book_view != NULL);
 
   lookup = (EntryLookup*)user_data;
   g_object_unref (lookup->bookview);
+  lookup->bookview = NULL;
 }
 
 /**
@@ -374,7 +373,7 @@ bookview_cb (EBook *book, EBookStatus status, EBookView *book_view, gpointer clo
   g_object_add_weak_pointer ((GObject*)book_view, (gpointer*)&lookup->bookview);
   
   g_signal_connect (book_view, "contacts_added", (GCallback)view_contacts_added_cb, lookup);
-  g_signal_connect (book_view, "sequence_complete", (GCallback)view_completed_cb, lookup);
+  g_signal_connect (book_view, "view_complete", (GCallback)view_completed_cb, lookup);
   
   e_book_view_start (book_view);
 }
@@ -396,6 +395,7 @@ entry_changed_cb (GtkEditable *editable, gpointer user_data)
       if (lookup->bookview) {
         e_book_view_stop (lookup->bookview);
         g_object_unref (lookup->bookview);
+        lookup->bookview = NULL;
       }
     }
     
@@ -410,7 +410,7 @@ entry_changed_cb (GtkEditable *editable, gpointer user_data)
       if (!lookup->open)
         continue;
       
-      if (e_book_async_get_book_view (lookup->book, query, NULL, 11, (EBookBookViewCallback)bookview_cb, lookup) != 0) {
+      if (!e_book_async_get_book_view (lookup->book, query, NULL, 11, (EBookBookViewCallback)bookview_cb, lookup)) {
         g_signal_emit (entry, signals[ERROR], 0, _("Cannot create searchable view."));
       }
     }
@@ -502,7 +502,10 @@ e_contact_entry_set_source_list (EContactEntry *entry,
       EntryLookup *lookup;
       char *uri;
 
-      uri = g_strdup_printf("%s/%s", e_source_group_peek_base_uri (group), e_source_peek_relative_uri (source));
+      if (g_strcmp0 (e_source_group_peek_base_uri (group), "local:") == 0)
+        uri = g_strdup_printf ("%s%s", e_source_group_peek_base_uri (group), e_source_peek_relative_uri (source));
+      else
+        uri = g_strdup_printf ("%s/%s", e_source_group_peek_base_uri (group), e_source_peek_relative_uri (source));
       e_source_set_absolute_uri (s, uri);
       g_free (uri);
 
@@ -514,8 +517,11 @@ e_contact_entry_set_source_list (EContactEntry *entry,
 
       if ((lookup->book = e_book_new (s, &error)) == NULL) {
         /* TODO handle this better, fire the error signal I guess */
-        g_warning ("%s", error->message);
-	g_error_free (error);
+	if (error) {
+           g_warning ("%s", error->message);
+           g_error_free (error);
+           error = NULL;
+        }
 	g_free (lookup);
       } else {
         entry->priv->lookup_entries = g_list_append (entry->priv->lookup_entries, lookup);
@@ -773,6 +779,7 @@ lookup_entry_free (EntryLookup *lookup)
   if (lookup->bookview) {
     g_warning("EBookView still around");
     g_object_unref (lookup->bookview);
+    lookup->bookview = NULL;
   }
   if (lookup->book) {
     g_object_unref (lookup->book);
