diff --git a/integration/integration-test.robot b/integration/integration-test.robot
index 5cca3e57e6a76e17dd51fd88fb196146d5997a67..3f792607bdf47fbabbf00b02365fa172fabeef7f 100644
--- a/integration/integration-test.robot
+++ b/integration/integration-test.robot
@@ -20,6 +20,7 @@ Setup ATDB and LDVSPEC
     Add Data Product    1    srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/1/L876420_SAP000_SB019_uv.MS_5840d22a.tar
     Add Data Product    5    srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/5/L876420_SAP000_SB019_uv.MS_5840d22b.tar
     Add Data Product    13   srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/13/L876420_SAP000_SB019_uv.MS_5840d22c.tar
+    Add Data Product    13   srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/13/L876420_SAP000_SB019_uv.MS_1234567b.tar
 
 *** Test Cases ***
 
@@ -30,7 +31,18 @@ Test create and submit a work specification
     ${id}=    Add Work Specification    5
     Submit Work Specification    ${id}
 
-    Check if Task Exists in ATDB    ldv-spec:${id}
+    ${count}=   Get Tasks Count In ATDB    ldv-spec:${id}
+    Should Be Equal As Integers    ${count}     1
+
+Test create work specification with auto-submit and 2 batches
+    [Tags]      Workspecification
+    Login to LDV Spec Admin Interface
+
+    ${id}=    Add Work Specification    13
+    Alter Work Specification Batches And Auto Submit    ${id}
+
+    ${count}=   Get Tasks Count In ATDB    ldv-spec:${id}
+    Should Be Equal As Integers    ${count}     2
 
 Test create a group with a few work specifications
     [Tags]      Workspecification
diff --git a/integration/local/test/keywords-tests.robot b/integration/local/test/keywords-tests.robot
index e34b0639219d3105180200e38507e1c940ea06ba..ca723d505755a61d64b90123dfba6ca90a9e2730 100644
--- a/integration/local/test/keywords-tests.robot
+++ b/integration/local/test/keywords-tests.robot
@@ -62,12 +62,25 @@ Submit Work Specification
     Submit Work Specification    1
     [Teardown]    Close Browser
 
-Check if Task Exists in ATDB
+Alter Work Specification Batches And Auto Submit
     [Tags]      Keyword
     [Documentation]     ***Description***
-    ...     Prerequisite: submission of work specification with ID 1 succeeded
+    ...     Altering work specification depends on a non-submitted work specification to be present.
+    ...     To ensure this, also a work specification is created in this test.
+    ...     The rules w.r.t. adding a work specification thus also apply here
+    Login to LDV Spec Admin Interface
+    ${id}=  Add Work Specification    1
+    Alter Work Specification Batches And Auto Submit    ${id}
+    [Teardown]    Close Browser
+
+Get Tasks Count in ATDB Should Equal One
+    [Tags]      Keyword
+    [Documentation]     ***Description***
+    ...     Prerequisite: submission of work specification with ID 1 succeeded.
+    ...     Note that checking for equality should specify the type (integers, numbers, strings).
     Login To ATDB Admin Interface
-    Check if Task Exists in ATDB    ldv-spec:1
+    ${count}=   Get Tasks Count In ATDB    ldv-spec:1
+    Should Be Equal As Integers    ${count}     1
     [Teardown]    Close Browser
 
 
diff --git a/integration/resource/keywords.robot b/integration/resource/keywords.robot
index c8a40bfd175d26270cb990649c5f03357b387cac..5e53bcb62b471407001e4fe610bc1fc43e69ee87 100644
--- a/integration/resource/keywords.robot
+++ b/integration/resource/keywords.robot
@@ -49,9 +49,20 @@ Add Work Specification
     Select From List By Value    //*[@data-test-id="workflow"]    https://example.com/workflow-1
     Input Text    //*[@data-test-id="obs_id"]    ${obs_id}
     Click Button    //*[@data-test-id="create-update"]
