diff --git a/pyclarity_lims/descriptors.py b/pyclarity_lims/descriptors.py
index 91e2a4d..6ac8565 100644
--- a/pyclarity_lims/descriptors.py
+++ b/pyclarity_lims/descriptors.py
@@ -278,21 +278,25 @@ class XmlAction(XmlElementAttributeDict):
     action: The type of action to perform. (leave, repeat, remove, review, complete, store, nextstep, rework, completerepeat, unknown)
     """
     def _parse_element(self, element, **kwargs):
-        from pyclarity_lims.entities import Artifact, ProtocolStep
+        from pyclarity_lims.entities import Artifact, ProtocolStep, Step
         for k, v in element.attrib.items():
 
             if k == 'artifact-uri':
                 k = 'artifact'
                 v = Artifact(self.instance.lims, uri=v)
-            elif k in ('step-uri', 'rework-step-uri'):
+            elif k == 'step-uri':
                 k = k[:-(len('-uri'))]
                 v = ProtocolStep(self.instance.lims, uri=v)
+            elif k == 'rework-step-uri':
+                k = k[:-(len('-uri'))]
+                v = Step(self.instance.lims, uri=v)
             dict.__setitem__(self, k, v)
 
     def _setitem(self, key, value):
-        from pyclarity_lims.entities import Artifact, ProtocolStep
-        if (key in ['artifact'] and isinstance(value, Artifact)) or \
-           (key in ['step', 'rework-step'] and isinstance(value, ProtocolStep)):
+        from pyclarity_lims.entities import Artifact, ProtocolStep, Step
+        if key == 'artifact' and isinstance(value, Artifact) or \
+                key == 'step' and isinstance(value, ProtocolStep) or \
+                key == 'rework-step' and isinstance(value, Step):
             key += '-uri'
             value = value.uri
         elif key in ['action']:

StepAction rework-step take a Step 
It currently accept a protocolStep which is incorrect
diff --git a/tests/test_descriptors.py b/tests/test_descriptors.py
index 2523475..407b430 100644
--- a/tests/test_descriptors.py
+++ b/tests/test_descriptors.py
@@ -11,7 +11,7 @@ from pyclarity_lims.descriptors import StringDescriptor, StringAttributeDescript
     StringDictionaryDescriptor, IntegerDescriptor, BooleanDescriptor, UdfDictionary, EntityDescriptor, \
     InputOutputMapList, EntityListDescriptor, PlacementDictionary, EntityList, SubTagDictionary, ExternalidList,\
     XmlElementAttributeDict, XmlAttributeList, XmlReagentLabelList, XmlPooledInputDict, XmlAction, QueuedArtifactList
-from pyclarity_lims.entities import Artifact, ProtocolStep, Container, Process
+from pyclarity_lims.entities import Artifact, ProtocolStep, Container, Process, Step
 from pyclarity_lims.lims import Lims
 from tests import elements_equal
 
@@ -780,7 +780,7 @@ class TestXmlAction(TestCase):
     def setUp(self):
         et = ElementTree.fromstring('''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                 <test-entry>
-                <next-action step-uri="{url}/prt/1/stp/1" action="nextstep" artifact-uri="{url}/arts/a1"/>
+                <next-action step-uri="{url}/prt/1/stp/1" rework-step-uri="{url}/steps/1" action="nextstep" artifact-uri="{url}/arts/a1"/>
                 </test-entry>'''.format(url='http://testgenologics.com:4040'))
 
         et1 = ElementTree.fromstring('''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@@ -797,6 +797,7 @@ class TestXmlAction(TestCase):
         assert action['action'] == 'nextstep'
         assert action['step'] == ProtocolStep(self.lims, uri='http://testgenologics.com:4040/prt/1/stp/1')
         assert action['artifact'] == Artifact(self.lims, uri='http://testgenologics.com:4040/arts/a1')
+        assert action['rework-step'] == Step(self.lims, uri='http://testgenologics.com:4040/steps/1')
 
     def test_set(self):
         action = XmlAction(self.instance_empty, tag='next-action')
@@ -804,6 +805,8 @@ class TestXmlAction(TestCase):
         assert action.instance.root.find('next-action').attrib['step-uri'] == 'http://testgenologics.com:4040/prt/1/stp/1'
         action['action'] = 'nextstep'
         assert action.instance.root.find('next-action').attrib['action'] == 'nextstep'
+        action['rework-step'] = Step(self.lims, uri='http://testgenologics.com:4040/steps/1')
+        assert action.instance.root.find('next-action').attrib['rework-step-uri'] == 'http://testgenologics.com:4040/steps/1'
 
         with pytest.raises(KeyError):
             action['whatever'] = 'youwant'

pip install -e .
parse_log_pytest
requirements.txt
pytest
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
charset-normalizer==2.0.12
idna==3.10
importlib-metadata==4.8.3
iniconfig==1.1.1
packaging==21.3
pluggy==1.0.0
py==1.11.0
-e git+https://github.com/EdinburghGenomics/pyclarity-lims.git@a03be6eda34f0d8adaf776d2286198a34e40ecf5#egg=pyclarity_lims
pyparsing==3.1.4
pytest==7.0.1
requests==2.27.1
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
zipp==3.6.0

name: pyclarity-lims
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
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - 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=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - charset-normalizer==2.0.12
      - idna==3.10
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - requests==2.27.1
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - zipp==3.6.0
prefix: /opt/conda/envs/pyclarity-lims

tests/test_descriptors.py::TestXmlAction::test_set
tests/test_descriptors.py::TestStringDescriptor::test__get__ tests/test_descriptors.py::TestStringDescriptor::test__set__ tests/test_descriptors.py::TestStringDescriptor::test_create tests/test_descriptors.py::TestIntegerDescriptor::test__get__ tests/test_descriptors.py::TestIntegerDescriptor::test__set__ tests/test_descriptors.py::TestIntegerDescriptor::test_create tests/test_descriptors.py::TestBooleanDescriptor::test__get__ tests/test_descriptors.py::TestBooleanDescriptor::test__set__ tests/test_descriptors.py::TestBooleanDescriptor::test_create tests/test_descriptors.py::TestEntityDescriptor::test__get__ tests/test_descriptors.py::TestEntityDescriptor::test__set__ tests/test_descriptors.py::TestEntityDescriptor::test_create tests/test_descriptors.py::TestEntityListDescriptor::test__get__ tests/test_descriptors.py::TestStringAttributeDescriptor::test__get__ tests/test_descriptors.py::TestStringAttributeDescriptor::test__set__ tests/test_descriptors.py::TestStringAttributeDescriptor::test_create tests/test_descriptors.py::TestStringListDescriptor::test__get__ tests/test_descriptors.py::TestStringListDescriptor::test__set__ tests/test_descriptors.py::TestStringDictionaryDescriptor::test__get__ tests/test_descriptors.py::TestStringDictionaryDescriptor::test__set__ tests/test_descriptors.py::TestUdfDictionary::test___delitem__ tests/test_descriptors.py::TestUdfDictionary::test___getitem__ tests/test_descriptors.py::TestUdfDictionary::test___iter__ tests/test_descriptors.py::TestUdfDictionary::test___setitem__ tests/test_descriptors.py::TestUdfDictionary::test___setitem__new tests/test_descriptors.py::TestUdfDictionary::test___setitem__unicode tests/test_descriptors.py::TestUdfDictionary::test_clear tests/test_descriptors.py::TestUdfDictionary::test_create tests/test_descriptors.py::TestUdfDictionary::test_create_with_nesting tests/test_descriptors.py::TestUdfDictionary::test_items tests/test_descriptors.py::TestPlacementDictionary::test___delitem__ tests/test_descriptors.py::TestPlacementDictionary::test___getitem__ tests/test_descriptors.py::TestPlacementDictionary::test___setitem__ tests/test_descriptors.py::TestPlacementDictionary::test___setitem__2 tests/test_descriptors.py::TestPlacementDictionary::test_clear tests/test_descriptors.py::TestSubTagDictionary::test___getitem__ tests/test_descriptors.py::TestSubTagDictionary::test___setitem__ tests/test_descriptors.py::TestSubTagDictionary::test___setitem__from_empty tests/test_descriptors.py::TestXmlElementAttributeDict::test___getitem__ tests/test_descriptors.py::TestXmlElementAttributeDict::test___setitem__ tests/test_descriptors.py::TestXmlElementAttributeDict::test__len__ tests/test_descriptors.py::TestXmlPooledInputDict::test___getitem__ tests/test_descriptors.py::TestXmlPooledInputDict::test___setitem1__ tests/test_descriptors.py::TestXmlPooledInputDict::test___setitem2__ tests/test_descriptors.py::TestEntityList::test___add__ tests/test_descriptors.py::TestEntityList::test__get__ tests/test_descriptors.py::TestEntityList::test__iadd__ tests/test_descriptors.py::TestEntityList::test_append tests/test_descriptors.py::TestEntityList::test_clear tests/test_descriptors.py::TestEntityList::test_insert tests/test_descriptors.py::TestEntityList::test_set tests/test_descriptors.py::TestEntityList::test_set_list tests/test_descriptors.py::TestInputOutputMapList::test___get__ tests/test_descriptors.py::TestInputOutputMapList::test_create tests/test_descriptors.py::TestExternalidList::test_append tests/test_descriptors.py::TestExternalidList::test_get tests/test_descriptors.py::TestXmlAttributeList::test_append tests/test_descriptors.py::TestXmlAttributeList::test_get tests/test_descriptors.py::TestXmlAttributeList::test_insert tests/test_descriptors.py::TestXmlReagentLabelList::test_append tests/test_descriptors.py::TestXmlReagentLabelList::test_get tests/test_descriptors.py::TestXmlAction::test_parse tests/test_descriptors.py::TestQueuedArtifactList::test_parse tests/test_descriptors.py::TestQueuedArtifactList::test_parse_multipage tests/test_descriptors.py::TestQueuedArtifactList::test_set
pyclarity_lims/descriptors.py
pyclarity_lims/descriptors.py