diff --git a/SAS/TMSS/src/tmss/settings.py b/SAS/TMSS/src/tmss/settings.py
index 5147510dbd5fa67b636ae40e38aa442160bf242a..12df0bce00548cfc02dd5e7122dbdc1403ac11c4 100644
--- a/SAS/TMSS/src/tmss/settings.py
+++ b/SAS/TMSS/src/tmss/settings.py
@@ -286,22 +286,27 @@ AUTH_PASSWORD_VALIDATORS = [
 # https://docs.djangoproject.com/en/2.0/topics/i18n/
 
 LANGUAGE_CODE = 'en-us'
-
 TIME_ZONE = 'UTC'
-
 USE_I18N = True
-
 USE_L10N = True
-
 USE_TZ = False  # We don't want timezone support since everything is UTC anyway and this caused trouble in the past
 
 
 # Static files (CSS, JavaScript, Images)
 # https://docs.djangoproject.com/en/2.0/howto/static-files/
-
 STATIC_URL = '/static/'
 
 
 # Setup support for proxy headers
 USE_X_FORWARDED_HOST = True
 SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
+
+SWAGGER_SETTINGS = {
+
+    'SECURITY_DEFINITIONS': {
+        'basic': {
+            'type': 'basic'
+        }
+    },
+
+}
\ No newline at end of file
diff --git a/SAS/TMSS/src/tmss/tmssapp/migrations/0001_initial.py b/SAS/TMSS/src/tmss/tmssapp/migrations/0001_initial.py
index eacc7a839abe6e06dcff9f37faeab3285a44ede8..8eab06922cb36a7f1463c46cad4d76f3d4fb7b7f 100644
--- a/SAS/TMSS/src/tmss/tmssapp/migrations/0001_initial.py
+++ b/SAS/TMSS/src/tmss/tmssapp/migrations/0001_initial.py
@@ -376,7 +376,7 @@ class Migration(migrations.Migration):
             },
         ),
         migrations.CreateModel(
-            name='TaskConnectors',
+            name='TaskConnector',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('tags', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=128), blank=True, default=list, help_text='User-defined search keywords for object.', size=8)),
@@ -450,8 +450,8 @@ class Migration(migrations.Migration):
                 ('selection_doc', django.contrib.postgres.fields.jsonb.JSONField(help_text='Filter for selecting dataproducts from the output role.')),
                 ('consumer', models.ForeignKey(help_text='Task Draft that has the input connector.', on_delete=django.db.models.deletion.CASCADE, related_name='consumed_by', to='tmssapp.TaskDraft')),
                 ('dataformat', models.ForeignKey(help_text='Selected data format to use. One of (MS, HDF5).', on_delete=django.db.models.deletion.PROTECT, to='tmssapp.Dataformat')),
-                ('input', models.ForeignKey(help_text='Input connector of consumer.', on_delete=django.db.models.deletion.CASCADE, related_name='inputs_task_relation_draft', to='tmssapp.TaskConnectors')),
-                ('output', models.ForeignKey(help_text='Output connector of producer.', on_delete=django.db.models.deletion.CASCADE, related_name='outputs_task_relation_draft', to='tmssapp.TaskConnectors')),
+                ('input', models.ForeignKey(help_text='Input connector of consumer.', on_delete=django.db.models.deletion.CASCADE, related_name='inputs_task_relation_draft', to='tmssapp.TaskConnector')),
+                ('output', models.ForeignKey(help_text='Output connector of producer.', on_delete=django.db.models.deletion.CASCADE, related_name='outputs_task_relation_draft', to='tmssapp.TaskConnector')),
                 ('producer', models.ForeignKey(help_text='Task Draft that has the output connector. NOTE: The producer does typically, but not necessarily, belong to the same Scheduling Unit (or even the same Project) as the consumer.', on_delete=django.db.models.deletion.CASCADE, related_name='produced_by', to='tmssapp.TaskDraft')),
                 ('selection_template', models.ForeignKey(help_text='Schema used for selection_doc.', on_delete=django.db.models.deletion.CASCADE, to='tmssapp.WorkRelationSelectionTemplate')),
             ],
@@ -470,8 +470,8 @@ class Migration(migrations.Migration):
                 ('consumer', models.ForeignKey(help_text='Task Blueprint that has the input connector.', on_delete=django.db.models.deletion.CASCADE, related_name='consumed_by', to='tmssapp.TaskBlueprint')),
                 ('dataformat', models.ForeignKey(help_text='Selected data format to use.', on_delete=django.db.models.deletion.PROTECT, to='tmssapp.Dataformat')),
                 ('draft', models.ForeignKey(help_text='Task Relation Draft which this work request instantiates.', on_delete=django.db.models.deletion.CASCADE, related_name='related_task_relation_blueprint', to='tmssapp.TaskRelationDraft')),
