diff --git a/TNRT/hosts b/TNRT/hosts
index 043009e12cae8f717a5478f76a7017a017269191..7c20e48c2882bff1eac18692ba4c9b85d086cd80 100644
--- a/TNRT/hosts
+++ b/TNRT/hosts
@@ -3,7 +3,7 @@ all:
   children:
     gpu_server:
       hosts:
-        192.168.90.[7:8]
+        192.168.90.[6:8]
 
     infrastructure_server: # grafana, influx, etc (without high speed data access)
       hosts:
diff --git a/basic_configuration/main.yml b/basic_configuration/main.yml
index 1d937711b2508f4bbd1eefd91403c8fd6e082341..f6ae41ee4479df935ccd063e5f99694d10a66d38 100644
--- a/basic_configuration/main.yml
+++ b/basic_configuration/main.yml
@@ -88,7 +88,7 @@
 
 - name: launch grafana
   hosts: grafana
-  gather_facts: no
+  gather_facts: yes
   roles:
     - grafana_monitoring
   tags:
diff --git a/effelsberg_production/data b/effelsberg_production/data
new file mode 120000
index 0000000000000000000000000000000000000000..101089d9670390e1e61a28a4dc9c055504cfc846
--- /dev/null
+++ b/effelsberg_production/data
@@ -0,0 +1 @@
+../effelsberg_devel/data
\ No newline at end of file
diff --git a/effelsberg_production/group_vars/all.yml b/effelsberg_production/group_vars/all.yml
index 55c7dc80be66357ded21b3ac2cc9441bfb6d5851..d12564a3f07a208932430cd44f13eb7c554accff 100644
--- a/effelsberg_production/group_vars/all.yml
+++ b/effelsberg_production/group_vars/all.yml
@@ -6,7 +6,7 @@
 # provisioning systems. The default "latest" is set in the common role and
 # overriden here for the production environment.
 
-version_tag: "220307.0"
+version_tag: "220314.0"
 
   # These settings specify the repositories used to build the EDD
 # In particular useful to be tweaked in a local custom mysite_dev inventory to develop  the provisioning system.
diff --git a/provison_descriptions/TNRT_dualpol_spectrometer.yml b/provison_descriptions/TNRT_dualpol_spectrometer.yml
index db461472d79baaf174712722fef1d14b4b39fc46..e00c10e5b7023fd96985d14da379482509be85c7 100644
--- a/provison_descriptions/TNRT_dualpol_spectrometer.yml
+++ b/provison_descriptions/TNRT_dualpol_spectrometer.yml
@@ -12,8 +12,8 @@
     - role: gated_spectrometer
       container_name: gated_spectrometer_1
 
-- hosts: infrastructure_server[0]
+- hosts: gpu_server[2]
   roles:
-    - role: fits_interface 
+    - role: fits_interface
     - role: dig_pack_controller
       device: packetizer
diff --git a/provison_descriptions/fits_writer_test.json b/provison_descriptions/fits_writer_test.json
new file mode 100644
index 0000000000000000000000000000000000000000..09477a16e11f21189bfe98cd1247e2c49e5bd239
--- /dev/null
+++ b/provison_descriptions/fits_writer_test.json
@@ -0,0 +1,96 @@
+{
+    "products":
+    [
+    {
+          "id":"dig_pack_controller",
+          "bit_depth" : 8,
+          "sampling_rate": 4000000000.0,
+          "predecimation_factor": 4,
+          "flip_spectrum": false,
+          "noise_diode_pattern": {"percentage":0.5, "period": 0.01},
+          "output_data_streams":
+          {
+              "polarization_0" :
+              {
+                  "format": "MPIFR_EDD_Packetizer:1",
+                  "ip": "225.0.3.162+3",
+                  "port": "7148"
+              },
+               "polarization_1" :
+              {
+                  "format": "MPIFR_EDD_Packetizer:1",
+                  "ip": "225.0.3.166+3",
+                  "port": "7148"
+              }
+          }
+      },
+			{
+       "id": "gated_spectrometer",
+        "input_data_streams":
+        [
+            {
+                "source": "dig_pack_controller:polarization_0",
+                "format": "MPIFR_EDD_Packetizer:1"
+            },
+            {
+                "source": "dig_pack_controller:polarization_1",
+                "format": "MPIFR_EDD_Packetizer:1"
+            }
+        ],
+"output_data_streams":
+        {
+            "polarization_0_0" :
+            {
+                "format": "GatedSpectrometer:1",
+                "ip": "225.0.0.172",
+                "port": "7152"
+            },
+            "polarization_0_1" :
+            {
+                "format": "GatedSpectrometer:1",
+                "ip": "225.0.0.173",
+                "port": "7152"
+            },
+             "polarization_1_0" :
+            {
+                "format": "GatedSpectrometer:1",
+                "ip": "225.0.0.174",
+                "port": "7152"
+            },
+             "polarization_1_1" :
+            {
+                "format": "GatedSpectrometer:1",
+                "port": "7152"
+            }
+        },
+
+        "naccumulate": 4096,
+        "fft_length": 262144
+      },
+      {
+       "id": "fits_interface",
+        "input_data_streams":
+        [
+          {
+            "source": "gated_spectrometer:polarization_0_0",
+            "format": "GatedSpectrometer:1"
+          },
+          {
+            "source": "gated_spectrometer:polarization_0_1",
+            "format": "GatedSpectrometer:1"
+          },
+          {
+            "source": "gated_spectrometer:polarization_1_0",
+            "format": "GatedSpectrometer:1"
+          },
+          {
+            "source": "gated_spectrometer:polarization_1_1",
+            "format": "GatedSpectrometer:1"
+          }
+        ]
+    },
+    {
+	    "id": "mock_fits_writer"
+    }
+    ]
+}
diff --git a/provison_descriptions/fits_writer_test.yml b/provison_descriptions/fits_writer_test.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ba4e175eb27cc535150d9c128cecebd6b9d4a017
--- /dev/null
+++ b/provison_descriptions/fits_writer_test.yml
@@ -0,0 +1,19 @@
+---
+########################################################################
+# Provision configuration for the run. This defines which edd components are
+# set up.
+- hosts: gpu_server[1]
+  vars:
+    edd_group: 9640
+  roles:
+    - gated_spectrometer
+    - mock_fits_writer
+
+- hosts: gpu_server[0]
+  vars:
+    edd_group: 9640
+  roles:
+    - role: fits_interface
+    - role: dig_pack_controller
+      device: packetizer-sfk-02
+
diff --git a/roles/edd_base/defaults/main.yml b/roles/edd_base/defaults/main.yml
index 8e8459d2513b4684efdb8c4c8f1c7f02e98ed022..97b234640acab62a1ad1778f6c895b946e0e2594 100644
--- a/roles/edd_base/defaults/main.yml
+++ b/roles/edd_base/defaults/main.yml
@@ -8,3 +8,4 @@ psrdada_version: 10513fff767ce9922c3423eb7199c64f9301d1c8
 spead2_tag: v1.8.0
 mkrecv_tag: e62a45019b33ed39f9e5e050bf5a36db3f297a29
 mksend_tag: 9ca25fa27a3838f4197157f14531defa8373f48c
