diff --git a/prefactor_calibrator.cwl b/prefactor_calibrator.cwl
index 324b62af8456672fb877b977620b6416fe935abc..84f669ea469e5c4319a24236205c5b22e515a005 100644
--- a/prefactor_calibrator.cwl
+++ b/prefactor_calibrator.cwl
@@ -5,10 +5,6 @@ label: prefactor_calibrator
 $namespaces:
   sbg: 'https://www.sevenbridges.com/'
 inputs:
-  - id: msin
-    type: 'Directory[]'
-    'sbg:x': -659.0313110351562
-    'sbg:y': -522.6085205078125
   - id: raw_data
     type: boolean
     'sbg:x': -620
@@ -21,6 +17,10 @@ inputs:
     type: Directory
     'sbg:x': -154.39886474609375
     'sbg:y': -775.5
+  - id: msin
+    type: 'Directory[]'
+    'sbg:x': -656
+    'sbg:y': -525
 outputs:
   - id: demix_parmdb
     outputSource:
@@ -32,18 +32,12 @@ outputs:
         items: Directory
     'sbg:x': -67.85011291503906
     'sbg:y': -356.76287841796875
-  - id: output_models
-    outputSource:
-      - find_skymodel_cal_py/output_models
-    type: File
-    'sbg:x': 348.60113525390625
-    'sbg:y': -696.5
   - id: msout
     outputSource:
       - ddecal/msout
     type: Directory
-    'sbg:x': 507
-    'sbg:y': -524
+    'sbg:x': 647.890625
+    'sbg:y': -570.5
 steps:
   - id: ndppp_prep_cal
     in:
@@ -81,8 +75,10 @@ steps:
       - id: output_ms
     run: steps/AOFlagger.cwl
     label: AOFlagger
-    'sbg:x': -82
-    'sbg:y': -571
+    scatter:
+      - msin
+    'sbg:x': -112
+    'sbg:y': -556
   - id: find_skymodel_cal_py
     in:
       - id: msin
@@ -94,8 +90,8 @@ steps:
       - id: output_models
     run: steps/find_skymodel_cal.cwl
     label: find_skymodel_cal.py
-    'sbg:x': 105
-    'sbg:y': -709
+    'sbg:x': 109.70829772949219
+    'sbg:y': -674.2916870117188
   - id: blsmooth
     in:
       - id: msin
@@ -104,19 +100,28 @@ steps:
       - id: msout
     run: steps/blsmooth.cwl
     label: BLsmooth
-    scatter:
-      - msin
     'sbg:x': 112
     'sbg:y': -522
   - id: ddecal
+    in:
+      - id: msin
+        source: predict/msout
+    out:
+      - id: msout
+    run: steps/ddecal.cwl
+    'sbg:x': 490
+    'sbg:y': -575
+  - id: predict
     in:
       - id: msin
         source: blsmooth/msout
+      - id: sources_db
+        source: find_skymodel_cal_py/output_models
     out:
       - id: msout
     run: steps/predict.cwl
-    'sbg:x': 313
-    'sbg:y': -521
+    'sbg:x': 273
+    'sbg:y': -573
 requirements:
   - class: SubworkflowFeatureRequirement
   - class: ScatterFeatureRequirement
diff --git a/steps/ddecal.cwl b/steps/ddecal.cwl
index f582c6b844c2243940a56a4b2e45e7b3186dff72..629ba6470d872d6b8c15092744947dee972df7e0 100644
--- a/steps/ddecal.cwl
+++ b/steps/ddecal.cwl
@@ -13,17 +13,16 @@ hints:
     dockerPull: prefactor
 
 arguments:
-  - steps=[solve]
-  - solve.type=ddecal
-  - solve.h5parm=h5parm
-  - solve.mode=rotation+diagonal
-  - solve.uvlambdamin=300
-  - solve.maxiter=50
-  - solve.nchan=1
-  - solve.solint=1
-  - solve.propagateconvergedonly=True
-  - solve.flagdivergedonly=True
-  - solve.tolerance=1.e-3
+  - steps=[ddecal]
+  - ddecal.mode=rotation+diagonal
+  - ddecal.uvlambdamin=300
+  - ddecal.maxiter=50
+  - ddecal.nchan=1
+  - ddecal.solint=1
+  - ddecal.propagateconvergedonly=True
+  - ddecal.flagdivergedonly=True
+  - ddecal.tolerance=1.e-3
+  - ddecal.usemodelcolumn=True
 
 inputs:
   - id: msin