-                ('input', models.ForeignKey(help_text='Input connector of consumer.', on_delete=django.db.models.deletion.CASCADE, related_name='inputs_task_relation_blueprint', to='tmssapp.TaskConnectors')),
-                ('output', models.ForeignKey(help_text='Output connector of producer.', on_delete=django.db.models.deletion.CASCADE, related_name='outputs_task_relation_blueprint', to='tmssapp.TaskConnectors')),
+                ('input', models.ForeignKey(help_text='Input connector of consumer.', on_delete=django.db.models.deletion.CASCADE, related_name='inputs_task_relation_blueprint', to='tmssapp.TaskConnector')),
+                ('output', models.ForeignKey(help_text='Output connector of producer.', on_delete=django.db.models.deletion.CASCADE, related_name='outputs_task_relation_blueprint', to='tmssapp.TaskConnector')),
                 ('producer', models.ForeignKey(help_text='Task Blueprint that has the output connector.', on_delete=django.db.models.deletion.CASCADE, related_name='produced_by', to='tmssapp.TaskBlueprint')),
                 ('selection_template', models.ForeignKey(help_text='Schema used for selection_doc.', on_delete=django.db.models.deletion.CASCADE, to='tmssapp.WorkRelationSelectionTemplate')),
             ],
@@ -485,17 +485,17 @@ class Migration(migrations.Migration):
             field=models.ForeignKey(help_text='Schema used for requirements_doc.', on_delete=django.db.models.deletion.CASCADE, to='tmssapp.TaskTemplate'),
         ),
         migrations.AddField(
-            model_name='taskconnectors',
+            model_name='taskconnector',
             name='input_of',
             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='inputs', to='tmssapp.TaskTemplate'),
         ),
         migrations.AddField(
-            model_name='taskconnectors',
+            model_name='taskconnector',
             name='output_of',
             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='outputs', to='tmssapp.TaskTemplate'),
         ),
         migrations.AddField(
-            model_name='taskconnectors',
+            model_name='taskconnector',
             name='role',
             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='tmssapp.Role'),
         ),
