diff --git a/panoptes_client/panoptes.py b/panoptes_client/panoptes.py
index 3f59a9b..463751c 100644
--- a/panoptes_client/panoptes.py
+++ b/panoptes_client/panoptes.py
@@ -935,7 +935,7 @@ class LinkResolver(object):
 
     def __setattr__(self, name, value):
         reserved_names = ('raw', 'parent')
-        if name not in reserved_names and name in self.parent.raw['links']:
+        if name not in reserved_names and name not in dir(self):
             if not self.parent._loaded:
                 self.parent.reload()
             if isinstance(value, PanoptesObject):

Cannot create and save new subject set since 1.1
This [script](https://github.com/miclaraia/muon_analysis/blob/master/muon/scripts/test_panoptes_connection.py) illustrates the problem. The script fails on `subject_set.save()`. Mimics the instructions in the tutorial detailed in the [docs](https://panoptes-python-client.readthedocs.io/en/v1.1/user_guide.html#tutorial-creating-a-new-project).

Tries to get a project, create a subject set, link the subject set to the project, then save the subject set. The following trace is shown on `subject_set.save()`:
```
  File "test_panoptes_connection.py", line 23, in main
    subject_set.save()
  File ".../venv/lib/python3.6/site-packages/panoptes_client/panoptes.py", line 815, in save
    etag=self.etag
  File ".../venv/lib/python3.6/site-packages/panoptes_client/panoptes.py", line 404, in post
    retry=retry,
  File ".../venv/lib/python3.6/site-packages/panoptes_client/panoptes.py", line 281, in json_request
    json_response['errors']
panoptes_client.panoptes.PanoptesAPIException: {"schema"=>"did not contain a required property of 'links'"}
```
diff --git a/panoptes_client/tests/test_linkresolver.py b/panoptes_client/tests/test_linkresolver.py
new file mode 100644
index 0000000..72555c6
--- /dev/null
+++ b/panoptes_client/tests/test_linkresolver.py
@@ -0,0 +1,23 @@
+from __future__ import absolute_import, division, print_function
+
+import unittest
+import sys
+
+if sys.version_info <= (3, 0):
+    from mock import Mock
+else:
+    from unittest.mock import Mock
+
+from panoptes_client.panoptes import LinkResolver
+
+
+class TestLinkResolver(unittest.TestCase):
+    def test_set_new_link(self):
+        parent = Mock()
+        parent.raw = {'links': {}}
+
+        target = Mock()
+
+        resolver = LinkResolver(parent)
+        resolver.newlink = target
+        self.assertEqual(parent.raw['links'].get('newlink', None), target)
diff --git a/panoptes_client/tests/test_subject_set.py b/panoptes_client/tests/test_subject_set.py
new file mode 100644
index 0000000..97d33cd
--- /dev/null
+++ b/panoptes_client/tests/test_subject_set.py
@@ -0,0 +1,42 @@
+from __future__ import absolute_import, division, print_function
+
+import unittest
+import sys
+
+if sys.version_info <= (3, 0):
+    from mock import patch, Mock
+else:
+    from unittest.mock import patch, Mock
+
+from panoptes_client.subject_set import SubjectSet
+
+
+class TestSubjectSet(unittest.TestCase):
+    def test_create(self):
+        with patch('panoptes_client.panoptes.Panoptes') as pc:
+            pc.client().post = Mock(return_value=(
+                {
+                    'subject_sets': [{
+                        'id': 0,
+                        'display_name': '',
+                    }],
+                },
+                '',
+            ))
+            subject_set = SubjectSet()
+            subject_set.links.project = 1234
+            subject_set.display_name = 'Name'
+            subject_set.save()
+
+            pc.client().post.assert_called_with(
+                '/subject_sets',
+                json={
+                    'subject_sets': {
+                        'display_name': 'Name',
+                        'links': {
+                            'project': 1234,
+                        }
+                    }
+                },
+                etag=None,
+            )

pip install -e .[testing,docs]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
apt-get update apt-get install -y gcc libmagic1
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.16
babel==2.17.0
certifi==2025.1.31
chardet==3.0.4
coverage==7.8.0
docutils==0.19
exceptiongroup==1.2.2
execnet==2.1.1
future==0.17.1
idna==2.8
imagesize==1.4.1
importlib_metadata==8.6.1
iniconfig==2.1.0
Jinja2==3.1.6
MarkupSafe==3.0.2
mock==2.0.0
packaging==24.2
-e git+https://github.com/zooniverse/panoptes-python-client.git@a6f91519326e3be7e974b88ce4f8805c5db9a0e4#egg=panoptes_client
pbr==6.1.1
pluggy==1.5.0
Pygments==2.19.1
pytest==8.3.5
pytest-asyncio==0.26.0
pytest-cov==6.0.0
pytest-mock==3.14.0
pytest-xdist==3.6.1
python-magic==0.4.27
redo==3.0.0
requests==2.21.0
six==1.17.0
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinxcontrib-applehelp==2.0.0
sphinxcontrib-devhelp==2.0.0
sphinxcontrib-htmlhelp==2.1.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0
tomli==2.2.1
typing_extensions==4.13.0
urllib3==1.24.3
zipp==3.21.0

name: panoptes-python-client
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.16
      - babel==2.17.0
      - certifi==2025.1.31
      - chardet==3.0.4
      - coverage==7.8.0
      - docutils==0.19
      - exceptiongroup==1.2.2
      - execnet==2.1.1
      - future==0.17.1
      - idna==2.8
      - imagesize==1.4.1
      - importlib-metadata==8.6.1
      - iniconfig==2.1.0
      - jinja2==3.1.6
      - markupsafe==3.0.2
      - mock==2.0.0
      - packaging==24.2
      - pbr==6.1.1
      - pluggy==1.5.0
      - pygments==2.19.1
      - pytest==8.3.5
      - pytest-asyncio==0.26.0
      - pytest-cov==6.0.0
      - pytest-mock==3.14.0
      - pytest-xdist==3.6.1
      - python-magic==0.4.27
      - redo==3.0.0
      - requests==2.21.0
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==2.0.0
      - sphinxcontrib-devhelp==2.0.0
      - sphinxcontrib-htmlhelp==2.1.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==2.0.0
      - sphinxcontrib-serializinghtml==2.0.0
      - tomli==2.2.1
      - typing-extensions==4.13.0
      - urllib3==1.24.3
      - zipp==3.21.0
prefix: /opt/conda/envs/panoptes-python-client

panoptes_client/tests/test_linkresolver.py::TestLinkResolver::test_set_new_link panoptes_client/tests/test_subject_set.py::TestSubjectSet::test_create
panoptes_client/panoptes.py
panoptes_client/panoptes.py