diff --git a/app/models/user.rb b/app/models/user.rb
index d07bca481c2cadc6e16001efc17088273220893f..4e07abb2a099527fd6bfe122bd146b762ada5142 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -122,23 +122,15 @@ class User
   end
   
   def remove_friend(bad_friend)
-    puts "YEAHH!!"
     raise "Friend not deleted" unless self.friend_ids.delete( bad_friend.id )
     groups.each{|g| g.person_ids.delete( bad_friend.id )}
     self.save
 
-    puts self.posts.find_all_by_person_id( bad_friend.id ).inspect
     self.posts.find_all_by_person_id( bad_friend.id ).each{|post|
-      puts "HEYYYYYYYY"
-
       self.post_ids.delete( post.id )
-      puts self.posts
-      post.user_refs =- 1
-
-      puts  "ASODIJ"
+      post.user_refs -= 1
       (post.user_refs > 0 || post.person.owner.nil? == false) ?  post.save : post.destroy
     }
-    puts self.inspect 
     self.save
 
     bad_friend.user_refs -= 1
@@ -200,7 +192,10 @@ class User
 
     elsif object.is_a?(Post) && object.verify_creator_signature == true 
       Rails.logger.debug("Saving post: #{object}")
+
+      object.user_refs += 1
       object.save
+
       self.posts << object
       self.save
       object.socket_to_uid(id) if (object.respond_to?(:socket_to_uid) && !self.owns?(object))
diff --git a/lib/diaspora/parser.rb b/lib/diaspora/parser.rb
index 8835bd83bc57b96e22d255cb01fb81a339cf8dbb..650c4a4e49b280ebbe3a711fb5ec59ccf3820c1a 100644
--- a/lib/diaspora/parser.rb
+++ b/lib/diaspora/parser.rb
@@ -20,7 +20,15 @@ module Diaspora
       return unless body = doc.xpath("/XML/post").children.first
 
       begin
-        body.name.camelize.constantize.from_xml body.to_s
+        new_object = body.name.camelize.constantize.from_xml body.to_s
+
+        if new_object.is_a? Post
+          existing_object = new_object.class.find_by_id(new_object.id)
+          existing_object ? (return existing_object) : (return new_object)
+        end
+
+        new_object
+
       rescue NameError => e
         if e.message.include? 'wrong constant name'
           Rails.logger.info "Not a real type: #{object.to_s}"
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 6e93e750c0d7ebe5e20868d91f2c6198afc5c535..fc1480ea7e606abd781e6cad84563c487f930a34 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -275,33 +275,96 @@ describe User do
   describe 'post refs' do
     before do
       @user2 = Factory.create(:user)
+      @user.activate_friend( @user2.person, @group)
+      
+      @user3 = Factory.create(:user)
+      @group3 = @user3.group(:name => 'heroes')
+
+
+      @user.posts.count.should == 0
     end
 
     it 'should be removed on unfriending' do
-      @user.activate_friend( @user2.person, @group)
+      status_message = @user2.post :status_message, :message => "hi"
+      @user.receive status_message.to_diaspora_xml
+      @user.reload
+
+      @user.posts.count.should == 1
       
+      @user.unfriend(@user2.person)
+
+      @user.reload
       @user.posts.count.should == 0
+      
+      Post.count.should be 1
+    end
 
+    it 'should be remove a post if the noone links to it' do
       status_message = @user2.post :status_message, :message => "hi"
       @user.receive status_message.to_diaspora_xml
+      @user.reload
 
+      @user.posts.count.should == 1
+      
+      person = @user2.person
+      @user2.destroy
+      @user.unfriend(person)
+
+      @user.reload
+      @user.posts.count.should == 0
+      
+      Post.count.should be 0
+    end
+
+    it 'should keep track of user references for one person ' do
+      status_message = @user2.post :status_message, :message => "hi"
+      @user.receive status_message.to_diaspora_xml
+      @user.reload
 
       @user.posts.count.should == 1
+      
+      status_message.reload
+      status_message.user_refs.should == 1
+      
+      @user.unfriend(@user2.person)
+      status_message.reload
 
       @user.reload
+      @user.posts.count.should == 0
+
+      status_message.reload
+      status_message.user_refs.should == 0
+      
+      Post.count.should be 1
+    end
+
+    it 'should not override userrefs on receive by another person' do
+      @user3 = Factory.create :user
+      @user3.activate_friend(@user2, @group3)
+
+      status_message = @user2.post :status_message, :message => "hi"
+      @user.receive status_message.to_diaspora_xml
+      @user3.receive status_message.to_diaspora_xml
+      @user.reload
+      @user3.reload
 
       @user.posts.count.should == 1
       
+      status_message.reload
+      status_message.user_refs.should == 2
+      
       @user.unfriend(@user2.person)
+      status_message.reload
 
-      puts @user.inspect 
       @user.reload
-      puts @user.inspect 
       @user.posts.count.should == 0
+
+      status_message.reload
+      status_message.user_refs.should == 1
       
-      puts Post.all.inspect
       Post.count.should be 1
     end
 
+
   end
 end