diff --git a/bip/data/IDPs/IDPs.json b/bip/data/IDPs/IDPs.json
index 0b5725ddfc6e075001a3f1193a8a4a2f8ecf0b86..259dc059b70032d11ac93380a9201fc26d125445 100755
--- a/bip/data/IDPs/IDPs.json
+++ b/bip/data/IDPs/IDPs.json
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:8005353f07fe3d5cf09f29f9faf45e42182ab1317f45d1370cb0e3623a9883c9
-size 244014
+oid sha256:c87aee6cfc578388f8e6db5c2c9f6477cfaf34b8c5d1c8da3ef4460d9929e745
+size 244044
diff --git a/bip/pipelines/IDPs_gen/IDPs_gen.py b/bip/pipelines/IDPs_gen/IDPs_gen.py
index a1b41ceb558d4482aebf3e3af1b992b10a9db970..a084dace628d6b2571e4d183dc7034c3d19853fe 100755
--- a/bip/pipelines/IDPs_gen/IDPs_gen.py
+++ b/bip/pipelines/IDPs_gen/IDPs_gen.py
@@ -28,7 +28,8 @@ from bip.pipelines.IDPs_gen import IDP_func_TSNR
 from bip.pipelines.IDPs_gen import IDP_func_task_activation
 from bip.pipelines.IDPs_gen import IDP_diff_eddy_outliers
 from bip.pipelines.IDPs_gen import IDP_diff_TBSS
-from bip.pipelines.IDPs_gen import IDP_diff_autoPtx
+#from bip.pipelines.IDPs_gen import IDP_diff_autoPtx
+from bip.pipelines.IDPs_gen import IDPs_generator
 
 log = logging.getLogger(__name__)
 
@@ -109,10 +110,10 @@ def add_to_pipeline(ctx, pipe, tree, targets):
              kwargs={'ctx' : ctx})
         targets.append('IDP_diff_TBSS')
 
-        pipe(IDP_diff_autoPtx.run,
-             submit=dict(jobtime=200, name="BIP_IDP_diff_autoPtx_"+ subj),
-             kwargs={'ctx' : ctx})
-        targets.append('IDP_diff_autoPtx')
+        #pipe(IDP_diff_autoPtx.run,
+        #     submit=dict(jobtime=200, name="BIP_IDP_diff_autoPtx_"+ subj),
+        #     kwargs={'ctx' : ctx})
+        #targets.append('IDP_diff_autoPtx')
 
         pipe(IDP_subject_COG_table.run,
              submit=dict(jobtime=200, name="BIP_IDP_subject_COG_table_" + subj),
@@ -124,4 +125,9 @@ def add_to_pipeline(ctx, pipe, tree, targets):
              kwargs={'ctx' : ctx})
         targets.append('IDP_subject_centre')
 
+        pipe(IDPs_generator.run,
+             submit=dict(jobtime=200, name="BIP_IDPs_generator_" + subj),
+             kwargs={'ctx' : ctx})
+        targets.append('IDPs')
+
     return pipe, targets
diff --git a/bip/pipelines/IDPs_gen/IDPs_generator.py b/bip/pipelines/IDPs_gen/IDPs_generator.py
new file mode 100755
index 0000000000000000000000000000000000000000..aa81f15baff7780f513bb42d40125f709ca8af95
--- /dev/null
+++ b/bip/pipelines/IDPs_gen/IDPs_generator.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+#
+# IDP_diff_autoPtx.py - Generating IDP file with autoPtx metrics
+#
+# Author: Fidel Alfaro Almagro <fidel.alfaroalmagro@ndcn.ox.ac.uk>
+# Author: Paul McCarthy <pauldmccarthy@gmail.com>
+# Author: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk>
+#
+# pylint: disable=C0103,E0602,C0114,C0115,C0116,R0913,R0914,R0915
+#
+
+import os
+import json
+import logging
+from pipe_tree import In, Out, Ref
+from bip.utils.log_utils import redirect_logging
+
+log = logging.getLogger(__name__)
+
+def run(ctx,
+        IDP_subject_ID:           In(optional=True),
+        IDP_T1_align_to_std:      In(optional=True),
+        IDP_T1_noise_ratio:       In(optional=True),
+        IDP_all_align_to_T1:      In(optional=True),
+        IDP_func_head_motion:     In(optional=True),
+        IDP_func_TSNR:            In(optional=True),
+        IDP_diff_eddy_outliers:   In(optional=True),
+        IDP_T1_SIENAX:            In(optional=True),
+        IDP_T1_FIRST_vols:        In(optional=True),
+        IDP_T1_GM_parcellation:   In(optional=True),
+        IDP_T2_FLAIR_WMH:         In(optional=True),
+        IDP_SWI_T2star:           In(optional=True),
+        IDP_func_task_activation: In(optional=True),
+        IDP_diff_TBSS:            In(optional=True),
+        IDP_diff_autoPtx:         In(optional=True),
+        IDP_subject_COG_table:    In(optional=True),
+        IDP_subject_centre:       In(optional=True),
+        logs_dir:                 Ref,
+        IDPs:                     Out):
+
+    with redirect_logging('IDPs_generator', outdir=logs_dir):
+
+        result=""
+        IDPs_json_file = ctx.get_data("IDPs/IDPs.json")
+
+        with open(IDPs_json_file, "r", encoding="utf-8") as f:
+            IDPs_dict = json.load(f)
+
+        for IDP_file in [IDP_subject_ID, IDP_T1_align_to_std,IDP_T1_noise_ratio,
+                     IDP_all_align_to_T1, IDP_func_head_motion, IDP_func_TSNR,
+                     IDP_diff_eddy_outliers, IDP_T1_SIENAX, IDP_T1_FIRST_vols,
+                     IDP_T1_GM_parcellation, IDP_T2_FLAIR_WMH, IDP_SWI_T2star,
+                     IDP_func_task_activation, IDP_diff_TBSS, IDP_diff_autoPtx,
+                     IDP_subject_COG_table, IDP_subject_centre]:
+
+            plain_name = os.path.basename(IDP_file).replace(".txt", "")
+            num_IDPs = len(IDPs_dict[plain_name])
+            result_nans = ("NaN " * num_IDPs).strip()
+
+            if os.path.exists(IDP_file):
+                with open(IDP_file, "r", encoding="utf-8") as f:
+                    IDPs = f.read().strip().split()
+                if len(IDPs) != num_IDPs:
+                    result += " " + result_nans
+                else:
+                    result += " " + " ".join(IDPs)
+
+            else:
+                result += " " + result_nans
+
+        result = result.replace("  ", " ").strip()
+
+        with open(IDP_diff_autoPtx, 'wt', encoding="utf-8") as f:
+            f.write(f'{result}\n')