diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index cda4aac848a1fcd5d17b2fe155885d289f784e7c..e887549c28593580de32ef659561afc6f0089d63 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -8,7 +8,6 @@ class SessionsController < Devise::SessionsController
   protected
   def enqueue_update
     if current_user
-      pp params
       current_user.services.each{|s|
         Resque.enqueue(Job::UpdateServiceUsers, s.id) if s.respond_to? :save_friends
       }
diff --git a/app/models/services/facebook.rb b/app/models/services/facebook.rb
index fb9d0d75790b506791035be84a14471695360a3c..f8a5a1f445e2d45d238ab001d031239ff58bf46e 100644
--- a/app/models/services/facebook.rb
+++ b/app/models/services/facebook.rb
@@ -21,7 +21,11 @@ class Services::Facebook < Service
 
   def finder(opts = {})
     Rails.logger.debug("event=friend_finder type=facebook sender_id=#{self.user_id}")
-    Resque.enqueue(Job::UpdateServiceUsers, self.id)
+    if self.service_users == []
+      self.save_friends
+    else
+      Resque.enqueue(Job::UpdateServiceUsers, self.id)
+    end
     person = Person.arel_table
     service_user = ServiceUser.arel_table
     if opts[:local]
@@ -38,7 +42,7 @@ class Services::Facebook < Service
                           {:fields => ['name', 'id', 'picture'], :access_token => self.access_token}})
     data = JSON.parse(response.body)['data']
     data.each{ |p|
-      ServiceUser.find_or_create_by_service_id_and_name_and_uid_and_photo_url(:service_id => self.id, :name => p["name"],
+      ServiceUser.find_or_create_by_service_id_and_uid(:service_id => self.id, :name => p["name"],
                          :uid => p["id"], :photo_url => p["picture"])
     }
   end
diff --git a/app/views/services/_finder.html.haml b/app/views/services/_finder.html.haml
index 9b4b1a1cdad1db4f093cb086a3368ff9bde9a95c..caf89a21e038ae5148ab974e121a2fe89802fcd7 100644
--- a/app/views/services/_finder.html.haml
+++ b/app/views/services/_finder.html.haml
@@ -4,5 +4,5 @@
 
 = search_field_tag :contact_search, "", :class => 'contact_list_search', :results => 5, :placeholder => t('shared.contact_list.all_contacts')
 %ul.friend_finder
-  - for uid in friends.keys
-    = render :partial => 'services/remote_friend', :locals => {:friend => friends[uid], :uid => uid}
+  - for friend in friends
+    = render :partial => 'services/remote_friend', :locals => {:friend => friend, :uid => friend.uid}
diff --git a/app/views/services/_remote_friend.html.haml b/app/views/services/_remote_friend.html.haml
index 019c0f3d7fc3442aec91fe03a74c1081f26ac4ce..d15e2a28e28679aa61bc7f9317859562eea6d5d1 100644
--- a/app/views/services/_remote_friend.html.haml
+++ b/app/views/services/_remote_friend.html.haml
@@ -1,18 +1,18 @@
 %li.remote_friend{:id => "uid_" + uid, :uid => uid}
   .right
-    -if friend[:contact] && !friend[:contact].pending
+    -if friend.contact && !friend.contact.pending
       = t('people.person.already_connected')
-    - elsif (friend[:contact] && friend[:contact].pending) || (friend[:request] && friend[:request].sender_id != friend[:person].id)
+    - elsif (friend.contact && friend.contact.pending) || (friend.request && friend.request.sender_id != friend.person.id)
       = t('people.person.pending_request')
-    - elsif (friend[:request] && friend[:request].sender_id == friend[:person].id)
-      = link_to t('people.show.incoming_request', :name => truncate(friend[:person].name, :length => 20, :separator => ' ', :omission => '')),
+    - elsif (friend.request && friend.request.sender_id == friend.person.id)
+      = link_to t('people.show.incoming_request', :name => truncate(friend.person.name, :length => 20, :separator => ' ', :omission => '')),
         '#',
         :class => 'button'
-    - elsif friend[:invitation_id]
+    - elsif friend.invitation_id
       = t('invitations.new.already_invited')
       %br
-      = link_to t('.resend'), service_inviter_path(:uid => uid, :provider => 'facebook', :invitation_id => friend[:invitation_id])
-    - elsif friend[:person]
+      = link_to t('.resend'), service_inviter_path(:uid => uid, :provider => 'facebook', :invitation_id => friend.invitation_id)
+    - elsif friend.person
       = link_to t('people.show.start_sharing'),
         '#',
         :class => 'button'
@@ -23,23 +23,23 @@
         = hidden_field_tag :uid, uid
         = submit_tag t('.invite')
 
-  - if friend[:person]
-    = person_image_link(friend[:person])
+  - if friend.person
+    = person_image_link(friend.person)
   - else
     = image_tag('/images/user/default.png', :class => 'avatar')
 
   %h4.name
-    - if friend[:person]
-      = link_to friend[:name], person_path(friend[:person])
+    - if friend.person
+      = link_to friend.name, person_path(friend.person)
     - else
-      = friend[:name]
+      = friend.name
 
-- unless friend[:person].nil? || (friend[:contact] && friend[:contact].pending) || (friend[:request] && friend[:request].sender_id != friend[:person].id)
+- unless friend.person.nil? || (friend.contact && friend.contact.pending) || (friend.request && friend.request.sender_id != friend.person.id)
   %li{:id => "options_" + uid, :class => "share_with hidden", :style => "height:auto"}
-    - contact = friend[:contact]
+    - contact = friend.contact
     - contact ||= Contact.new
     = render :partial => 'contacts/share_with_list',
-          :locals => {:person => friend[:person],
+          :locals => {:person => friend.person,
             :contact => contact,
               :aspects_with_person => [],
               :aspects_without_person => current_user.aspects,
diff --git a/app/views/services/finder.html.haml b/app/views/services/finder.html.haml
index c441ff27333f6819c3d99cc5f677f88d16438f73..4b9fc19e4a49eaefbe4233de2044040fa2ec8f3d 100644
--- a/app/views/services/finder.html.haml
+++ b/app/views/services/finder.html.haml
@@ -12,14 +12,14 @@
     %h4
       = t('.invite_your_friends_from', :service => params[:provider].titleize)
       .description
-        - if @friends.keys.length > 0
-          = t('.friends', :count => @friends.keys.length)
+        - if @friends.size > 0
+          = t('.friends', :count => @friends.size)
         - else
           %i= t('.not_connected')
 
 
   .contact_list
-    - if @friends.keys.length > 0
+    - if @friends.size > 0
       = render :partial => 'services/finder', :locals => {:friends => @friends}
     - else
       %br
diff --git a/public/javascripts/contact-list.js b/public/javascripts/contact-list.js
index da37b2800f32aeaf94ca6332457e9e093c138dc6..1a1d38a571c8879b1f3f8947e85338733c9ea9e7 100644
--- a/public/javascripts/contact-list.js
+++ b/public/javascripts/contact-list.js
@@ -10,7 +10,7 @@ var List = {
       var list   = $(this).siblings("ul").first();
       var query  = new RegExp(search.val(),'i');
 
-      $("li", list).each( function() {
+      $("> li", list).each( function() {
         var element = $(this);
         if( !element.text().match(query) ) {
           if( !element.hasClass('hidden') ) {
diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb
index b3548feba6ae0b7db53f9ee42fca6677f28ea2e2..cdd4ac02f5ee2f015d1890ca9e43d7a249c7c415 100644
--- a/spec/controllers/sessions_controller_spec.rb
+++ b/spec/controllers/sessions_controller_spec.rb
@@ -17,17 +17,11 @@ describe SessionsController do
 
   let(:mock_access_token) { Object.new }
 
-  let(:omniauth_auth) {
-    { 'provider' => 'twitter',
-      'uid'      => '2',
-      'user_info'   => { 'nickname' => 'grimmin' },
-      'credentials' => { 'token' => 'tokin', 'secret' =>"not_so_much" }
-      }
-  }
-
   before do
-    request.env["devise.mapping"] = Devise.mappings[:user]
+    @request.env["devise.mapping"] = Devise.mappings[:user]
     @user   = alice
+    @user.password = "evankorth"
+    @user.password_confirmation = "evankorth"
     @service = Services::Facebook.new(:access_token => "yeah")
     @user.services << @service
     @user.save
@@ -36,7 +30,7 @@ describe SessionsController do
   describe "#create" do
     it 'queues up an update job' do
       Resque.should_receive(:enqueue).with(Job::UpdateServiceUsers, @service.id)
-      post :create, {"user"=>{"remember_me"=>"0", "username"=>"alice",
+      post :create, {"user"=>{"remember_me"=>"0", "username"=> @user.username,
                                "password"=>"evankorth"}}
     end
   end
diff --git a/spec/models/services/facebook_spec.rb b/spec/models/services/facebook_spec.rb
index fc69a03d0d101a61895de905bcd279fbf8c6cb20..ae8e1522157ecad357391e4d9123ff4d5c9157b6 100644
--- a/spec/models/services/facebook_spec.rb
+++ b/spec/models/services/facebook_spec.rb
@@ -71,8 +71,14 @@ JSON
     end
 
     describe '#finder' do
+      it 'does a syncronous call if it has not been called before' do
+        @service.should_receive(:save_friends)
+        @service.finder
+      end
       it 'dispatches a resque job' do
         Resque.should_receive(:enqueue).with(Job::UpdateServiceUsers, @service.id)
+        su2 = ServiceUser.create(:service => @user2_service, :uid => @user2_fb_id, :name => @user2_fb_name, :photo_url => @user2_fb_photo_url)
+        @service.service_users = [su2]
         @service.finder
       end
       context 'opts' do