@@ -858,7 +858,7 @@ class Migration(migrations.Migration):
             index=django.contrib.postgres.indexes.GinIndex(fields=['tags'], name='tmssapp_tas_tags_256437_gin'),
         ),
         migrations.AddIndex(
-            model_name='taskconnectors',
+            model_name='taskconnector',
             index=django.contrib.postgres.indexes.GinIndex(fields=['tags'], name='tmssapp_tas_tags_0ebd6d_gin'),
         ),
         migrations.AddIndex(
diff --git a/SAS/TMSS/src/tmss/tmssapp/models/specification.py b/SAS/TMSS/src/tmss/tmssapp/models/specification.py
index 6dd29ad59246cb26fc7b44fa87baed01897ffc4c..01bdd7960e8264415f98014eb0ca4e2eecdebc93 100644
--- a/SAS/TMSS/src/tmss/tmssapp/models/specification.py
+++ b/SAS/TMSS/src/tmss/tmssapp/models/specification.py
@@ -89,7 +89,7 @@ class AbstractChoice(Model):
 
 
 class Role(AbstractChoice):
-    """Defines the model and predefined list of possible Role's for TaskConnectors.
+    """Defines the model and predefined list of possible Role's for TaskConnector.
     The items in the Choises class below are automagically populated into the database via a data migration."""
     class Choices(Enum):
         CORRELATOR = "correlator"
@@ -102,7 +102,7 @@ class Role(AbstractChoice):
 
 
 class Datatype(AbstractChoice):
-    """Defines the model and predefined list of possible Datatype's for TaskConnectors.
+    """Defines the model and predefined list of possible Datatype's for TaskConnector.
     The items in the Choises class below are automagically populated into the database via a data migration."""
     class Choices(Enum):
         VISIBILITIES = "visibilities"
@@ -130,7 +130,7 @@ class CopyReason(AbstractChoice):
 
 # concrete models
 
-class TaskConnectors(BasicCommon):
+class TaskConnector(BasicCommon):
     role = ForeignKey('Role', null=False, on_delete=PROTECT)
     datatype = ForeignKey('Datatype', null=False, on_delete=PROTECT)
     dataformats = ManyToManyField('Dataformat', blank=True)
@@ -297,8 +297,8 @@ class TaskRelationDraft(BasicCommon):
     dataformat = ForeignKey('Dataformat', null=False, on_delete=PROTECT, help_text='Selected data format to use. One of (MS, HDF5).')
     producer = ForeignKey('TaskDraft', related_name='produced_by', on_delete=CASCADE, help_text='Task Draft that has the output connector. NOTE: The producer does typically, but not necessarily, belong to the same Scheduling Unit (or even the same Project) as the consumer.')
     consumer = ForeignKey('TaskDraft', related_name='consumed_by', on_delete=CASCADE, help_text='Task Draft that has the input connector.')
-    input = ForeignKey('TaskConnectors', related_name='inputs_task_relation_draft', on_delete=CASCADE, help_text='Input connector of consumer.')
-    output = ForeignKey('TaskConnectors', related_name='outputs_task_relation_draft', on_delete=CASCADE, help_text='Output connector of producer.')
+    input = ForeignKey('TaskConnector', related_name='inputs_task_relation_draft', on_delete=CASCADE, help_text='Input connector of consumer.')
+    output = ForeignKey('TaskConnector', related_name='outputs_task_relation_draft', on_delete=CASCADE, help_text='Output connector of producer.')
     selection_template = ForeignKey('WorkRelationSelectionTemplate', on_delete=CASCADE, help_text='Schema used for selection_doc.') # todo: 'schema'?
 
     def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
@@ -313,8 +313,8 @@ class TaskRelationBlueprint(BasicCommon):
     dataformat = ForeignKey('Dataformat', null=False, on_delete=PROTECT, help_text='Selected data format to use.')
     producer = ForeignKey('TaskBlueprint', related_name='produced_by', on_delete=CASCADE, help_text='Task Blueprint that has the output connector.')
     consumer = ForeignKey('TaskBlueprint', related_name='consumed_by', on_delete=CASCADE, help_text='Task Blueprint that has the input connector.')
-    input = ForeignKey('TaskConnectors', related_name='inputs_task_relation_blueprint', on_delete=CASCADE, help_text='Input connector of consumer.')
-    output = ForeignKey('TaskConnectors', related_name='outputs_task_relation_blueprint', on_delete=CASCADE, help_text='Output connector of producer.')
+    input = ForeignKey('TaskConnector', related_name='inputs_task_relation_blueprint', on_delete=CASCADE, help_text='Input connector of consumer.')
+    output = ForeignKey('TaskConnector', related_name='outputs_task_relation_blueprint', on_delete=CASCADE, help_text='Output connector of producer.')
     draft = ForeignKey('TaskRelationDraft', on_delete=CASCADE, related_name='related_task_relation_blueprint', help_text='Task Relation Draft which this work request instantiates.')
     selection_template = ForeignKey('WorkRelationSelectionTemplate', on_delete=CASCADE, help_text='Schema used for selection_doc.')  # todo: 'schema'?
 
diff --git a/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py b/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py
index e241bb9d02ffd4c9230fa78a454fe842f84fe264..7535bad2261bb573b8df0b4aab92e262c296f810 100644
--- a/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py
+++ b/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py
@@ -105,9 +105,9 @@ class CopyReasonSerializer(serializers.ModelSerializer):
 
         
 
-class TaskConnectorsSerializer(serializers.HyperlinkedModelSerializer):
+class TaskConnectorSerializer(serializers.HyperlinkedModelSerializer):
     class Meta:
-        model = models.TaskConnectors
+        model = models.TaskConnector
         fields = '__all__'
 
 
diff --git a/SAS/TMSS/src/tmss/tmssapp/viewsets/scheduling.py b/SAS/TMSS/src/tmss/tmssapp/viewsets/scheduling.py
index edc9ab43d276c032739d4764e663f84d1eb0f264..8a94006668be0cdc1209348dd79f303a8089939f 100644
--- a/SAS/TMSS/src/tmss/tmssapp/viewsets/scheduling.py
+++ b/SAS/TMSS/src/tmss/tmssapp/viewsets/scheduling.py
@@ -11,7 +11,7 @@ from django_filters import rest_framework as filters
 from lofar.sas.tmss.tmss.tmssapp.models.scheduling import Subtask
 # Don't use Ordering class from the django_filters but use rest_framework instead !!
 from rest_framework.filters import OrderingFilter
-
+from drf_yasg import openapi
 
 class subTaskFilter(filters.FilterSet):
     class Meta:
@@ -223,9 +223,12 @@ class SubtaskViewSetJSONeditorOnline(LOFARViewSet):
          else:
              return models.Subtask.objects.all()
 
+#content:'text/plain; charset=utf-8'}
+     #reponse_200 = openapi.Response('A LOFAR parset for this subtask (as plain text, not json', schema=openapi.Schema(type=openapi.TYPE_STRING))
      @swagger_auto_schema(responses={200: 'A LOFAR parset for this subtask (as plain text, not json)',
                                      403: 'forbidden',
                                      404: 'Not found'},
+                          #produces='text/plain',
                           operation_description="Get a LOFAR parset for the specifications of this subtask")
      @action(methods=['get'], detail=True)
      def parset(self, request, pk=None):
diff --git a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py
index 16f25c43c2a58715bfba2ed1fc87ac401db3a410..f46858de037bff9221cc805fcbd9c9fc08b5d1ec 100644
--- a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py
+++ b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py
@@ -104,9 +104,9 @@ class ResourceUnitViewSet(LOFARViewSet):
     queryset = models.ResourceUnit.objects.all()
     serializer_class = serializers.ResourceUnitSerializer
     
-class TaskConnectorsViewSet(LOFARViewSet):
-    queryset = models.TaskConnectors.objects.all()
-    serializer_class = serializers.TaskConnectorsSerializer
+class TaskConnectorViewSet(LOFARViewSet):
+    queryset = models.TaskConnector.objects.all()
+    serializer_class = serializers.TaskConnectorSerializer
 
 
 @permission_classes((DjangoModelPermissions,))   # example override of default permissions per viewset | todo: review for production
diff --git a/SAS/TMSS/src/tmss/urls.py b/SAS/TMSS/src/tmss/urls.py
index 8bee6c119edb7f2ebb235431de3b873d51ae39bc..78905d967b0b0665193a5a6df2e89635f1cbc9db 100644
--- a/SAS/TMSS/src/tmss/urls.py
+++ b/SAS/TMSS/src/tmss/urls.py
@@ -42,8 +42,9 @@ swagger_schema_view = get_schema_view(
       license=openapi.License(name="GPL License v3"),
    ),
    validators=['flex', 'ssv'],
-   public=True,
-   permission_classes=(permissions.AllowAny,),
+   public=False,
+  # public=True,
+  # permission_classes=(permissions.AllowAny,),
 )
 
 urlpatterns = [
@@ -76,7 +77,7 @@ router.register(r'generator_template', viewsets.GeneratorTemplateViewSet)
 router.register(r'scheduling_unit_template', viewsets.SchedulingUnitTemplateViewSet)
 router.register(r'task_template', viewsets.TaskTemplateViewSet)
 router.register(r'work_relation_selection_template', viewsets.WorkRelationSelectionTemplateViewSet)
-router.register(r'task_connectors', viewsets.TaskConnectorsViewSet)
+router.register(r'task_connector', viewsets.TaskConnectorViewSet)
 router.register(r'default_generator_template', viewsets.DefaultGeneratorTemplateViewSet)
 router.register(r'default_scheduling_unit_template', viewsets.DefaultSchedulingUnitTemplateViewSet)
 router.register(r'default_task_template', viewsets.DefaultTaskTemplateViewSet)
@@ -98,16 +99,16 @@ router.register(r'task_relation_draft', viewsets.TaskRelationDraftViewSet)
 router.register(r'task_relation_blueprint', viewsets.TaskRelationBlueprintViewSet)
 
 # nested
-router.register(r'cycle/(?P<cycle_pk>[\w\-]+)/project', viewsets.ProjectViewSet)
-router.register(r'scheduling_set/(?P<scheduling_set_pk>\d+)/scheduling_unit_draft', viewsets.SchedulingUnitDraftViewSet)
-router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_pk>\d+)/scheduling_unit_blueprint', viewsets.SchedulingUnitBlueprintViewSet)
-#router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_pk>\d+)/task_draft', viewsets.TaskDraftViewSet) # todo: default view, re-activate or remove the JSON editor one in bottom
-router.register(r'task_draft/(?P<task_draft_pk>\d+)/task_blueprint', viewsets.TaskBlueprintViewSet)
-router.register(r'task_draft/(?P<task_draft_pk>\d+)/task_relation_draft', viewsets.TaskRelationDraftViewSet)
-router.register(r'task_relation_draft/(?P<task_relation_draft_pk>\d+)/task_relation_blueprint', viewsets.TaskRelationBlueprintViewSet)
-router.register(r'task_blueprint/(?P<task_blueprint_pk>\d+)/task_relation_blueprint', viewsets.TaskRelationBlueprintViewSet)
-router.register(r'task_blueprint/(?P<task_blueprint_pk>\d+)/subtask', viewsets.SubtaskViewSet)
-router.register(r'subtask/(?P<subtask_pk>[\w\-]+)/state_log', viewsets.SubtaskStateLogViewSet)
+router.register(r'cycle/(?P<cycle_id>[\w\-]+)/project', viewsets.ProjectViewSet)
+router.register(r'scheduling_set/(?P<scheduling_set_id>\d+)/scheduling_unit_draft', viewsets.SchedulingUnitDraftViewSet)
+router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_id>\d+)/scheduling_unit_blueprint', viewsets.SchedulingUnitBlueprintViewSet)
+#router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_id>\d+)/task_draft', viewsets.TaskDraftViewSet) # todo: default view, re-activate or remove the JSON editor one in bottom
+router.register(r'task_draft/(?P<task_draft_id>\d+)/task_blueprint', viewsets.TaskBlueprintViewSet)
+router.register(r'task_draft/(?P<task_draft_id>\d+)/task_relation_draft', viewsets.TaskRelationDraftViewSet)
+router.register(r'task_relation_draft/(?P<task_relation_draft_id>\d+)/task_relation_blueprint', viewsets.TaskRelationBlueprintViewSet)
+router.register(r'task_blueprint/(?P<task_blueprint_id>\d+)/task_relation_blueprint', viewsets.TaskRelationBlueprintViewSet)
+router.register(r'task_blueprint/(?P<task_blueprint_id>\d+)/subtask', viewsets.SubtaskViewSet)
+router.register(r'subtask/(?P<subtask_id>[\w\-]+)/state_log', viewsets.SubtaskStateLogViewSet)
 
 # SCHEDULING
 