-    ${id}=    Get Text    (//a[@data-test-id="specification-id"])[1]
+    ${id}=    Get Text   (//div[@data-test-id="ungrouped"]/..//a[@data-test-id="specification-id"])[last()]
     RETURN    ${id}
 
+Alter Work Specification Batches And Auto Submit
+    [Arguments]    ${specification_id}
+    Go To   ${LDVSPEC}specification/update/${specification_id}/
+    Select Checkbox    //*[@data-test-id="auto-submit-checkbox"]
+    Checkbox Should Be Selected     //*[@data-test-id="auto-submit-checkbox"]
+    Input Text    //*[@data-test-id="batch-size-input"]   2
+    Click Button    //*[@data-test-id="create-update"]
+    Go To    ${LDVSPEC}specification/${specification_id}/
+    Element Should Contain    //*[@data-test-id="batch-size"]   2
+    Wait Until Element Contains    //*[@data-test-id="submission-status"]    Submitted    timeout=30s
+
 Add Data Product
     [Arguments]    ${obs_id}    ${uniqueSurl}
     Go To    ${LDVSPEC}admin/lofardata/dataproduct/add/
@@ -120,10 +131,12 @@ Login to ATDB Admin Interface
     Input Django Admin Password    admin
     Submit credentials
 
-Check if Task Exists in ATDB
+Get Tasks Count in ATDB
     [Arguments]    ${element}
     Open Browser to ATDB landing page
-    Page Should Contain    ${element}
+    ${count}=   Get Element Count     //*[text()[contains(.,'${element}')]]
+    RETURN  ${count}
+
 
 # Shared
 
diff --git a/ldvspec/lofardata/models.py b/ldvspec/lofardata/models.py
index 4ae2ace09240f082fd0176079390995ca5ef7c74..0d7bba8fea5cada776c4dfb27645fc028e683288 100644
--- a/ldvspec/lofardata/models.py
+++ b/ldvspec/lofardata/models.py
@@ -157,6 +157,12 @@ class WorkSpecification(models.Model):
         max_length=16, choices=PURGE_POLICY.choices, default=PURGE_POLICY.NO
     )
 
+    __original_submission_status = None
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.__original_submission_status = self.submission_status
+
     def created_by_display_value(self):
         if self.created_by is None:
             return "Unknown"
@@ -206,6 +212,16 @@ class WorkSpecification(models.Model):
         total_size, number_of_files, average_file_size = inputs_processor.compute_size_of_inputs(self.inputs)
         return total_size, number_of_files, average_file_size
 
+    @property
+    def did_submission_status_change(self):
+        return self.submission_status != self.__original_submission_status
+
+    @property
+    def should_auto_submit(self):
+        is_ready = self.submission_status == SUBMISSION_STATUS.READY
+        contains_files = self.get_file_info[1] > 0
+        return is_ready and contains_files and self.is_auto_submit
+
     def __str__(self):
         return str(self.id) + ' - ' + str(self.filters) + " (" + str(self.created_on) + ")"
 
@@ -228,9 +244,14 @@ class WorkSpecification(models.Model):
             using=using,
             update_fields=update_fields,
         )
+        if self.should_auto_submit:
+            from lofardata.task.tasks import insert_task_into_atdb
+            insert_task_into_atdb.delay(self.pk)
+
         if self.async_task_result is None:
             from lofardata.task.tasks import define_work_specification
 
             res: AsyncResult = define_work_specification.delay(self.pk)
             self.async_task_result = res.id
+
             super(WorkSpecification, self).save(update_fields=["async_task_result"])
diff --git a/ldvspec/lofardata/templates/lofardata/workspecification/create_update.html b/ldvspec/lofardata/templates/lofardata/workspecification/create_update.html
index e12f3b4b03258173b4abe0df39a9d0153c13d2a9..a6f689b973f095bcdba9b070bc021c0d1d542396 100644
--- a/ldvspec/lofardata/templates/lofardata/workspecification/create_update.html
+++ b/ldvspec/lofardata/templates/lofardata/workspecification/create_update.html
@@ -127,11 +127,11 @@
                                     <a class="tooltip-dias tooltip-dias-right custom--tooltip"
                                        data-tooltip="{{ form.batch_size.help_text }}">m</a>
                                 </div>
-                                {% render_field form.batch_size class="input input--select custom__input--fixed-width margin-left margin-bottom" type="number" %}
+                                {% render_field form.batch_size class="input input--select custom__input--fixed-width margin-left margin-bottom" type="number" data-test-id='batch-size-input' %}
                             </div>
 
                             <div class="flex-wrapper flex-wrapper--row" id="div_id_auto_submit">