+psrdadacpp_tag: 7db5188eb79c66834aa35210661dc98f7e2f3a41
diff --git a/roles/edd_base/tasks/main.yml b/roles/edd_base/tasks/main.yml
index 13f2ab7b587734a404d34cec58e16a7b249fb5d5..2d00baf210b67cbaad3da5a2ad23e57d258adea9 100644
--- a/roles/edd_base/tasks/main.yml
+++ b/roles/edd_base/tasks/main.yml
@@ -43,7 +43,7 @@
       build:
         pull: yes
         path: "{{ build_directory.path }}"
-        nocache: true
+        nocache: false
       push: yes
       tag: "{{ version_tag }}"
 
@@ -80,7 +80,7 @@
       build:
         pull: yes
         path: "{{ build_directory.path }}"
-        nocache: true
+        nocache: false 
       push: yes
       tag: "{{ version_tag }}"
 
diff --git a/roles/edd_base/templates/Dockerfile b/roles/edd_base/templates/Dockerfile
index 34d0f8755fb7f44e7b93f24b5796ac269088c739..048ca7dc00826c100ee0317e7b830e2cba20ca0a 100644
--- a/roles/edd_base/templates/Dockerfile
+++ b/roles/edd_base/templates/Dockerfile
@@ -89,7 +89,7 @@ RUN cd /src && \
     git clone https://gitlab.mpcdf.mpg.de/mpifr-bdg/psrdada_cpp.git && \
     cd psrdada_cpp/ &&\
     ### Could be lib for lib layout in VLBI mode \
-    git checkout devel &&\
+    git checkout {{ psrdadacpp_tag }}&& \
     git submodule init &&\
     git submodule update &&\
     mkdir build/ &&\
diff --git a/roles/pulsar_pipeline/defaults/main.yml b/roles/pulsar_pipeline/defaults/main.yml
index 9af2fbfbf10a83ce3e43596f8ff6d5613ce5c543..d6fc6003d62817ca8b2e0d6fa64ab07d05ede8da 100644
--- a/roles/pulsar_pipeline/defaults/main.yml
+++ b/roles/pulsar_pipeline/defaults/main.yml
@@ -1 +1,8 @@
 version_tag: "latest"
+dspsr_version: b7681979a8395d2cd922dba655de1bfd89e54c2b
+psrxml_version: f743742b2a57806f339022acd878f5aeb13548b9
+tempo2_version: 7777e1f049de4d7e650950f934996b9d637d7ebb 
+tempo_version: 416a8fb842f0cd320bb86cc9720d9e12ca49c10f
+dal_version: bcfb0dbe685743af9dd5b56e146d8d0965b0938b
+epsic_version: cff69131f2f02e6f4f807fc6f4a629695cfc7dbf
+
diff --git a/roles/pulsar_pipeline/tasks/main.yml b/roles/pulsar_pipeline/tasks/main.yml
index e91210d9eeaf274fc5a73755d0a7bde2fa0a36e3..ee499488702204e80ef691f397e2ab0c496e47df 100644
--- a/roles/pulsar_pipeline/tasks/main.yml
+++ b/roles/pulsar_pipeline/tasks/main.yml
@@ -5,13 +5,6 @@
 #
 - name: Build pulsar base docker image
   block:
