diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py
index f732bc58c1ce2c5acce68ba34fe8a44c7e9bbff9..16cd9d7468733d2f4e9a833ee710a507ba2e27a9 100644
--- a/atdb/taskdatabase/models.py
+++ b/atdb/taskdatabase/models.py
@@ -31,6 +31,9 @@ class Task(models.Model):
     sas_id = models.CharField(max_length=30, blank=True, null=True)
     priority = models.IntegerField(default=0)
     purge_policy = models.CharField(max_length=5, default="no", blank=True, null=True)
+    desired_workflow_id = models.CharField(max_length=12, blank=True, null=True)
+    desired_workflow_uri = models.CharField(max_length=100, blank=True, null=True)
+    workflow = models.ForeignKey(Workflow, related_name='tasks', on_delete=models.SET_NULL, null=True,blank=True)
 
     inputs = models.JSONField(null=True, blank=True)
     outputs = models.JSONField(null=True, blank=True)
diff --git a/atdb/taskdatabase/serializers.py b/atdb/taskdatabase/serializers.py
index c945e7b454536de518f0223e09fb167dfc481d21..7454684574ebece930d23fed74690c62e933b2ce 100644
--- a/atdb/taskdatabase/serializers.py
+++ b/atdb/taskdatabase/serializers.py
@@ -2,47 +2,19 @@ from rest_framework import serializers
 from .models import Status, Task, Workflow, LogEntry
 
 
-
-class WorkflowSerializer(serializers.ModelSerializer):
-
-#    tasks = serializers.StringRelatedField(
-#        many=True,
-#        required=False,
-#    )
-
-    class Meta:
-        model = Workflow
-        fields = "__all__"
-
-
 class TaskSerializer(serializers.ModelSerializer):
-    status_history = serializers.StringRelatedField(
-        many=True,
-        required=False,
-    )
-    class Meta:
-        model = Task
-        fields = ('id','task_type','taskID',
-                  'desired_predecessor_id','predecessor','successor',
-                  'project','sas_id','priority','purge_policy','skip',
-                  'workflow',
-                  'status','desired_status',
-                  'inputs','outputs','status_history')
-
 
-class TaskReadSerializer(serializers.ModelSerializer):
     status_history = serializers.StringRelatedField(
         many=True,
         required=False,
     )
 
-    workflow = WorkflowSerializer(read_only=True)
     class Meta:
         model = Task
         fields = ('id','task_type','taskID',
                   'desired_predecessor_id','predecessor','successor',
                   'project','sas_id','priority','purge_policy','skip',
-                  'workflow',
+                  'desired_workflow_id','desired_workflow_uri','workflow',
                   'status','desired_status',
                   'inputs','outputs','status_history')
 
@@ -54,6 +26,17 @@ class StatusSerializer(serializers.ModelSerializer):
         fields = "__all__"
 
 
+class WorkflowSerializer(serializers.ModelSerializer):
+
+#    tasks = serializers.StringRelatedField(
+#        many=True,
+#        required=False,
+#    )
+
+    class Meta:
+        model = Workflow
+        fields = "__all__"
+
 
 class LogEntrySerializer(serializers.ModelSerializer):
 
diff --git a/atdb/taskdatabase/services/signals.py b/atdb/taskdatabase/services/signals.py
index deda8633fd6f8bb4a5db0a6e9b04bbeef9fabcef..03ce4475a2d896bceb94a9f90bdc55da32365365 100644
--- a/atdb/taskdatabase/services/signals.py
+++ b/atdb/taskdatabase/services/signals.py
@@ -34,6 +34,28 @@ def pre_save_task_handler(sender, **kwargs):
     handle_pre_save(sender, **kwargs)
 
 
+def add_workflow(myTaskObject):
+    desired_workflow_id = myTaskObject.desired_workflow_id
+    desired_workflow_uri = myTaskObject.desired_workflow_uri
+
+    # first try to find the workflow by desired workflow_id
+    try:
+        desired_workflow = Workflow.objects.get(id=desired_workflow_id)
+    except:
+        desired_workflow = None
+
+    if (desired_workflow == None):
+        # then try workflow_uri
+        desired_workflow = Workflow.objects.get(workflow_uri=desired_workflow_uri)
+
+    # first check if works needs to be done at all
+    if (myTaskObject.workflow != desired_workflow):
+        # set the new status
+        myTaskObject.workflow = desired_workflow
+
+    return myTaskObject
+
+
 def add_predecessor(myTaskObject):
     # connect the task to a workflow after posting a (flat) task through the REST API
 
@@ -79,6 +101,7 @@ def handle_pre_save(sender, **kwargs):
         myStatus.save()
 
     # connect the task to a workflow after posting a (flat) task through the REST API
+    myTaskObject = add_workflow(myTaskObject)
     myTaskObject = add_predecessor(myTaskObject)
 
 
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 4ad5ff4cddc1ca0c7c71658718b0b87136e8d23c..9d629398fb83d9ec645a474ead7ec6f69e556abd 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -14,7 +14,7 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 
 from .models import Task, Status, Workflow, LogEntry
 from django.db.models import Q
-from .serializers import TaskSerializer, TaskReadSerializer, WorkflowSerializer, LogEntrySerializer
+from .serializers import TaskSerializer, WorkflowSerializer, LogEntrySerializer
 from .forms import FilterForm
 
 from .services import algorithms
@@ -133,11 +133,7 @@ class TaskListViewAPI(generics.ListCreateAPIView):
     model = Task
     queryset = Task.objects.all()
     serializer_class = TaskSerializer
-    def get_serializer_class(self):
-        if self.request.method in ['GET']:
-            return TaskReadSerializer
-        else:
-            return TaskSerializer
+
     # using the Django Filter Backend - https://django-filter.readthedocs.io/en/latest/index.html
     filter_backends = (filters.DjangoFilterBackend,)
     filter_class = TaskFilter