@@ -146,7 +147,7 @@ router.register(r'user', viewsets.UserViewSet)
 
 # JSON
 router.register(r'task_draft', viewsets.TaskDraftViewSetJSONeditorOnline)
-router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_pk>\d+)/task_draft', viewsets.TaskDraftViewSetJSONeditorOnline)
+router.register(r'scheduling_unit_draft/(?P<scheduling_unit_draft_id>\d+)/task_draft', viewsets.TaskDraftViewSetJSONeditorOnline)
 router.register(r'subtask', viewsets.SubtaskViewSetJSONeditorOnline)
 
 urlpatterns.extend(router.urls)
diff --git a/SAS/TMSS/test/t_tmssapp_specification_REST_API.py b/SAS/TMSS/test/t_tmssapp_specification_REST_API.py
index 8c51bdb7dd7f74966b898f36b02ab94f3eee33b1..b5d61be388cea5bc1baf58b4e32125ab9007139f 100755
--- a/SAS/TMSS/test/t_tmssapp_specification_REST_API.py
+++ b/SAS/TMSS/test/t_tmssapp_specification_REST_API.py
@@ -319,87 +319,87 @@ class WorkRelationSelectionTemplateTestCase(unittest.TestCase):
         GET_OK_and_assert_equal_expected_response(self, BASE_URL + '/work_relation_selection_template/' + str(id2), test_data_2)
 
 
