diff --git a/steps/filter_ms_group.cwl b/steps/filter_ms_group.cwl
new file mode 100644
index 0000000000000000000000000000000000000000..5137406770592dbb1cc63578c94848a4fcf0d489
--- /dev/null
+++ b/steps/filter_ms_group.cwl
@@ -0,0 +1,57 @@
+class: CommandLineTool
+cwlVersion: v1.0
+id: filter_ms_group
+baseCommand:
+  - python3
+arguments:
+    - position: 0
+      valueFrom: script.py
+inputs:
+  - id: group_id
+    type: string
+  - id: groups_specification
+    type: File
+    inputBinding:
+      position: 1
+  - id: measurement_sets
+    type: 'Directory[]'
+    inputBinding:
+      position: 2
+outputs:
+  - id: output
+    type: 'Directory[]?'
+    outputBinding:
+      loadContents: true
+      glob: selected_ms.json
+      outputEval: '$(JSON.parse(self[0].contents))'
+label: filter_ms_group
+
+requirements:
+  - class: InlineJavascriptRequirement
+  - class: InitialWorkDirRequirement
+    listing:
+     - entryname: script.py
+       entry: |
+        import sys
+        import json
+        import os.path as path
+        group_id = "$(inputs.group_id)"
+        json_file = sys.argv[1]
+        ms_list = sys.argv[2:]
+        
+        ms_by_name = { ms.split(path.sep)[-1]:
+                       {'class':'Directory', 'path': ms} for ms in ms_list}
+        
+        output_file = 'selected_ms.json'
+        
+        with open(json_file, 'r') as f_stream:
+            selected_ms = json.load(f_stream)[group_id]
+        print(selected_ms, ms_by_name)
+        selected_ms = [ms_by_name[ms_name] for ms_name in selected_ms]
+            
+        
+        with open(output_file, 'w') as f_stream:
+            json.dump(selected_ms, f_stream)
+               
+        
+    
diff --git a/test_workflow/empty_dirs/ms1/README b/test_workflow/empty_dirs/ms1/README
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/test_workflow/empty_dirs/ms2/README b/test_workflow/empty_dirs/ms2/README
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/test_workflow/empty_dirs/ms3/README b/test_workflow/empty_dirs/ms3/README
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/test_workflow/empty_dirs/ms5/README b/test_workflow/empty_dirs/ms5/README
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/test_workflow/filter_ms_group.json b/test_workflow/filter_ms_group.json
new file mode 100644
index 0000000000000000000000000000000000000000..dbdcc34733a9aa358d6d7bd9a2d4769b7e80bf5e
--- /dev/null
+++ b/test_workflow/filter_ms_group.json
@@ -0,0 +1,9 @@
+{
+"group_id": "1",
+"groups_specification": {"class": "File", "path": "groups_spec.json"},
+"measurement_sets": [
+           {"class": "Directory", "path": "empty_dirs/ms1"}, 
+           {"class": "Directory", "path": "empty_dirs/ms2"},
+           {"class": "Directory", "path": "empty_dirs/ms3"},
+           {"class": "Directory", "path": "empty_dirs/ms5"}]
+}
diff --git a/test_workflow/groups_spec.json b/test_workflow/groups_spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..89e56a1ffbd550d4ed4f48841a01cc2feaa47578
--- /dev/null
+++ b/test_workflow/groups_spec.json
@@ -0,0 +1,4 @@
+{
+ "1": ["ms1", "ms2"],
+ "2": ["ms3", "ms5"]
+}