diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 137705df418e93625ab4be732edac8fb4083a957..7a68afdf22073a2d6d9f91cb1109d0abe6f00424 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -31,7 +31,7 @@ class ApplicationController < ActionController::Base
 
       @aspects = current_user.aspects
       @aspects_dropdown_array = current_user.aspects.collect{|x| [x.to_s, x.id]}
-      @friends = current_user.friends
+      @friends = current_user.friends.map{|c| c.person}
     end
   end
 
diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb
index ddde8a7257834c578394fbb972b5fda9418634ec..439be4461a356d1bc2f1c7a9fdd27a7250a186df 100644
--- a/app/controllers/aspects_controller.rb
+++ b/app/controllers/aspects_controller.rb
@@ -50,7 +50,7 @@ class AspectsController < ApplicationController
     unless @aspect
       render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404
     else
-      @friends = @aspect.people
+      @friends = @aspect.people.map{|c| c.person}
       @posts   = current_user.visible_posts( :by_members_of => @aspect ).paginate :per_page => 15, :order => 'created_at DESC'
       respond_with @aspect
     end
diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb
index 352a39c92ecef77861352d6994fe6cf308799484..e5997758613dd25133f7b93cdbcff1f0301f04de 100644
--- a/app/controllers/people_controller.rb
+++ b/app/controllers/people_controller.rb
@@ -21,7 +21,8 @@ class PeopleController < ApplicationController
       render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404
     else
       @profile = @person.profile
-      @aspects_with_person = current_user.aspects_with_person(@person)
+      @contact = current_user.contact_for(@person)
+      @aspects_with_person = @contact.aspects if @contact
       @posts = current_user.visible_posts(:person_id => @person.id).paginate :page => params[:page], :order => 'created_at DESC'
       @latest_status_message = current_user.raw_visible_posts.find_all_by__type_and_person_id("StatusMessage", params[:id]).last
       @post_count = @posts.count
diff --git a/app/models/user.rb b/app/models/user.rb
index 697c38263f1f20aeea5999433ae69bb366daa343..39c2baef2d952601af170fc5099a884404505cce 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -32,11 +32,11 @@ class User
   key :invites, Integer, :default => 5
   key :invitation_token, String
   key :invitation_sent_at, DateTime
-  key :inviter_ids, Array
-  key :friend_ids, Array
-  key :pending_request_ids, Array
-  key :visible_post_ids, Array
-  key :visible_person_ids, Array
+  key :inviter_ids, Array, :typecast => 'ObjectId' 
+  key :friend_ids, Array, :typecast => 'ObjectId' 
+  key :pending_request_ids, Array, :typecast => 'ObjectId' 
+  key :visible_post_ids, Array, :typecast => 'ObjectId' 
+  key :visible_person_ids, Array, :typecast => 'ObjectId' 
 
   key :invite_messages, Hash
 
@@ -135,11 +135,11 @@ class User
     aspect = Aspect.find(aspect_id)
     raise "Can not delete a person from an aspect you do not own" unless aspect.user == self
     contact = contact_for Person.find(person_id)
-    contact.aspects.delete aspect
+    contact.aspect_ids.delete aspect.id
     opts[:posts] ||= aspect.posts.all(:person_id => person_id)
     aspect.posts -= opts[:posts]
-    aspect.save
     contact.save
+    aspect.save
   end
 
   ######## Posting ########
diff --git a/app/views/aspects/manage.html.haml b/app/views/aspects/manage.html.haml
index 8ac04b893edc5fb1d2c78b4fb2a83e3b26f0cbb4..a49030d34700565321497ae6c648d72d5589f8c0 100644
--- a/app/views/aspects/manage.html.haml
+++ b/app/views/aspects/manage.html.haml
@@ -48,7 +48,8 @@
             %li!= remove_link(aspect)
 
         %ul.dropzone{:data=>{:aspect_id=>aspect.id}}
-          -for person in aspect.people
+          -for contact in aspect.people
+            -person = contact.person
             %li.person{:data=>{:guid=>person.id, :aspect_id=>aspect.id}}
               .delete
                 .x
diff --git a/app/views/people/show.html.haml b/app/views/people/show.html.haml
index a20026e4f1991a38527b99f203461e9f7da0270a..931c231047d602242b6b9fed93a3e9c9ee48bad6 100644
--- a/app/views/people/show.html.haml
+++ b/app/views/people/show.html.haml
@@ -17,7 +17,7 @@
         %li
           %i= t(".last_seen",:how_long_ago => how_long_ago(@posts.first))
 
-      - if @person != current_user.person && current_user.friends.include?(@person)
+      - if @person != current_user.person && @contact
         %li
           %i= t(".friends_since",:how_long_ago => how_long_ago(@person))
         %li
diff --git a/lib/diaspora/user/querying.rb b/lib/diaspora/user/querying.rb
index f1fbc7704dbcc4200f325f656a0bbe8d31b383be..f0097a172430246d4e7dc1830a0ea4f7e2c86c0b 100644
--- a/lib/diaspora/user/querying.rb
+++ b/lib/diaspora/user/querying.rb
@@ -23,14 +23,17 @@ module Diaspora
 
       def visible_person_by_id( id )
         id = id.to_id
-        return self.person if id == self.person.id
-        result = friends.first(:person_id => id).person
-        result = visible_people.detect{|x| x.id == id } unless result
-        result
+        if id == self.person.id
+          self.person
+        elsif friend = friends.first(:person_id => id)
+          friend.person
+        else
+          visible_people.detect{|x| x.id == id }
+        end
       end
 