-    - name: Remove image
-      docker_image:
-        name : "{{ docker_registry }}:{{ docker_registry_port }}/pulsar_base"
-        state: absent
-        force_absent: yes
-        tag: "{{ version_tag }}"
-
     - name: Create build directory
       tempfile:
         state: directory
@@ -31,7 +24,7 @@
         build:
           path: "{{ build_directory.path }}"
           pull: yes
-          nocache: true
+          nocache: false
         push: yes
         tag: "{{ version_tag }}"
 
diff --git a/roles/pulsar_pipeline/templates/Dockerfile_pulsarbase b/roles/pulsar_pipeline/templates/Dockerfile_pulsarbase
index 6e5c0ed4949e23bcf67189900e6c83c068d2ec7a..773c715d7103f5d185be0062b362ceb24baa04b1 100644
--- a/roles/pulsar_pipeline/templates/Dockerfile_pulsarbase
+++ b/roles/pulsar_pipeline/templates/Dockerfile_pulsarbase
@@ -82,7 +82,8 @@ RUN wget http://www.atnf.csiro.au/people/pulsar/psrcat/downloads/psrcat_pkg.tar.
 ENV PATH=$PATH:$PSRHOME/epsic/src
 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PSRHOME/epsic/src/.lib
 WORKDIR $PSRHOME/epsic/src/
-RUN ./bootstrap && \
+RUN git checkout {{epsic_version}} && \
+    ./bootstrap && \
     ./configure &&\
     make -j $(nproc) && \
     make install && \
@@ -103,7 +104,8 @@ ENV PATH=$PATH:$DAL/install/bin
 ENV C_INCLUDE_PATH=$C_INCLUDE_PATH:$DAL/install/include
 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DAL/install/lib
 WORKDIR $DAL
-RUN mkdir build && cd $DAL/build &&\
+RUN git checkout {{dal_version}} && \
+    mkdir build && cd $DAL/build &&\
     cmake .. -DCMAKE_INSTALL_PREFIX=$DAL/install && \
     make -j $(nproc) && \
     make && \
@@ -126,8 +128,9 @@ ENV PATH $PATH:$PSRXML/install/bin
 ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:$PSRXML/install/lib
 ENV C_INCLUDE_PATH $C_INCLUDE_PATH:$PSRXML/install/include
 WORKDIR $PSRXML
-RUN autoreconf --install --warnings=none
-RUN ./configure --prefix=$PSRXML/install && \
+RUN git checkout {{ psrxml_version }} && \
+    autoreconf --install --warnings=none && \
+    ./configure --prefix=$PSRXML/install && \
     make -j $(nproc) && \
     make install && \
     rm -rf .git
@@ -139,7 +142,8 @@ ENV C_INCLUDE_PATH=$C_INCLUDE_PATH:$PSRHOME/tempo2/T2runtime/include
 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PSRHOME/tempo2/T2runtime/lib
 WORKDIR $PSRHOME/tempo2
 RUN sync && perl -pi -e 's/chmod \+x/#chmod +x/' bootstrap # Get rid of: returned a non-zero code: 126.
-RUN ./bootstrap && \
+RUN git checkout {{tempo2_version}} && \
+    ./bootstrap && \
     ./configure --x-libraries=/usr/lib/x86_64-linux-gnu  --with-calceph=$CALCEPH/install/lib --enable-shared --enable-static --with-pic F77=gfortran LDFLAGS="-L"$CALCEPH"/install/lib" CPPFLAGS="-I"$CALCEPH"/install/include" && \
     make -j $(nproc) && \
     make install && \
@@ -149,7 +153,8 @@ RUN ./bootstrap && \
 ENV TEMPO=$PSRHOME"/tempo"
 ENV PATH=$PATH:$PSRHOME"/tempo/bin"
 WORKDIR $PSRHOME/tempo
-RUN ./prepare && \
+RUN git checkout {{tempo_version}} &&\
+    ./prepare && \
     ./configure --prefix=$PSRHOME/tempo && \
     make -j $(nproc) && \
     make install && \
@@ -176,7 +181,7 @@ ENV PATH=$PATH:$PSRHOME"/dspsr/install/bin"
 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PSRHOME"/dspsr/install/lib"
 ENV C_INCLUDE_PATH=$C_INCLUDE_PATH:$PSRHOME"/dspsr/install/include"
 WORKDIR $DSPSR
-RUN git checkout b7681979a8395d2cd922dba655de1bfd89e54c2b && \
+RUN git checkout {{ dspsr_version }} && \
     sed -i s/-lgsl/-lgsl\ -fopenmp/ /usr/local/bin/psrdada_ldflags && \
     ./bootstrap && \
     echo "dada fits sigproc" > backends.list && \