-class TaskConnectorsTestCase(unittest.TestCase):
+class TaskConnectorTestCase(unittest.TestCase):
     @classmethod
     def setUpClass(cls) -> None:
         cls.input_of_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskTemplate(), '/task_template/')
         cls.output_of_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskTemplate(), '/task_template/')
 
-    def test_task_connectors_list_apiformat(self):
-        r = requests.get(BASE_URL + '/task_connectors/?format=api', auth=AUTH)
+    def test_task_connector_list_apiformat(self):
+        r = requests.get(BASE_URL + '/task_connector/?format=api', auth=AUTH)
         self.assertEqual(r.status_code, 200)
         self.assertTrue("Task Connectors List" in r.content.decode('utf8'))
 
-    def test_task_connectors_GET_nonexistant_raises_error(self):
-        GET_and_assert_equal_expected_code(self, BASE_URL + '/task_connectors/1234321/', 404)
+    def test_task_connector_GET_nonexistant_raises_error(self):
+        GET_and_assert_equal_expected_code(self, BASE_URL + '/task_connector/1234321/', 404)
 
-    def test_task_connectors_POST_and_GET(self):
-        tc_test_data = test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url)
+    def test_task_connector_POST_and_GET(self):
+        tc_test_data = test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url)
         # POST and GET a new item and assert correctness
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', tc_test_data, 201, tc_test_data)
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', tc_test_data, 201, tc_test_data)
         url = r_dict['url']
         GET_OK_and_assert_equal_expected_response(self, url, tc_test_data)
 
-    def test_task_connectors_POST_invalid_role_raises_error(self):
+    def test_task_connector_POST_invalid_role_raises_error(self):
 
         # POST a new item with invalid choice