-      def friends_not_in_aspect( aspect )
-        Person.all(:id.in => self.friend_ids, :id.nin => aspect.person_ids)
+      def friends_not_in_aspect( aspect ) 
+        Contact.all(:user_id => self.id, :aspect_ids.ne => aspect._id).map{|c| c.person}
       end
 
       def aspect_by_id( id )
diff --git a/spec/controllers/aspects_controller_spec.rb b/spec/controllers/aspects_controller_spec.rb
index 425d3de4b0e430fb50279de297ac59626075de56..e1695eb3fc8dc554b8ee05f1924ae3f92180da1c 100644
--- a/spec/controllers/aspects_controller_spec.rb
+++ b/spec/controllers/aspects_controller_spec.rb
@@ -14,6 +14,7 @@ describe AspectsController do
     @user2   = Factory.create(:user)
     @aspect2 = @user2.aspect(:name => "party people")
     friend_users(@user,@aspect, @user2, @aspect2)
+    @contact = @user.contact_for(@user2.person)
     sign_in :user, @user
   end
 
@@ -21,7 +22,7 @@ describe AspectsController do
     it "assigns @friends to all the user's friends" do
       Factory.create :person
       get :index
-      assigns[:friends].should == @user.friends
+      assigns[:friends].should == @user.friends.map{|c| c.person}
     end
   end
 
@@ -75,20 +76,20 @@ describe AspectsController do
   describe "#add_to_aspect" do
     it 'adds the users to the aspect' do
       @aspect1.reload
-      @aspect1.people.include?(@user2.person).should be false
+      @aspect1.people.include?(@contact).should be false
       post 'add_to_aspect', {:friend_id => @user2.person.id, :aspect_id => @aspect1.id }
       @aspect1.reload
-      @aspect1.people.include?(@user2.person).should be true
+      @aspect1.people.include?(@contact).should be true
     end
   end 
   
   describe "#remove_from_aspect" do
     it 'adds the users to the aspect' do
       @aspect.reload
-      @aspect.people.include?(@user2.person).should be true
+      @aspect.people.include?(@contact).should be true
       post 'remove_from_aspect', {:friend_id => @user2.person.id, :aspect_id => @aspect1.id }
       @aspect1.reload
-      @aspect1.people.include?(@user2.person).should be false
+      @aspect1.people.include?(@contact).should be false
     end
   end
 end
diff --git a/spec/misc_spec.rb b/spec/misc_spec.rb
index 75580af7bfc190e297112ddb2f20cc9f4d1adb73..fcad1a5e34c8ef1c158b3fc157a3c8d92d6a8e0d 100644
--- a/spec/misc_spec.rb
+++ b/spec/misc_spec.rb
@@ -22,15 +22,15 @@ describe 'making sure the spec runner works' do
 
     it 'makes the first user friends with the second' do
       contact = @user1.contact_for @user2.person
-      @user1.friends.should include contact
-      @aspect1.people.should include contact
+      @user1.friends.include?(contact).should be_true
+      @aspect1.people.include?(contact).should be_true
       contact.aspects.include?( @aspect1 ).should be true
     end
 
     it 'makes the second user friends with the first' do
       contact = @user2.contact_for @user1.person
-      @user2.friends.should include contact
-      @aspect2.people.should include contact
+      @user2.friends.include?(contact).should be_true
+      @aspect2.people.include?(contact).should be_true
       contact.aspects.include?( @aspect2 ).should be true
     end
   end
diff --git a/spec/models/aspect_spec.rb b/spec/models/aspect_spec.rb
index e99856df2466a561e2ded2a6bd8581800bc35682..7d6cde6c993a4492be44837bd7e07b6cbeb4cdcb 100644
--- a/spec/models/aspect_spec.rb
+++ b/spec/models/aspect_spec.rb
@@ -153,10 +153,10 @@ describe Aspect do
 
     describe "#add_person_to_aspect" do
       it 'adds the user to the aspect' do
-        aspect1.people.should_not include contact
+        aspect1.people.include?(contact).should be_false 
         user.add_person_to_aspect(user2.person.id, aspect1.id)
         aspect1.reload
-        aspect1.people.should include contact
+        aspect1.people.include?(contact).should be_true
       end
 
       it 'raises if its an aspect that the user does not own'do
@@ -228,8 +228,8 @@ describe Aspect do
           aspect.reload
           aspect1.reload
 
-          aspect.people.include?(contact).should be false
-          aspect1.people.include?(contact).should be true
+          aspect.people.include?(contact).should be_false
+          aspect1.people.include?(contact).should be_true
         end
 
         it "should not move a person who is not a friend" do
diff --git a/spec/models/user/invite_spec.rb b/spec/models/user/invite_spec.rb
index 67b5f35bfdafd9ddcc96365dfed1bf8384df8cdd..21f4670a7cae725fb389fd984ffd05647f19f392 100644
--- a/spec/models/user/invite_spec.rb
+++ b/spec/models/user/invite_spec.rb
@@ -68,7 +68,7 @@ describe User do
     it 'throws if you try to add someone you"re friends with' do
       friend_users(inviter, aspect, another_user, wrong_aspect)
       inviter.reload
-      proc{inviter.invite_user(:email => another_user.email, :aspect_id => aspect.id)}.should raise_error /You are already friends with this person/
+      proc{inviter.invite_user(:email => another_user.email, :aspect_id => aspect.id)}.should raise_error /You are already friends with that person/
     end
 
     it 'sends a friend request to a user with that email into the aspect' do
@@ -126,7 +126,7 @@ describe User do
       u.reload
       inviter
       inviter.receive_salmon(u.salmon(u.accept_friend_request(request.id, aspect2.id)).xml_for(inviter.person))
-      inviter.friends.include?(u.person).should be true
+      inviter.contact_for(u.person).should_not be_nil
     end
   end
 end