diff --git a/.gitignore b/.gitignore
index 6ada2877b3453550a6cec11b68ffad30847f84bf..b0502826fa48314208d9ccc2a7342bd20769c0c3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 test_data/*.MS
 Docker/scripts
+Docker/prefactor
 *.sif
 # Byte-compiled / optimized / DLL files
 __pycache__/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c6be0c29784542c0548ddb274c98bc2a0de64517..0efe8139e9797ac32568180278f4bb0a6d522268 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: lofareosc/prefactor-ci:master
+image: lofareosc/prefactor-ci:latest
 
 variables:
   TEST_DATASET_NAME: "L570745_uv_first10.MS.tar.xz"
@@ -56,6 +56,11 @@ blsmooth:
   script:
     - cwltool --no-container --preserve-environment LD_LIBRARY_PATH --preserve-environment PATH --preserve-environment PYTHONPATH steps/blsmooth.cwl test_jobs/blsmooth.json
 
+pol_align:
+  stage: integration_test
+  script:
+    - cwltool --no-container subworkflow/pol_align.cwl test_jobs/pol_align.json
+
 prefactor_calibrator:
   stage: integration_test
   script:
diff --git a/Docker/Dockerfile b/Docker/Dockerfile
index 7b8b78a8b7f7c7fff4f642458082b1559993bbfb..b2d0d68f506300c9c3891a932d91d146288a4974 100644
--- a/Docker/Dockerfile
+++ b/Docker/Dockerfile
@@ -1,10 +1,10 @@
 FROM lofareosc/lofar-pipeline:latest
-
+USER root
 COPY prefactor/scripts/* /opt/lofar/scripts/
 COPY prefactor/skymodels/* /data/skymodels/
 COPY prefactor/rfistrategies/* /data/rfistrategies/
 COPY prefactor/solutions/ /data/solutions/*
-
+RUN apt update && apt install vim
 RUN ln -sf /opt/lofar/scripts/* /usr/local/bin/
 
 RUN chmod +rx /usr/local/bin/*
diff --git a/subworkflow/pol_align.cwl b/subworkflow/pol_align.cwl
new file mode 100644
index 0000000000000000000000000000000000000000..91666c3f84f2a439e81d3306ac2784d3e44b5732
--- /dev/null
+++ b/subworkflow/pol_align.cwl
@@ -0,0 +1,71 @@
+class: Workflow
+cwlVersion: v1.0
+id: pol_align
+label: PolAlign
+$namespaces:
+  sbg: 'https://www.sevenbridges.com/'
+  lofar: 'https://git.astron.nl/eosc/ontologies/raw/master/schema/lofar.owl'
+inputs:
+  - id: refAnt
+    type: string?
+    'sbg:x': -451.3746643066406
+    'sbg:y': -493.92510986328125
+  - id: input_h5parm
+    type: File
+    'sbg:x': -743.1871948242188
+    'sbg:y': -316.5615234375
+outputs:
+  - id: output_h5parm
+    outputSource:
+      - losoto_residual/output_h5parm
+    type: File
+    'sbg:x': 152.59103393554688
+    'sbg:y': -289.2899169921875
+steps:
+  - id: losoto_duplicate
+    in:
+      - id: input_h5parm
+        source: input_h5parm
+      - id: soltab
+        default: sol000/phase000
+      - id: soltabOut
+        default: phaseOrig
+    out:
+      - id: output_h5parm
+    run: ../lofar-cwl/steps/LoSoTo.Duplicate.cwl
+    'sbg:x': -423.6229248046875
+    'sbg:y': -287.8958435058594
+  - id: losoto_polalign
+    in:
+      - id: input_h5parm
+        source: losoto_duplicate/output_h5parm
+      - id: soltab
+        default: sol000/phase000
+      - id: soltabout
+        default: polalign
+      - id: average
+        default: true
+      - id: replace
+        default: true
+      - id: refAnt
+        source: refAnt
+    out:
+      - id: output_h5parm
+    run: ../lofar-cwl/steps/LoSoTo.Polalign.cwl
+    'sbg:x': -203.663818359375
+    'sbg:y': -292.61700439453125
+  - id: losoto_residual
+    in:
+      - id: input_h5parm
+        source: losoto_polalign/output_h5parm
+      - id: soltab
+        default: sol000/phase000
+      - id: soltabsToSub
+        default:
+          - polalign
+    out:
+      - id: output_h5parm
+    run: ../lofar-cwl/steps/LoSoTo.Residual.cwl
+    'sbg:x': -0.012040258385241032
+    'sbg:y': -287.7294006347656
+requirements: []
diff --git a/test_jobs/pol_align.json b/test_jobs/pol_align.json
new file mode 100644
index 0000000000000000000000000000000000000000..0cdbed898de539d8a086933afbb8b98b601a80d8
--- /dev/null
+++ b/test_jobs/pol_align.json
@@ -0,0 +1,7 @@
+{
+  "input_h5parm": {
+    "class": "File",
+    "format": "lofar:#H5Parm",
+    "path": "/data/example.h5"
+  }
+}