-        test_data_invalid_role = dict(test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
+        test_data_invalid_role = dict(test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
         test_data_invalid_role['role'] = BASE_URL + '/role/forbidden/'
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', test_data_invalid_role, 400, {})
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', test_data_invalid_role, 400, {})
         self.assertTrue('Invalid hyperlink' in str(r_dict['role']))
 
-    def test_task_connectors_POST_invalid_datatype_raises_error(self):
+    def test_task_connector_POST_invalid_datatype_raises_error(self):
 
         # POST a new item with invalid choice
-        test_data_invalid = dict(test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
+        test_data_invalid = dict(test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
         test_data_invalid['datatype'] = BASE_URL + '/datatype/forbidden/'
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', test_data_invalid, 400, {})
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', test_data_invalid, 400, {})
         self.assertTrue('Invalid hyperlink' in str(r_dict['datatype']))
 
-    def test_task_connectors_POST_invalid_dataformats_raises_error(self):
+    def test_task_connector_POST_invalid_dataformats_raises_error(self):
 
         # POST a new item with invalid choice
-        test_data_invalid = dict(test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
+        test_data_invalid = dict(test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
         test_data_invalid['dataformats'] = [BASE_URL + '/dataformat/forbidden/']
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', test_data_invalid, 400, {})
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', test_data_invalid, 400, {})
         self.assertTrue('Invalid hyperlink' in str(r_dict['dataformats']))
 
-    def test_task_connectors_POST_nonexistant_input_of_raises_error(self):
+    def test_task_connector_POST_nonexistant_input_of_raises_error(self):
 
         # POST a new item with wrong reference
-        test_data_invalid = dict(test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
+        test_data_invalid = dict(test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
         test_data_invalid['input_of'] = BASE_URL + "/task_template/6353748/"
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', test_data_invalid, 400, {})
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', test_data_invalid, 400, {})
         self.assertTrue('Invalid hyperlink' in str(r_dict['input_of']))
 
-    def test_task_connectors_POST_nonexistant_output_of_raises_error(self):
+    def test_task_connector_POST_nonexistant_output_of_raises_error(self):
 
         # POST a new item with wrong reference
-        test_data_invalid = dict(test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
+        test_data_invalid = dict(test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
         test_data_invalid['output_of'] = BASE_URL + "/task_template/6353748/"
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', test_data_invalid, 400, {})
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', test_data_invalid, 400, {})
         self.assertTrue('Invalid hyperlink' in str(r_dict['output_of']))
 
-    def test_task_connectors_POST_existing_outputs_works(self):
+    def test_task_connector_POST_existing_outputs_works(self):
 
         # First POST a new item to reference
         r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_template/', test_data_creator.TaskTemplate(), 201, test_data_creator.TaskTemplate())
         url = r_dict['url']
 
         # POST a new item with correct reference
-        test_data_valid = dict(test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
+        test_data_valid = dict(test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url))
         test_data_valid['output_of'] = url
-        POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', test_data_valid, 201, test_data_valid)
+        POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', test_data_valid, 201, test_data_valid)
 
-    def test_task_connectors_PUT_nonexistant_raises_error(self):
-        PUT_and_assert_expected_response(self, BASE_URL + '/task_connectors/9876789876/', test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url), 404, {})
+    def test_task_connector_PUT_nonexistant_raises_error(self):
+        PUT_and_assert_expected_response(self, BASE_URL + '/task_connector/9876789876/', test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url), 404, {})
 
-    def test_task_connectors_PUT(self):
-        tc_test_data1 = test_data_creator.TaskConnectors(role="correlator", input_of_url=self.input_of_url, output_of_url=self.output_of_url)
-        tc_test_data2 = test_data_creator.TaskConnectors(role="beamformer", input_of_url=self.input_of_url, output_of_url=self.output_of_url)
+    def test_task_connector_PUT(self):
+        tc_test_data1 = test_data_creator.TaskConnector(role="correlator", input_of_url=self.input_of_url, output_of_url=self.output_of_url)
+        tc_test_data2 = test_data_creator.TaskConnector(role="beamformer", input_of_url=self.input_of_url, output_of_url=self.output_of_url)
 
         # POST new item, verify
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', tc_test_data1, 201, tc_test_data1)
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', tc_test_data1, 201, tc_test_data1)
         url = r_dict['url']
         GET_OK_and_assert_equal_expected_response(self, url, tc_test_data1)
 
@@ -407,11 +407,11 @@ class TaskConnectorsTestCase(unittest.TestCase):
         PUT_and_assert_expected_response(self, url, tc_test_data2, 200, tc_test_data2)
         GET_OK_and_assert_equal_expected_response(self, url, tc_test_data2)
 
-    def test_task_connectors_PATCH(self):
-        tc_test_data = test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url)
+    def test_task_connector_PATCH(self):
+        tc_test_data = test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url)
 
         # POST new item, verify
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', tc_test_data, 201, tc_test_data)
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', tc_test_data, 201, tc_test_data)
         url = r_dict['url']
         GET_OK_and_assert_equal_expected_response(self, url, tc_test_data)
 
@@ -425,11 +425,11 @@ class TaskConnectorsTestCase(unittest.TestCase):
         expected_data.update(test_patch)
         GET_OK_and_assert_equal_expected_response(self, url, expected_data)
 
-    def test_task_connectors_DELETE(self):
-        tc_test_data = test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=self.output_of_url)
+    def test_task_connector_DELETE(self):
+        tc_test_data = test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=self.output_of_url)
 
         # POST new item, verify
-        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', tc_test_data, 201, tc_test_data)
+        r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', tc_test_data, 201, tc_test_data)
         url = r_dict['url']
         GET_OK_and_assert_equal_expected_response(self, url, tc_test_data)
 
@@ -438,9 +438,9 @@ class TaskConnectorsTestCase(unittest.TestCase):
 
     def test_task_relation_blueprint_CASCADE_behavior_on_inputs_template_deleted(self):
         input_of_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskTemplate(), '/task_template/')
-        tc_test_data = test_data_creator.TaskConnectors(input_of_url=input_of_url, output_of_url=self.output_of_url)
+        tc_test_data = test_data_creator.TaskConnector(input_of_url=input_of_url, output_of_url=self.output_of_url)
         # POST new item
-        url = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', tc_test_data, 201, tc_test_data)['url']
+        url = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', tc_test_data, 201, tc_test_data)['url']
         # verify
         GET_OK_and_assert_equal_expected_response(self, url, tc_test_data)
         # DELETE dependency
@@ -450,9 +450,9 @@ class TaskConnectorsTestCase(unittest.TestCase):
 
     def test_task_relation_blueprint_CASCADE_behavior_on_outputs_template_deleted(self):
         output_of_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskTemplate(), '/task_template/')
-        tc_test_data = test_data_creator.TaskConnectors(input_of_url=self.input_of_url, output_of_url=output_of_url)
+        tc_test_data = test_data_creator.TaskConnector(input_of_url=self.input_of_url, output_of_url=output_of_url)
         # POST new item
-        url = POST_and_assert_expected_response(self, BASE_URL + '/task_connectors/', tc_test_data, 201, tc_test_data)['url']
+        url = POST_and_assert_expected_response(self, BASE_URL + '/task_connector/', tc_test_data, 201, tc_test_data)['url']
         # verify
         GET_OK_and_assert_equal_expected_response(self, url, tc_test_data)
         # DELETE dependency
@@ -460,14 +460,13 @@ class TaskConnectorsTestCase(unittest.TestCase):
         # assert
         GET_and_assert_equal_expected_code(self, url, 404)
 
-    def test_GET_task_connectors_view_returns_correct_entry(self):
+    def test_GET_task_connector_view_returns_correct_entry(self):
 
-        test_data_1 = TaskConnectors_test_data()
-        test_data_2 = TaskConnectors_test_data()
-        id1 = models.TaskConnectors.objects.create(**test_data_1).id
-        id2 = models.TaskConnectors.objects.create(**test_data_2).id
-        GET_OK_and_assert_equal_expected_response(self, BASE_URL + '/task_connectors/' + str(id1), test_data_1)
-        GET_OK_and_assert_equal_expected_response(self, BASE_URL + '/task_connectors/' + str(id2), test_data_2)
+        test_data_1 = TaskConnector_test_data()
+        test_data_2 = TaskConnector_test_data()
+        id2 = models.TaskConnector.objects.create(**test_data_2).id
+        GET_OK_and_assert_equal_expected_response(self, BASE_URL + '/task_connector/' + str(id1), test_data_1)
+        GET_OK_and_assert_equal_expected_response(self, BASE_URL + '/task_connector/' + str(id2), test_data_2)
 
 
 class DefaultTemplates(unittest.TestCase):
@@ -1407,8 +1406,8 @@ class TaskRelationDraftTestCase(unittest.TestCase):
         cls.producer_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskDraft(), '/task_draft/')
         cls.consumer_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskDraft(), '/task_draft/')
         cls.template_url = test_data_creator.post_data_and_get_url(test_data_creator.WorkRelationSelectionTemplate(), '/work_relation_selection_template/')
