diff --git a/.gitignore b/.gitignore
index e8d72a0a452ed32314551a62ab07bd3b47b326d3..1ff4b346513763a68ed8d2a1c14cce95bf835e62 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ dist
 *.egg-info
 *.pyc
 *~
+djangoldp/tests/tests_temp.py
diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index e8e49514f86f0a5432312033deaad405a5c268bc..710d1bff4f1ea49cef00bf7ba1dd54a5353c70e9 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -584,7 +584,6 @@ class LDPSerializer(HyperlinkedModelSerializer):
 
     def update(self, instance, validated_data):
         model = self.Meta.model
-        validated_data = self.resolve_fk_instances(model, validated_data)
 
         nested_fields = []
         nested_fields_name = list(filter(lambda key: isinstance(validated_data[key], list), validated_data))
@@ -620,16 +619,7 @@ class LDPSerializer(HyperlinkedModelSerializer):
             sub_inst = None
             if 'urlid' in field_dict:
                 # has urlid and is a local resource
-                if parse.urlparse(settings.BASE_URL).netloc == parse.urlparse(field_dict['urlid']).netloc:
-                    # try slug field if it exists
-                    if slug_field in field_dict:
-                        kwargs = {slug_field: field_dict[slug_field]}
-                        sub_inst = field_model.objects.get(**kwargs)
-                    else:
-                        model, sub_inst = Model.resolve(field_dict['urlid'])
-                # remote resource - get backlinked copy
-                elif hasattr(field_model, 'urlid'):
-                    sub_inst = Model.get_or_create_external(field_model, field_dict['urlid'])
+                model, sub_inst = self.get_inst_by_urlid(field_dict, field_model, model, slug_field, sub_inst)
             # try slug field, assuming that this is a local resource
             elif slug_field in field_dict:
                 kwargs = {slug_field: field_dict[slug_field]}
@@ -643,14 +633,33 @@ class LDPSerializer(HyperlinkedModelSerializer):
             validated_data[field_name] = sub_inst
         return validated_data
 
+    def get_inst_by_urlid(self, field_dict, field_model, model, slug_field, sub_inst):
+        if parse.urlparse(settings.BASE_URL).netloc == parse.urlparse(field_dict['urlid']).netloc:
+            # try slug field if it exists
+            if slug_field in field_dict:
+                kwargs = {slug_field: field_dict[slug_field]}
+                sub_inst = field_model.objects.get(**kwargs)
+            else:
+                model, sub_inst = Model.resolve(field_dict['urlid'])
+        # remote resource - get backlinked copy
+        elif hasattr(field_model, 'urlid'):
+            sub_inst = Model.get_or_create_external(field_model, field_dict['urlid'])
+        return model, sub_inst
+
     def update_dict_value(self, attr, instance, value):
         info = model_meta.get_field_info(instance)
         slug_field = Model.slug_field(instance)
         relation_info = info.relations.get(attr)
-        if slug_field in value:
+        if slug_field in value :
             value = self.update_dict_value_when_id_is_provided(attr, instance, relation_info, slug_field, value)
         else:
-            value = self.update_dict_value_without_slug_field(attr, instance, relation_info, value)
+            if 'urlid' in value:
+                if parse.urlparse(settings.BASE_URL).netloc == parse.urlparse(value['urlid']).netloc:
+                    model, value = Model.resolve(value['urlid'])
+                elif hasattr(relation_info.related_model, 'urlid'):
+                    value = Model.get_or_create_external(relation_info.related_model, value['urlid'])
+            else:
+                value = self.update_dict_value_without_slug_field(attr, instance, relation_info, value)
         return value
 
     def update_dict_value_without_slug_field(self, attr, instance, relation_info, value):
diff --git a/djangoldp/tests/runner.py b/djangoldp/tests/runner.py
index 9ef164ecd6dceb6079edbb58e5f52e2836cfb619..3966fd5190de0a9f37e7c3838f15e24b2c234e62 100644
--- a/djangoldp/tests/runner.py
+++ b/djangoldp/tests/runner.py
@@ -24,8 +24,7 @@ failures = test_runner.run_tests([
     'djangoldp.tests.tests_sources',
     'djangoldp.tests.tests_pagination',
     'djangoldp.tests.tests_inbox',
-    'djangoldp.tests.tests_backlinks_service',
-    # 'djangoldp.tests.tests_temp'
+    'djangoldp.tests.tests_backlinks_service'
 
 ])
 if failures:
