diff --git a/README.md b/README.md
index 90be502e8813fd7160be6a991311ba7596c21c33..2eb0728051d61bacaa80d32f8668cb8bf9419f43 100644
--- a/README.md
+++ b/README.md
@@ -204,11 +204,6 @@ It can also be disabled on a model instance
 instance.allow_create_backlinks = False
 ```
 
-When an instance was created as a reverse-link to an external resource, it is marked with `is_backlink`
-```python
-instance.is_backlink = True
-```
-
 For situations where you don't want to include federated resources in a queryset, DjangoLDP Models override `models.Manager`, allowing you to write `Todo.objects.local()`, for example:
 ```python
 Todo.objects.create(name='Local Todo')
diff --git a/djangoldp/activities/services.py b/djangoldp/activities/services.py
index 0d076b813c47d5480098d7fe65fe85972f45bd83..3a828c0249400b231d3bd1936dbb28772e4958e0 100644
--- a/djangoldp/activities/services.py
+++ b/djangoldp/activities/services.py
@@ -182,7 +182,7 @@ class ActivityPubService(object):
                 '@id': actor.urlid
             }
 
-        summary = str(object['@id']) + " was created"
+        summary = str(object['@id']) + " was updated"
 
         activity = {
             "@context": [
@@ -249,7 +249,7 @@ class ActivityPubService(object):
 
 
 def _check_instance_for_backlinks(sender, instance):
-    '''Auxiliary function returns a dictionary of backlink targets from paramertised instance'''
+    '''Auxiliary function returns a set of backlink targets from paramertised instance'''
     info = model_meta.get_field_info(sender)
 
     # bounds checking
@@ -257,7 +257,7 @@ def _check_instance_for_backlinks(sender, instance):
         return {}
 
     # check each foreign key for a distant resource
-    targets = {}
+    targets = set()
     for field_name, relation_info in info.relations.items():
         if not relation_info.to_many:
             value = getattr(instance, field_name, None)
@@ -268,26 +268,26 @@ def _check_instance_for_backlinks(sender, instance):
                 if target_type is None:
                     continue
 
-                targets[value.urlid] = ActivityPubService._discover_inbox(value.urlid)
+                targets.add(ActivityPubService._discover_inbox(value.urlid))
 
     # append Followers as targets
     followers = Follower.objects.filter(object=instance.urlid)
     for follower in followers:
-        targets[follower.inbox] = follower.inbox
+        targets.add(follower.inbox)
 
-    logger.debug('[Sender] built dict of targets: ' + str(targets))
+    logger.debug('[Sender] built set of targets: ' + str(targets))
     return targets
 
 
 @receiver([post_save])
 def check_save_for_backlinks(sender, instance, created, **kwargs):
-    if getattr(settings, 'SEND_BACKLINKS', True) and not getattr(instance, 'is_backlink', False) \
-            and getattr(instance, 'allow_create_backlink', False)\
+    if getattr(settings, 'SEND_BACKLINKS', True) and getattr(instance, 'allow_create_backlink', False) \
+            and not Model.is_external(instance) \
             and getattr(instance, 'username', None) != 'hubl-workaround-493':
         logger.debug("[Sender] Received created non-backlink instance " + str(instance) + "(" + str(sender) + ")")
         targets = _check_instance_for_backlinks(sender, instance)
 
-        if len(targets.items()) > 0:
+        if len(targets) > 0:
             obj = ActivityPubService.build_object_tree(instance)
             actor = {
                 "type": "Service",
@@ -295,15 +295,15 @@ def check_save_for_backlinks(sender, instance, created, **kwargs):
             }
             # Create Activity
             if created:
-                for key in targets.keys():
-                    ActivityPubService.send_create_activity(actor, obj, targets[key])
-                    Follower.objects.create(object=obj['@id'], inbox=targets[key])
+                for target in targets:
+                    ActivityPubService.send_create_activity(actor, obj, target)
+                    Follower.objects.create(object=obj['@id'], inbox=target)
             # Update Activity
             else:
-                for key in targets.keys():
-                    ActivityPubService.send_update_activity(actor, obj, targets[key])
-                    if not Follower.objects.filter(object=obj['@id'], inbox=targets[key]).exists():
-                        Follower.objects.create(object=obj['@id'], inbox=targets[key])
+                for target in targets:
+                    ActivityPubService.send_update_activity(actor, obj, target)
+                    if not Follower.objects.filter(object=obj['@id'], inbox=target).exists():
+                        Follower.objects.create(object=obj['@id'], inbox=target)
 
 
 @receiver([post_delete])
@@ -313,15 +313,15 @@ def check_delete_for_backlinks(sender, instance, **kwargs):
         logger.debug("[Sender] Received deleted non-backlink instance " + str(instance) + "(" + str(sender) + ")")
         targets = _check_instance_for_backlinks(sender, instance)
 
-        if len(targets.items()) > 0:
-            for key in targets.keys():
+        if len(targets) > 0:
+            for target in targets:
                 ActivityPubService.send_delete_activity({
                     "type": "Service",
                     "name": "Backlinks Service"
                 }, {
                     "@id": instance.urlid,
                     "@type": Model.get_model_rdf_type(sender)
-                }, targets[key])
+                }, target)
 
     # remove any Followers on this resource
     urlid = getattr(instance, 'urlid', None)