-        cls.input_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnectors(), '/task_connectors/')
-        cls.output_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnectors(), '/task_connectors/')
+        cls.input_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnector(), '/task_connector/')
+        cls.output_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnector(), '/task_connector/')
 
     def test_task_relation_draft_list_apiformat(self):
         r = requests.get(BASE_URL + '/task_relation_draft/?format=api', auth=AUTH)
@@ -1521,7 +1520,7 @@ class TaskRelationDraftTestCase(unittest.TestCase):
         GET_and_assert_equal_expected_code(self, url, 404)
 
     def test_task_relation_draft_CASCADE_behavior_on_input_deleted(self):
-        input_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnectors(), '/task_connectors/')
+        input_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnector(), '/task_connector/')
         trd_test_data = test_data_creator.TaskRelationDraft(input_url=input_url, producer_url=self.producer_url, consumer_url=self.consumer_url, template_url=self.template_url, output_url=self.output_url)
 
         # POST new item
@@ -1538,7 +1537,7 @@ class TaskRelationDraftTestCase(unittest.TestCase):
         GET_and_assert_equal_expected_code(self, url, 404)
 
     def test_task_relation_draft_CASCADE_behavior_on_output_deleted(self):
-        output_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnectors(), '/task_connectors/')
+        output_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnector(), '/task_connector/')
         trd_test_data = test_data_creator.TaskRelationDraft(output_url=output_url, producer_url=self.producer_url, consumer_url=self.consumer_url, template_url=self.template_url, input_url=self.input_url)
 
         # POST new item with dependency
@@ -1974,8 +1973,8 @@ class TaskRelationBlueprintTestCase(unittest.TestCase):
         cls.producer_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskBlueprint(), '/task_blueprint/')
         cls.consumer_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskBlueprint(), '/task_blueprint/')
         cls.template_url = test_data_creator.post_data_and_get_url(test_data_creator.WorkRelationSelectionTemplate(), '/work_relation_selection_template/')
-        cls.input_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnectors(), '/task_connectors/')
-        cls.output_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnectors(), '/task_connectors/')
+        cls.input_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnector(), '/task_connector/')
+        cls.output_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnector(), '/task_connector/')
 
     def test_task_relation_blueprint_list_apiformat(self):
         r = requests.get(BASE_URL + '/task_relation_blueprint/?format=api', auth=AUTH)
@@ -2154,7 +2153,7 @@ class TaskRelationBlueprintTestCase(unittest.TestCase):
         GET_and_assert_equal_expected_code(self, url, 404)
 
     def test_task_relation_blueprint_CASCADE_behavior_on_input_deleted(self):
-        input_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnectors(), '/task_connectors/')
+        input_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnector(), '/task_connector/')
         trb_test_data = test_data_creator.TaskRelationBlueprint(draft_url=self.draft_url, template_url=self.template_url, input_url=input_url, output_url=self.output_url, consumer_url=self.consumer_url, producer_url=self.producer_url)
 
         # POST new item
@@ -2171,7 +2170,7 @@ class TaskRelationBlueprintTestCase(unittest.TestCase):
         GET_and_assert_equal_expected_code(self, url, 404)
 
     def test_task_relation_blueprint_CASCADE_behavior_on_output_deleted(self):
-        output_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnectors(), '/task_connectors/')
+        output_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskConnector(), '/task_connector/')
         trb_test_data = test_data_creator.TaskRelationBlueprint(draft_url=self.draft_url, template_url=self.template_url, input_url=self.input_url, output_url=output_url, consumer_url=self.consumer_url, producer_url=self.producer_url)
 
         # POST new item with dependency
diff --git a/SAS/TMSS/test/t_tmssapp_specification_django_API.py b/SAS/TMSS/test/t_tmssapp_specification_django_API.py
index d4301723b0c597e5054c3f7de2dad64db244d8f8..6e0e78cc389bcd6e891055cf5ee9a9e956fbf7b1 100755
--- a/SAS/TMSS/test/t_tmssapp_specification_django_API.py
+++ b/SAS/TMSS/test/t_tmssapp_specification_django_API.py
@@ -157,27 +157,27 @@ class WorkRelationSelectionTemplateTest(unittest.TestCase):
         self.assertGreater(after, entry.updated_at)
 
 
-class TaskConnectorsTest(unittest.TestCase):
+class TaskConnectorTest(unittest.TestCase):
 
-    def test_POST_TaskConnectors_prevents_missing_input_of(self):
+    def test_POST_TaskConnector_prevents_missing_input_of(self):
 
         # setup
-        test_data_1 = dict(TaskConnectors_test_data())
+        test_data_1 = dict(TaskConnector_test_data())
         test_data_1['input_of'] = None
 
         # assert
         with self.assertRaises(IntegrityError):
-            models.TaskConnectors.objects.create(**test_data_1)
+            models.TaskConnector.objects.create(**test_data_1)
 
-    def test_POST_TaskConnectors_prevents_missing_output_of(self):
+    def test_POST_TaskConnector_prevents_missing_output_of(self):
 
         # setup
-        test_data_1 = dict(TaskConnectors_test_data())
+        test_data_1 = dict(TaskConnector_test_data())
         test_data_1['output_of'] = None
 
         # assert
         with self.assertRaises(IntegrityError):