-                                {% render_field form.is_auto_submit class="input custom--checkbox margin-top" type="checkbox" %}
+                                {% render_field form.is_auto_submit class="input custom--checkbox margin-top" type="checkbox" data-test-id='auto-submit-checkbox' %}
                                 <label class="input__label">{{ form.is_auto_submit.label }}</label>
                                 <a class="tooltip-dias tooltip-dias-right custom--tooltip"
                                    data-tooltip="{{ form.is_auto_submit.help_text }}">m</a>
diff --git a/ldvspec/lofardata/templates/lofardata/workspecification/detail.html b/ldvspec/lofardata/templates/lofardata/workspecification/detail.html
index 5f90ab1581d7c4c3e29defb8500d151c8e31ab68..5d58d00653735e0f00fb529bdc03766fcf25e5f1 100644
--- a/ldvspec/lofardata/templates/lofardata/workspecification/detail.html
+++ b/ldvspec/lofardata/templates/lofardata/workspecification/detail.html
@@ -206,11 +206,13 @@
 
                                     <div class="table__row table__row--dark table__row--padding">
                                         <div class="table__cell table__cell--title">Files per task</div>
-                                        {% if object.batch_size == 0 %}
-                                            <div class="table__cell">{{ number_of_files }}</div>
-                                        {% else %}
-                                            <div class="table__cell">{{ object.batch_size }}</div>
-                                        {% endif %}
+                                        <div class="table__cell" data-test-id="batch-size">
+                                            {% if object.batch_size == 0 %}
+                                                {{ number_of_files }}
+                                            {% else %}
+                                                {{ object.batch_size }}
+                                            {% endif %}
+                                        </div>
                                     </div>
 
                                     <div class="table__row table__row--dark table__row--padding">
diff --git a/ldvspec/lofardata/tests/test_workspecification_properties.py b/ldvspec/lofardata/tests/test_workspecification_properties.py
new file mode 100644
index 0000000000000000000000000000000000000000..214d0bf579c98c1118b374fecd0c19516a9185cd
--- /dev/null
+++ b/ldvspec/lofardata/tests/test_workspecification_properties.py
@@ -0,0 +1,53 @@
+import unittest
+
+from lofardata.models import WorkSpecification, SUBMISSION_STATUS
+
+
+class WorkSpecificationShouldAutoSubmit(unittest.TestCase):
+    @unittest.mock.patch('lofardata.models.WorkSpecification.get_file_info')
+    def test_submission_status_ready_auto_submit_with_files(self, mock_file_info):
+        mock_file_info.__get__ = unittest.mock.Mock(return_value=[10, 10, 10])
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY,
+                                      is_auto_submit=True)
+        self.assertTrue(work_spec.should_auto_submit)
+
+    def test_submission_status_loading(self):
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.LOADING)
+        self.assertFalse(work_spec.should_auto_submit)
+
+    def test_submission_status_ready_no_auto_submit(self):
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY)
+        self.assertFalse(work_spec.should_auto_submit)
+
+    def test_submission_status_ready_auto_submit_no_files(self):
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY,
+                                      is_auto_submit=True)
+        self.assertFalse(work_spec.should_auto_submit)
+
+    def test_submission_status_defining(self):
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.DEFINING)
+        self.assertFalse(work_spec.should_auto_submit)
+
+    def test_submission_status_submitted(self):
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.SUBMITTED)
+        self.assertFalse(work_spec.should_auto_submit)
+
+    def test_submission_status_error(self):
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.ERROR)
+        self.assertFalse(work_spec.should_auto_submit)
+
+
+class WorkSpecificationDidSubmissionStatusChange(unittest.TestCase):
+    def test_change(self):
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY)
+        work_spec.submission_status = SUBMISSION_STATUS.LOADING
+        self.assertTrue(work_spec.did_submission_status_change)
+
+    def test_no_change(self):
+        work_spec = WorkSpecification()
+        self.assertFalse(work_spec.did_submission_status_change)
+
+    def test_no_change_with_setters(self):
+        work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY)
+        work_spec.submission_status = SUBMISSION_STATUS.READY
+        self.assertFalse(work_spec.did_submission_status_change)