diff --git a/djangoldp/tests/tests_save.py b/djangoldp/tests/tests_save.py
index a785233b4a729cf748ec289aa3d7563304a39a0a..48fe32f3d91be959db82c26cb8223cdd05d65e21 100644
--- a/djangoldp/tests/tests_save.py
+++ b/djangoldp/tests/tests_save.py
@@ -318,7 +318,6 @@ class Save(TestCase):
         self.assertEqual(response.data['circle']['@id'],
                      "http://testserver/circles/{}/".format(circle.pk))
 
-
     def test_nested_container_federated(self):
         resource = Resource.objects.create()
         body = {
diff --git a/djangoldp/tests/tests_temp.py b/djangoldp/tests/tests_temp.py
deleted file mode 100644
index a7e6d763bfd3cc08962a5ad393691e3f3a8174e5..0000000000000000000000000000000000000000
--- a/djangoldp/tests/tests_temp.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import json
-
-from guardian.shortcuts import assign_perm
-
-from .models import PermissionlessDummy, Dummy
-from django.contrib.auth import get_user_model
-from django.test import TestCase
-from rest_framework.test import APIRequestFactory, APIClient
-
-from djangoldp.models import LDPSource
-from djangoldp.tests.models import Invoice, Circle, Conversation
-from ..permissions import LDPPermissions
-
-
-class TestTemp(TestCase):
-
-    def setUp(self):
-        self.client = APIClient()
-
-    def setUpLoggedInUser(self):
-        self.user = get_user_model().objects.create_user(username='john', email='jlennon@beatles.com',
-                                                         password='glass onion')
-        self.client.force_authenticate(user=self.user)
-
-    # optional setup for testing PermissionlessDummy model with parameterised perms
-    def setUpGuardianDummyWithPerms(self, perms=[]):
-        self.dummy = PermissionlessDummy.objects.create(some='test', slug='test')
-        model_name = PermissionlessDummy._meta.model_name
-
-        for perm in perms:
-            assign_perm(perm + '_' + model_name, self.user, self.dummy)
-
-    def tearDown(self):
-        pass
-
-
-    # test with anonymous user
-    def test_invalidate_cache_permissions(self):
-        self.setUpLoggedInUser()
-        self.setUpGuardianDummyWithPerms()
-        response = self.client.get('/permissionless-dummys/{}/'.format(self.dummy.slug))
-        self.assertEqual(response.status_code, 403)
-        assign_perm('view' + '_' + PermissionlessDummy._meta.model_name, self.user, self.dummy)
-        LDPPermissions.invalidate_cache()
-        response = self.client.get('/permissionless-dummys/{}/'.format(self.dummy.slug))
-        self.assertEqual(response.status_code, 200)
-
diff --git a/djangoldp/tests/tests_update.py b/djangoldp/tests/tests_update.py
index 17d5702ceece7558d75adc4325ba363c105eaf43..134172011e71e4871daaf800c70d86aafcc71d89 100644
--- a/djangoldp/tests/tests_update.py
+++ b/djangoldp/tests/tests_update.py
@@ -595,3 +595,31 @@ class Update(TestCase):
 
         user = get_user_model().objects.get(pk=ext_user.pk)
         self.assertEqual(user.projects.count(), 0)
+
+    def test_update_sub_object_with_urlid(self):
+        user = get_user_model().objects.create(username="alex", password="test")
+        profile = UserProfile.objects.create(user=user, description="user description")
+        body = {
+            '@id': '/users/{}/'.format(user.pk),
+            "first_name": "Alexandre",
+            "last_name": "Bourlier",
+            "username": "alex",
+            'userprofile': {
+                '@id': "http://happy-dev.fr/userprofiles/{}/".format(profile.pk),
+                'description': "user update"
+            },
+            '@context': {
+                "@vocab": "http://happy-dev.fr/owl/#",
+            }
+        }
+
+        response = self.client.put('/users/{}/'.format(user.pk), data=json.dumps(body),
+                                   content_type='application/ld+json')
+        self.assertEqual(response.status_code, 200)
+        self.assertIn('userprofile', response.data)
+
+        response = self.client.get('/userprofiles/{}/'.format(profile.pk),
+                                   content_type='application/ld+json')
+        self.assertEqual(response.data['description'], "user update")
+
+