-            models.TaskConnectors.objects.create(**test_data_1)
+            models.TaskConnector.objects.create(**test_data_1)
 
 
 class CycleTest(unittest.TestCase):
diff --git a/SAS/TMSS/test/tmss_test_data_django_models.py b/SAS/TMSS/test/tmss_test_data_django_models.py
index 0473b8c7b18a101acfb3c973adb66f55a9e263eb..1732fc53c41b36ab71d93ba51328b5c88d1bc76e 100644
--- a/SAS/TMSS/test/tmss_test_data_django_models.py
+++ b/SAS/TMSS/test/tmss_test_data_django_models.py
@@ -69,7 +69,7 @@ def WorkRelationSelectionTemplate_test_data(name="my_WorkRelationSelectionTempla
                "schema": {"mykey": "my value"},
                "tags": ["TMSS", "TESTING"]}
 
-def TaskConnectors_test_data() -> dict:
+def TaskConnector_test_data() -> dict:
     return {"role": models.Role.objects.get(value='calibrator'),
             "datatype": models.Datatype.objects.get(value='instrument model'),
             "output_of": models.TaskTemplate.objects.create(**TaskTemplate_test_data()),
@@ -159,8 +159,8 @@ def TaskRelationDraft_test_data() -> dict:
             "dataformat": models.Dataformat.objects.get(value='Beamformed'),
             "producer": models.TaskDraft.objects.create(**TaskDraft_test_data()),
             "consumer": models.TaskDraft.objects.create(**TaskDraft_test_data()),
-            "input":  models.TaskConnectors.objects.create(**TaskConnectors_test_data()),
-            "output": models.TaskConnectors.objects.create(**TaskConnectors_test_data()),
+            "input":  models.TaskConnector.objects.create(**TaskConnector_test_data()),
+            "output": models.TaskConnector.objects.create(**TaskConnector_test_data()),
             "selection_template": models.WorkRelationSelectionTemplate.objects.create(**WorkRelationSelectionTemplate_test_data())}
 
 def SchedulingUnitBlueprint_test_data(name='my_scheduling_unit_blueprint') -> dict:
@@ -189,8 +189,8 @@ def TaskRelationBlueprint_test_data() -> dict:
     return { "tags": [],
             "selection_doc": "{}",
             "dataformat": models.Dataformat.objects.get(value='Beamformed'),
-            "input": models.TaskConnectors.objects.create(**TaskConnectors_test_data()),
-            "output": models.TaskConnectors.objects.create(**TaskConnectors_test_data()),
+            "input": models.TaskConnector.objects.create(**TaskConnector_test_data()),
+            "output": models.TaskConnector.objects.create(**TaskConnector_test_data()),
             "draft": models.TaskRelationDraft.objects.create(**TaskRelationDraft_test_data()),
             "selection_template": models.WorkRelationSelectionTemplate.objects.create(**WorkRelationSelectionTemplate_test_data()),
             "producer": models.TaskBlueprint.objects.create(**TaskBlueprint_test_data()),
diff --git a/SAS/TMSS/test/tmss_test_data_rest.py b/SAS/TMSS/test/tmss_test_data_rest.py
index 656a2f5cd70cf451241ab4fb0c93af52ba4600cb..2a42a4ca9dcf3b29c4a80b8fc68e20c1044d2205 100644
--- a/SAS/TMSS/test/tmss_test_data_rest.py
+++ b/SAS/TMSS/test/tmss_test_data_rest.py
@@ -75,7 +75,7 @@ class TMSSRESTTestDataCreator():
                 "schema": {"mykey": "my value"},
                 "tags": ["TMSS", "TESTING"]}
     
-    def TaskConnectors(self, role="correlator", input_of_url=None, output_of_url=None):
+    def TaskConnector(self, role="correlator", input_of_url=None, output_of_url=None):
         if input_of_url is None:
             input_of_url = self.post_data_and_get_url(self.TaskTemplate(), '/task_template/')
     
@@ -212,10 +212,10 @@ class TMSSRESTTestDataCreator():
             template_url = self.post_data_and_get_url(self.WorkRelationSelectionTemplate(), '/work_relation_selection_template/')
     
         if input_url is None:
-            input_url = self.post_data_and_get_url(self.TaskConnectors(), '/task_connectors/')
+            input_url = self.post_data_and_get_url(self.TaskConnector(), '/task_connector/')
     
         if output_url is None:
-            output_url = self.post_data_and_get_url(self.TaskConnectors(), '/task_connectors/')
+            output_url = self.post_data_and_get_url(self.TaskConnector(), '/task_connector/')
     
         return {"tags": [],
                 "selection_doc": "{}",
@@ -278,10 +278,10 @@ class TMSSRESTTestDataCreator():
             template_url = self.post_data_and_get_url(self.WorkRelationSelectionTemplate(), '/work_relation_selection_template/')
     
         if input_url is None:
-            input_url = self.post_data_and_get_url(self.TaskConnectors(), '/task_connectors/')
+            input_url = self.post_data_and_get_url(self.TaskConnector(), '/task_connector/')
     
         if output_url is None:
-            output_url = self.post_data_and_get_url(self.TaskConnectors(), '/task_connectors/')
+            output_url = self.post_data_and_get_url(self.TaskConnector(), '/task_connector/')
     
         # test data
         return {"tags": [],