diff --git a/Docker/L570745_uv_first10.MS.tar.xz b/Docker/L570745_uv_first10.MS.tar.xz
new file mode 100644
index 0000000000000000000000000000000000000000..13ab4c559979bdb321d6bdf57d92f03bb84ca2f2
--- /dev/null
+++ b/Docker/L570745_uv_first10.MS.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6acef40bcf795c5ae94232654414fece4a20eb75494577ea630fc663673b3c1
+size 387119976
diff --git a/Docker/test_data/.gitattributes b/Docker/test_data/.gitattributes
deleted file mode 100644
index 8089a9bc54f7507aa1dad9ba738e3a8e0b922f98..0000000000000000000000000000000000000000
--- a/Docker/test_data/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-*.h5 filter=lfs diff=lfs merge=lfs -text
\ No newline at end of file
diff --git a/Docker/test_data/example.h5 b/Docker/test_data/example.h5
index 4189e836347c25306c773352d9a0ecc16310a959..554933b577a0dcf1b2aa3fa91c7de5b2477fd724 100644
Binary files a/Docker/test_data/example.h5 and b/Docker/test_data/example.h5 differ
diff --git a/steps/gaincal.cwl b/steps/gaincal.cwl
index d57b71284e6dbbb7c8068f505c3d0b00b97d1868..5b1f47559b12511e51662ec8330dd7a4ffd077f4 100644
--- a/steps/gaincal.cwl
+++ b/steps/gaincal.cwl
@@ -1,119 +1,171 @@
-#!/usr/bin/env cwl-runner
-
 class: CommandLineTool
 cwlVersion: v1.0
+$namespaces:
+  lofar: 'https://git.astron.nl/eosc/ontologies/raw/master/schema/lofar.owl'
+  sbg: 'https://www.sevenbridges.com/'
 id: gaincal
-baseCommand: [DPPP]
-
-requirements:
-  InlineJavascriptRequirement: {}
-
-hints:
-  DockerRequirement:
-    dockerPull: lofareosc/lofar-pipeline-ci:latest
-
-arguments:
-  - steps=[gaincal]
-
-
+baseCommand:
+  - DPPP
 inputs:
   - id: msin
-    type: Directory?
-    doc: Input Measurement Set
+    type: Directory
     inputBinding:
-        prefix: msin=
-        separate: false
+      position: 0
+      prefix: msin=
+      separate: false
+    doc: Input Measurement Set
   - id: caltype
+    type:
+      type: enum
+      symbols:
+        - diagonal
+        - fulljones
+        - phaseonly
+        - scalarphase
+        - amplitude
+        - scalaramplitude
+        - tec
+        - tecandphase
+      name: caltype
+    inputBinding:
+      position: 0
+      prefix: gaincal.caltype=
+      separate: false
     doc: |
       The type of calibration that needs to be performed.
-    type:
-        type: enum
-        symbols:
-            - diagonal
-            - fulljones
-            - phaseonly
-            - scalarphase
-            - amplitude
-            - scalaramplitude
-            - tec
-            - tecandphase
-    inputBinding:
-        prefix: gaincal.caltype=
-        separate: false
+  - default: instrument.h5
+    id: output_name_h5parm
+    type: string
+    inputBinding:
+      position: 0
+      prefix: gaincal.parmdb=
+      separate: false
+  - id: blrange
+    type: 'string[]?'
+    inputBinding:
+      position: 0
+      prefix: gaincal.blrange=
+      separate: false
+      itemSeparator: ','
+      valueFrom: '[$(self)]'
+    doc: Vector of baseline lengths to use for calibration
+  - id: uvlambdamin
+    type: float?
+    inputBinding:
+      position: 0
+      prefix: gaincal.uvlambdamin=
+      separate: false
+  - id: baseline
+    type: string?
+    inputBinding:
+      position: 0
+      prefix: gaincal.baseline=
+      separate: false
+  - id: applysolutions
+    type: boolean?
+    doc: Apply the calibration solution to the visibilities. Note that you should always also inspect the parmdb afterwards to check that the solutions look reasonable. 
+    inputBinding:
+      prefix: gaincal.applysolutions=
+  - id: solint
+    default: 1
+    type: int
+    doc: >
+      Number of time slots on which a solution is assumed to be constant (same
+      as CellSize.Time in BBS).
+
+      0 means all time slots. Note that for larger settings of solint, and
+      specially for solint = 0,
+
+      the memory usage of gaincal will be large (all visibilities for a solint
+      should fit in memory).
+  - id: nchan
+    type: int
+    inputBinding:
+      position: 0
+      prefix: gaincal.nchan=
+      separate: false
+  
   - id: sourcedb
     type: File
     inputBinding:
-        prefix: gaincal.sourcedb=
-        separate: false
-  - id: usebeammodel
+      position: 0
+      prefix: gaincal.sourcedb=
+      separate: false
+  - id: usemodelcolumn
+    default: MODEL_DATA
+    type: boolean?
+    inputBinding:
+      position: 0
+      prefix: gaincal.usemodelcolumn=
+      separate: false
+    doc: "\tUse model column. The model column name can be specified with msin.modelcolumn\n"
+  - default: true
+    id: usebeammodel
     type: boolean
-    default: true
     inputBinding:
-        prefix: gaincal.usebeammodel=true
-        separate: false
-  - id: storagemanager
+      position: 0
+      prefix: gaincal.usebeammodel=true
+      separate: false
+  - default: dysco
+    id: storagemanager
     type: string
-    default: dysco
-    inputBinding
+    inputBinding:
+      position: 0
       prefix: msout.storagemanager=
-  - id: solint
-    type: int
-    default: 1
-    doc: |
-        Number of time slots on which a solution is assumed to be constant (same as CellSize.Time in BBS).
-        0 means all time slots. Note that for larger settings of solint, and specially for solint = 0,
-        the memory usage of gaincal will be large (all visibilities for a solint should fit in memory).
-  - id: msin_datacolumn
+  - default: DATA
+    id: msin_datacolumn
     type: string?
-    default: DATA
-    doc: Input data Column
     inputBinding:
-        prefix: msin.datacolumn=
-        separate: false
-  - id: onebeamperpatch
-    type: boolean
+      position: 0
+      prefix: msin.datacolumn=
+      separate: false
     doc: Input data Column
-    default: true
+  - default: true
+    id: onebeamperpatch
+    type: boolean
     inputBinding:
-        prefix: gaincal.onebeamperpatch=True
-        separate: false
-  - id: msin_modelcolum
+      position: 0
+      prefix: gaincal.onebeamperpatch=True
+      separate: false
+    doc: Input data Column
+  - default: MODEL_DATA
+    id: msin_modelcolum
     type: string
-    default: MODEL_DATA
-    doc: Model data Column
     inputBinding:
-        prefix: msin.modelcolumn=
-        separate: false
-
-  - id: output_name_h5parm
+      position: 0
+      prefix: msin.modelcolumn=
+      separate: false
+    doc: Model data Column
+  - default: out.MS
+    id: msout_name
     type: string
-    default: instrument.h5
     inputBinding:
-        prefix: gaincal.parmdb=
-        separate: false
-  - id: msout_name
-    type: string
+      position: 0
+      prefix: msout=
+      separate: false
     doc: Output Measurement Set
-    default: out.MS
+  - id: input
+    type: File?
     inputBinding:
-        prefix: msout=
-        separate: false
-
+      position: 0
 outputs:
   - id: msout
     doc: Output Measurement Set
     type: Directory
     outputBinding:
-      glob: $(inputs.msout_name=="."?inputs.msin:inputs.msout_name)
-
+      glob: '$(inputs.msout_name=="."?inputs.msin:inputs.msout_name)'
   - id: h5parm
     doc: Filename of output H5Parm (to be read by e.g. losoto)
     type: File
-    format: lofar:#H5Parm
     outputBinding:
       glob: $(inputs.output_name_h5parm)
-
-$namespaces:
-  lofar: https://git.astron.nl/eosc/ontologies/raw/master/schema/lofar.owl
+    format: 'lofar:#H5Parm'
+arguments:
+  - 'steps=[gaincal]'
+hints:
+  - class: DockerRequirement
+    dockerPull: 'lofareosc/lofar-pipeline:latest'
+requirements:
+  - class: InlineJavascriptRequirement
 $schema:
-  - https://git.astron.nl/eosc/ontologies/raw/master/schema/lofar.owl
+  - 'https://git.astron.nl/eosc/ontologies/raw/master/schema/lofar.owl'
diff --git a/test_data/.gitattributes b/test_data/.gitattributes
deleted file mode 100644
index 8089a9bc54f7507aa1dad9ba738e3a8e0b922f98..0000000000000000000000000000000000000000
--- a/test_data/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-*.h5 filter=lfs diff=lfs merge=lfs -text
\ No newline at end of file
diff --git a/test_data/L570745_uv_first10.MS.tar.xz b/test_data/L570745_uv_first10.MS.tar.xz
new file mode 100644
index 0000000000000000000000000000000000000000..13ab4c559979bdb321d6bdf57d92f03bb84ca2f2
--- /dev/null
+++ b/test_data/L570745_uv_first10.MS.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6acef40bcf795c5ae94232654414fece4a20eb75494577ea630fc663673b3c1
+size 387119976
diff --git a/test_data/example.h5 b/test_data/example.h5
index 4189e836347c25306c773352d9a0ecc16310a959..554933b577a0dcf1b2aa3fa91c7de5b2477fd724 100644
Binary files a/test_data/example.h5 and b/test_data/example.h5 differ