@@ -339,7 +339,7 @@ def check_m2m_for_backlinks(sender, instance, action, *args, **kwargs):
         for obj in query_set:
             condition = Model.is_external(obj) and getattr(obj, 'allow_create_backlink', False)
             if action == "post_add":
-                condition = condition and not getattr(instance, 'is_backlink', False)
+                condition = condition and not Model.is_external(instance)
 
             if condition:
                 targets.append({
diff --git a/djangoldp/models.py b/djangoldp/models.py
index 5cc1c3eb7724abb797403826b0a0ae4b6f11ba76..f5f2d6a3d764992035e416684d98c40983fbf7dd 100644
--- a/djangoldp/models.py
+++ b/djangoldp/models.py
@@ -31,7 +31,8 @@ class LDPModelManager(models.Manager):
 
 class Model(models.Model):
     urlid = LDPUrlField(blank=True, null=True, unique=True)
-    is_backlink = models.BooleanField(default=False, help_text='set automatically to indicate the Model is a backlink')
+    is_backlink = models.BooleanField(default=False,
+                                      help_text='(DEPRECIATED) set automatically to indicate the Model is a backlink')
     allow_create_backlink = models.BooleanField(default=True,
                                                 help_text='set to False to disable backlink creation after Model save')
     objects = LDPModelManager()
diff --git a/djangoldp/tests/tests_inbox.py b/djangoldp/tests/tests_inbox.py
index cc1d8a810cb7360dfae72feabf37fc4b33454590..d29a18e39d218a537e463eee2ff8729b71764512 100644
--- a/djangoldp/tests/tests_inbox.py
+++ b/djangoldp/tests/tests_inbox.py
@@ -156,9 +156,8 @@ class TestsInbox(APITestCase):
         UserProfile.objects.create(user=user)
 
         # ..but the receiver already knows about it
-        circle = Circle.objects.create(urlid="https://distant.com/circles/1/", is_backlink=True)
-        CircleMember.objects.create(urlid="https://distant.com/circle-members/1/", circle=circle, user=user,
-                                    is_backlink=True)
+        circle = Circle.objects.create(urlid="https://distant.com/circles/1/")
+        CircleMember.objects.create(urlid="https://distant.com/circle-members/1/", circle=circle, user=user)
 
         payload = {
             "@context": [
@@ -248,7 +247,7 @@ class TestsInbox(APITestCase):
         # a local user has a distant project attached
         user = get_user_model().objects.create(username='john', email='jlennon@beatles.com', password='glass onion')
         UserProfile.objects.create(user=user)
-        project = Project.objects.create(urlid="https://distant.com/projects/1/", is_backlink=True)
+        project = Project.objects.create(urlid="https://distant.com/projects/1/")
         user.projects.add(project)
 
         payload = {
@@ -297,8 +296,7 @@ class TestsInbox(APITestCase):
         user = get_user_model().objects.create(username='john', email='jlennon@beatles.com', password='glass onion')
         UserProfile.objects.create(user=user)
         circle = Circle.objects.create(urlid="https://distant.com/circles/1/", allow_create_backlink=False)
-        CircleMember.objects.create(urlid="https://distant.com/circle-members/1/",circle=circle, user=user,
-                                    is_backlink=True)
+        CircleMember.objects.create(urlid="https://distant.com/circle-members/1/",circle=circle, user=user)
 
         payload = {
             "@context": [
@@ -350,7 +348,7 @@ class TestsInbox(APITestCase):
         user = get_user_model().objects.create(username='john', email='jlennon@beatles.com', password='glass onion')
         UserProfile.objects.create(user=user)
 
-        circle = Circle.objects.create(urlid="https://distant.com/circles/1/", owner=user, is_backlink=True)
+        circle = Circle.objects.create(urlid="https://distant.com/circles/1/", owner=user)
         self.assertEqual(circle.owner, user)
 
         payload = {