diff --git a/CMakeLists.txt b/CMakeLists.txt
index aa5e8c13fe89ef2610e5bcf1a1581089737485ad..3b062abff905e526a6d6e657e1d11f96c449c816 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -272,6 +272,7 @@ set(cpp_for_lib
     ${PROJECT_SOURCE_DIR}/cpp/full_code/symmetrize_test.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/field_output_test.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/get_rfields.cpp
+    ${PROJECT_SOURCE_DIR}/cpp/full_code/write_rpressure.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/bandpass_stats.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/field_single_to_double.cpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/resize.cpp
@@ -321,6 +322,7 @@ set(hpp_for_lib
     ${PROJECT_SOURCE_DIR}/cpp/full_code/symmetrize_test.hpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/field_output_test.hpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/get_rfields.hpp
+    ${PROJECT_SOURCE_DIR}/cpp/full_code/write_rpressure.hpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/bandpass_stats.hpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/field_single_to_double.hpp
     ${PROJECT_SOURCE_DIR}/cpp/full_code/resize.hpp
@@ -454,6 +456,10 @@ if (BUILD_TESTING)
         NAME test_pp_get_rfields
         COMMAND turtle PP get_rfields --simname dns_nsveparticles --iter0 0 --iter1 64
         WORKING_DIRECTORY ${TEST_OUTPUT_DIRECTORY})
+    add_test(
+        NAME test_pp_write_rpressure
+        COMMAND turtle PP write_rpressure --simname dns_nsveparticles --iter0 0 --iter1 64
+        WORKING_DIRECTORY ${TEST_OUTPUT_DIRECTORY})
     add_test(
         NAME test_pp_joint_acc_vel_stats
         COMMAND turtle PP joint_acc_vel_stats --simname dns_nsveparticles --iter0 0 --iter1 64
diff --git a/TurTLE/PP.py b/TurTLE/PP.py
index e1cebad2bc079fcca2843d2e6be63e2d9228b4bd..acf3b003c0881f89fbed97fffb67c897a6b00786 100644
--- a/TurTLE/PP.py
+++ b/TurTLE/PP.py
@@ -449,13 +449,17 @@ class PP(_code):
         parser_resize = subparsers.add_parser(
                 'resize',
                 help = 'get joint acceleration and velocity statistics')
+        parser_write_rpressure = subparsers.add_parser(
+                'write_rpressure',
+                help = 'write real pressure field to binary')
         for pp_type in [
                 'resize',
                 'joint_acc_vel_stats',
                 'bandpass_stats',
                 'get_rfields',
                 'field_single_to_double',
-                'native_binary_to_hdf5']:
+                'native_binary_to_hdf5',
+                'write_rpressure']:
             eval('self.simulation_parser_arguments(parser_' + pp_type + ')')
             eval('self.job_parser_arguments(parser_' + pp_type + ')')
             eval('self.parameters_to_parser_arguments(parser_' + pp_type + ')')
diff --git a/cpp/full_code/write_rpressure.cpp b/cpp/full_code/write_rpressure.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ceeca61c127f6d31424e805095cd73d5a0e1eb08
--- /dev/null
+++ b/cpp/full_code/write_rpressure.cpp
@@ -0,0 +1,138 @@
+#include <string>
+#include <cmath>
+#include "write_rpressure.hpp"
+#include "scope_timer.hpp"
+
+
+template <typename rnumber>
+int write_rpressure<rnumber>::initialize(void)
+{
+    
+    // initialize
+    this->NSVE_field_stats<rnumber>::initialize();   
+    
+    //iteration list needed by postprocess.cpp for the main loop
+    hid_t parameter_file = H5Fopen(
+            (this->simname + std::string("_post.h5")).c_str(),
+            H5F_ACC_RDONLY,
+            H5P_DEFAULT);
+    this->iteration_list = hdf5_tools::read_vector<int>(
+            parameter_file,
+            "/write_rpressure/parameters/iteration_list");
+    H5Fclose(parameter_file);
+    if (this->myrank==0) DEBUG_MSG("Iteration list[0] = %d \n", this->iteration_list[0]);
+    
+    //get the pressure from here
+    this->ve = new vorticity_equation<rnumber, FFTW>(
+            this->simname.c_str(),
+            this->nx,
+            this->ny,
+            this->nz,
+            this->dkx,
+            this->dky,
+            this->dkz,
+            this->vorticity->fftw_plan_rigor);
+    
+    // output field
+    this->pressure = new field<rnumber, FFTW, ONE>(
+            this->nx, this->ny, this->nz,
+            this->comm,
+            this->vorticity->fftw_plan_rigor);
+    
+    // write to binary 
+    this->bin_IO_scalar = new field_binary_IO<rnumber, REAL, ONE>(
+                this->pressure->rlayout->sizes,
+                this->pressure->rlayout->subsizes,
+                this->pressure->rlayout->starts,
+                this->pressure->rlayout->comm);
+    
+    if (this->myrank==0) DEBUG_MSG("Initialize end\n");
+    return EXIT_SUCCESS;
+}
+
+template <typename rnumber>
+int write_rpressure<rnumber>::clip_zero_padding(
+    field <rnumber, FFTW, ONE>* f)
+{
+    rnumber *a = f->get_rdata();
+    rnumber *b = f->get_rdata();
+    ptrdiff_t copy_size = f->rlayout->sizes[2] * ncomp(ONE);
+    ptrdiff_t skip_size = copy_size + 2*ncomp(ONE);
+    for (int i0 = 0; i0 < f->rlayout->subsizes[0]; i0++)
+        for (int i1 = 0; i1 < f->rlayout->sizes[1]; i1++)
+        {
+            std::copy(a, a + copy_size, b);
+            a += skip_size;
+            b += copy_size;
+        }
+    return EXIT_SUCCESS;
+}
+
+
+template <typename rnumber>
+int write_rpressure<rnumber>::work_on_current_iteration(void)
+{
+    if (this->myrank==0) DEBUG_MSG("\nComputing the pressure\n");
+    //compute_pressure    
+    this->read_current_cvorticity();
+    *this->ve->cvorticity = this->vorticity->get_cdata();
+    
+    this->ve->compute_velocity(this->ve->cvorticity);
+    this->ve->cvelocity->ift();
+    this->ve->compute_pressure(this->pressure);
+    
+    
+    if (this->myrank==0) DEBUG_MSG("Computed the pressure\n");
+    
+    if (this->myrank==0) DEBUG_MSG("vorticity in ve fourier = [%lG, %lG; ...; %lG, %lG;  %lG, %lG;.....; %lG, %lG;] \n", this->vorticity->get_cdata()[0][0], this->vorticity->get_cdata()[0][1], this->vorticity->get_cdata()[1][0], this->vorticity->get_cdata()[1][1], this->vorticity->get_cdata()[2][0], this->vorticity->get_cdata()[2][1],this->vorticity->get_cdata()[65][0], this->vorticity->get_cdata()[65][1]); 
+   
+    if (this->myrank==0) DEBUG_MSG("vorticity in ve fourier = [%lG, %lG; ...; %lG, %lG;  %lG, %lG;.....; %lG, %lG;] \n", this->ve->cvorticity->get_cdata()[0][0], this->ve->cvorticity->get_cdata()[0][1], this->ve->cvorticity->get_cdata()[1][0], this->ve->cvorticity->get_cdata()[1][1], this->ve->cvorticity->get_cdata()[2][0], this->ve->cvorticity->get_cdata()[2][1],this->ve->cvorticity->get_cdata()[65][0], this->ve->cvorticity->get_cdata()[65][1]);
+    this->ve->compute_velocity(this->vorticity);
+    
+    if (this->myrank==0) DEBUG_MSG("velocity in ve fourier = [%lG, %lG; ...; %lG, %lG;  %lG, %lG;.....; %lG, %lG;] \n", this->ve->u->get_cdata()[0][0], this->ve->u->get_cdata()[0][1], this->ve->u->get_cdata()[1][0], this->ve->u->get_cdata()[1][1], this->ve->u->get_cdata()[2][0], this->ve->u->get_cdata()[2][1],this->ve->u->get_cdata()[65][0], this->ve->u->get_cdata()[65][1]);
+    
+    if (this->myrank==0) DEBUG_MSG("pressure fourier = [%lG, %lG; ...; %lG, %lG;  %lG, %lG;.....; %lG, %lG;] \n", this->pressure->get_cdata()[0][0], this->pressure->get_cdata()[0][1], this->pressure->get_cdata()[1][0], this->pressure->get_cdata()[1][1], this->pressure->get_cdata()[2][0], this->pressure->get_cdata()[2][1],this->pressure->get_cdata()[65][0], this->pressure->get_cdata()[65][1]);
+     
+    //transform to real space
+    if (this->pressure->real_space_representation == false)  
+        this->pressure->ift();
+    
+    if (this->myrank==0) DEBUG_MSG("Real space\n");
+    
+    if (this->myrank==0) DEBUG_MSG("pressure before clipping = [%lG; ...; %lG;.....; %lG;] \n", this->pressure->get_rdata()[0], this->pressure->get_rdata()[2], this->pressure->get_rdata()[13549]);
+    
+    //write out to file
+    this->clip_zero_padding(pressure);
+    if (this->myrank==0) DEBUG_MSG("pressure after clipping = [%lG; ...; %lG;.....; %lG;] \n", this->pressure->get_rdata()[0], this->pressure->get_rdata()[2], this->pressure->get_rdata()[13549]);
+    
+    //write to file -- THIS IS OK
+    char itername[16];
+    sprintf(itername, "i%.5x", this->iteration);
+    std::string native_binary_fname;
+
+    native_binary_fname = (
+            this->simname +
+            std::string("_rpressure_") +
+            std::string(itername));
+    if (this->myrank ==0) DEBUG_MSG("%s\n", native_binary_fname.c_str());
+    
+    this->bin_IO_scalar->write(
+            native_binary_fname,
+            this->pressure->get_rdata());
+    return EXIT_SUCCESS;
+}
+
+template <typename rnumber>
+int write_rpressure<rnumber>::finalize(void)
+{
+     
+    delete this->bin_IO_scalar;
+    delete this->pressure;
+    delete this->ve;   
+    this->NSVE_field_stats<rnumber>::finalize();
+    return EXIT_SUCCESS;
+}
+
+template class write_rpressure<float>;
+template class write_rpressure<double>;
+
diff --git a/cpp/full_code/write_rpressure.hpp b/cpp/full_code/write_rpressure.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..e7e2d6d9c86c16bf3297fb7c5856ecfd86c23824
--- /dev/null
+++ b/cpp/full_code/write_rpressure.hpp
@@ -0,0 +1,68 @@
+/**********************************************************************
+*                                                                     *
+*  Copyright 2017 Max Planck Institute                                *
+*                 for Dynamics and Self-Organization                  *
+*                                                                     *
+*  This file is part of bfps.                                         *
+*                                                                     *
+*  bfps is free software: you can redistribute it and/or modify       *
+*  it under the terms of the GNU General Public License as published  *
+*  by the Free Software Foundation, either version 3 of the License,  *
+*  or (at your option) any later version.                             *
+*                                                                     *
+*  bfps is distributed in the hope that it will be useful,            *
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of     *
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      *
+*  GNU General Public License for more details.                       *
+*                                                                     *
+*  You should have received a copy of the GNU General Public License  *
+*  along with bfps.  If not, see <http://www.gnu.org/licenses/>       *
+*                                                                     *
+* Contact: Cristian.Lalescu@ds.mpg.de                                 *
+*                                                                     *
+**********************************************************************/
+
+
+
+#ifndef WRITE_RPRESSURE
+#define WRITE_RPRESSURE
+
+#include <cstdlib>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <vector>
+#include "base.hpp"
+#include "field.hpp"
+#include "field_binary_IO.hpp"
+#include "vorticity_equation.hpp"
+#include "full_code/NSVE_field_stats.hpp"
+
+/** generate and write out pressure field in real space **/
+
+template <typename rnumber>
+class write_rpressure: public NSVE_field_stats<rnumber>
+{
+    public:
+        int niter_out;
+        
+        vorticity_equation<rnumber, FFTW> *ve;        
+        field<rnumber, FFTW, ONE> *pressure;
+        field_binary_IO <rnumber, REAL, ONE> *bin_IO_scalar;        
+        int clip_zero_padding(field <rnumber, FFTW, ONE>* );
+        
+        write_rpressure(
+                const MPI_Comm COMMUNICATOR,
+                const std::string &simulation_name):
+            NSVE_field_stats<rnumber>(
+                    COMMUNICATOR,
+                    simulation_name){}
+        virtual ~write_rpressure(){}
+
+        int initialize(void);
+        int work_on_current_iteration(void);
+        int finalize(void);
+};
+
+
+#endif//WRITE_PRESSURE
+
diff --git a/cpp/vorticity_equation.cpp b/cpp/vorticity_equation.cpp
index f062667104303cf50b15c903eca319eddc880595..31a46cddeb18b77f4d4049f14350e07bb66472bb 100644
--- a/cpp/vorticity_equation.cpp
+++ b/cpp/vorticity_equation.cpp
@@ -595,7 +595,9 @@ void vorticity_equation<rnumber, be>::compute_pressure(field<rnumber, be, ONE> *
     TIMEZONE("vorticity_equation::compute_pressure");
     pressure->real_space_representation = false;
     /* assume velocity is already in real space representation */
-
+    /* set the pressure representation to Fourier space */
+    pressure->real_space_representation = false;
+    
     this->v[1]->real_space_representation = true;
     /* diagonal terms 11 22 33 */
     this->v[1]->RLOOP (