@@ -35,11 +34,17 @@ inputs:
 
   - id: msin_datacolumn
     type: string
-    default: SMOOTHED_DATA
+    default: DATA
     doc: Input data Column
     inputBinding:
         prefix: msin.datacolumn=
         separate: false
+  - id: output_name_h5parm
+    type: string
+    default: instrument.h5
+    inputBinding:
+        prefix: --ddecal.h5parm=
+        separate: false
   - id: msout_name
     type: string
     doc: Output Measurement Set
@@ -47,15 +52,6 @@ inputs:
     inputBinding:
         prefix: msout=
         separate: false
-  - id: usemodelcolumn
-    type: boolean
-    default: false
-    doc: |
-      Use model column. The model column name can be specified
-      with msin.modelcolumn (default MODEL_DATA)
-    inputBinding:
-        prefix: solve.usemodelcolumn=True
-
 #--------------------
   - id: flagunconverged
     type: boolean
@@ -85,3 +81,9 @@ outputs:
     type: Directory
     outputBinding:
       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
+    outputBinding:
+      glob: $(inputs.output_name_h5parm)
\ No newline at end of file
diff --git a/steps/predict.cwl b/steps/predict.cwl
index 7810fc7994ef8ecd2bcb4eeb8f42eecd833b336d..44fbd8f9a1672ddf2d9fdca32c8423db292222fb 100644
--- a/steps/predict.cwl
+++ b/steps/predict.cwl
@@ -1,70 +1,71 @@
-#!/usr/bin/env cwl-runner
-
 class: CommandLineTool
 cwlVersion: v1.0
-id: ddecal
-baseCommand: [DPPP]
-
-requirements:
-  InlineJavascriptRequirement: {}
-
-  InitialWorkDirRequirement:
-    listing:
-      - entry: $(inputs.msin)
-        writable: true
-
-hints:
-  DockerRequirement:
-    dockerPull: prefactor
-
-arguments:
-  - steps=[predict]
-  - predict.beammode=array_factor
-  - predict.usechannelfreq=False
-  - msout=.
+$namespaces:
+  sbg: 'https://www.sevenbridges.com/'
+id: predict
+baseCommand:
+  - DPPP
 inputs:
   - id: msin
     type: Directory
-    doc: Input Measurement Set
     inputBinding:
-        prefix: msin=
-        separate: false
-  - id: msin_datacolumn
+      position: 0
+      prefix: msin=
+      separate: false
+    doc: Input Measurement Set
+  - default: DATA
+    id: msin_datacolumn
     type: string
-    default: DATA
-    doc: Input data Column
     inputBinding:
-        prefix: msin.datacolumn=
-        separate: false
-  - id: msout_datacolumn
+      position: 0
+      prefix: msin.datacolumn=
+      separate: false
+    doc: Input data Column
+  - default: MODEL_DATA
+    id: msout_datacolumn
     type: string
-    default: MODEL_DATA
     inputBinding:
-        prefix: msout.datacolumn=
-        separate: false
+      position: 0
+      prefix: msout.datacolumn=
+      separate: false
   - id: sources_db
-    type: [File, Directory]
+    type: File
     inputBinding:
+      position: 0
       prefix: predict.sourcedb=
       separate: false
-  - id: sources
-    type: string[]
-    default: null
+  - default: null
+    id: sources
+    type: 'string[]'
     inputBinding:
+      position: 0
       prefix: predict.sources=
-      valueFrom: "[$(self)]"
       separate: false
       itemSeparator: ','
-  - id: usebeammodel
+      valueFrom: '[$(self)]'
+  - default: false
+    id: usebeammodel
     type: boolean
-    default: false
     inputBinding:
+      position: 0
       prefix: predict.usebeammodel=True
-
-
 outputs:
   - id: msout
     doc: Output Measurement Set
     type: Directory
     outputBinding:
       glob: $(inputs.msin.basename)
+arguments:
+  - 'steps=[predict]'
+  - predict.beammode=array_factor
+  - predict.usechannelfreq=False
+  - msout=.
+requirements:
+  - class: InitialWorkDirRequirement
+    listing:
+      - entry: $(inputs.msin)
+        writable: true
+  - class: InlineJavascriptRequirement
+hints:
+  - class: DockerRequirement
+    dockerPull: prefactor