diff --git a/lib/sugarcrm/associations/association_cache.rb b/lib/sugarcrm/associations/association_cache.rb
index <HASH>..<HASH> 100644
--- a/lib/sugarcrm/associations/association_cache.rb
+++ b/lib/sugarcrm/associations/association_cache.rb
@@ -19,8 +19,10 @@ module SugarCRM; module AssociationCache
 
   # Updates an association cache entry if it's been initialized
   def update_association_cache_for(association, target)
+    return unless association_cached? association
+    return if @association_cache[association].collection.include? target
     # only add to the cache if the relationship has been queried
-    @association_cache[association] << target if association_cached? association
+    @association_cache[association] << target
   end
   
   # Resets the association cache
diff --git a/lib/sugarcrm/associations/association_collection.rb b/lib/sugarcrm/associations/association_collection.rb
index <HASH>..<HASH> 100644
--- a/lib/sugarcrm/associations/association_collection.rb
+++ b/lib/sugarcrm/associations/association_collection.rb
@@ -2,6 +2,8 @@ module SugarCRM
   # A class for handling association collections.  Basically just an extension of Array
   # doesn't actually load the records from Sugar until you invoke one of the public methods
   class AssociationCollection
+  
+    attr_reader :collection
     
     # creates a new instance of an AssociationCollection
     # Owner is the parent object, and association is the target
don't update association collection if relationship already exists

associating a contact to an account twice shouldn't increase account.contacts.size each time