diff --git a/redpipe/structs.py b/redpipe/structs.py
index <HASH>..<HASH> 100644
--- a/redpipe/structs.py
+++ b/redpipe/structs.py
@@ -87,7 +87,8 @@ class Struct(object):
                     return
 
                 for k, v in ref.result.items():
-                    self._data[k] = v
+                    if k != keyname:
+                        self._data[k] = v
 
             pipe.on_execute(cb)
 
diff --git a/test.py b/test.py
index <HASH>..<HASH> 100755
--- a/test.py
+++ b/test.py
@@ -650,6 +650,19 @@ class StructTestCase(BaseTestCase):
             u = self.User(k)
             self.assertFalse(u.persisted)
 
+    def test_indirect_overlap_of_pk(self):
+        key = '1'
+        other_key = '2'
+        u = self.UserWithPk(
+            user_id=key,
+            first_name='first%s' % key,
+        )
+        u.core().hset(key, 'user_id', other_key)
+        u = self.UserWithPk(key)
+        self.assertEqual(dict(u)['user_id'], key)
+        self.assertNotIn('user_id', u._data)  # noqa
+        self.assertEqual(u.key, key)
+
 
 class ConnectTestCase(unittest.TestCase):
     def tearDown(self):
confirm behavior if Struct primary key field is overlapped somehow with a redis hash member name