diff --git a/patches/gromacs-5.1.2.diff/src/programs/mdrun/md.cpp b/patches/gromacs-5.1.2.diff/src/programs/mdrun/md.cpp
index dade566c5e3836dc572000709101488bf1cc4ffa..7af01c2a57fc05aea99fb6c7a5bfa41b91773283 100644
--- a/patches/gromacs-5.1.2.diff/src/programs/mdrun/md.cpp
+++ b/patches/gromacs-5.1.2.diff/src/programs/mdrun/md.cpp
@@ -1063,10 +1063,10 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[],
             repl=replica_exchange_get_repl(repl_ex);
             nrepl=replica_exchange_get_nrepl(repl_ex);
           }
-          if (PAR(cr)) {
-            if (DOMAINDECOMP(cr))
-              dd_collect_state(cr->dd,state,state_global);
-          }
+          if (DOMAINDECOMP(cr))
+            dd_collect_state(cr->dd,state,state_global);
+          else
+            copy_state_nonatomdata(state, state_global);
           if(MASTER(cr)){
             if(repl%2==step/repl_ex_nst%2){
               if(repl-1>=0) exchange_state(cr->ms,repl-1,state_global);
@@ -1074,6 +1074,8 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[],
               if(repl+1<nrepl) exchange_state(cr->ms,repl+1,state_global);
             }
           }
+          if (!DOMAINDECOMP(cr))
+            copy_state_nonatomdata(state_global, state);
           if(PAR(cr)){
             if (DOMAINDECOMP(cr)) {
               dd_partition_system(fplog,step,cr,TRUE,1,
@@ -1099,10 +1101,10 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[],
           sfree(hrex_enerd);
 
 /* exchange back */
-          if (PAR(cr)) {
-            if (DOMAINDECOMP(cr))
-              dd_collect_state(cr->dd,state,state_global);
-          }
+          if (DOMAINDECOMP(cr))
+            dd_collect_state(cr->dd,state,state_global);
+          else
+            copy_state_nonatomdata(state, state_global);
           if(MASTER(cr)){
             if(repl%2==step/repl_ex_nst%2){
               if(repl-1>=0) exchange_state(cr->ms,repl-1,state_global);
@@ -1110,6 +1112,8 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[],
               if(repl+1<nrepl) exchange_state(cr->ms,repl+1,state_global);
             }
           }
+          if (!DOMAINDECOMP(cr))
+            copy_state_nonatomdata(state_global, state);
           if(PAR(cr)){
             if (DOMAINDECOMP(cr)) {
               dd_partition_system(fplog,step,cr,TRUE,1,
diff --git a/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.cpp b/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.cpp
index b42f551376e58d39e1fec537c7336abe4b62b192..63eac8236921fb0dbc752d02315f01aea7a09acf 100644
--- a/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.cpp
+++ b/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.cpp
@@ -651,7 +651,7 @@ static void copy_ints(const int *s, int *d, int n)
 #define scopy_reals(v, n) copy_reals(state->v, state_local->v, n);
 #define scopy_ints(v, n)   copy_ints(state->v, state_local->v, n);
 
-static void copy_state_nonatomdata(t_state *state, t_state *state_local)
+void copy_state_nonatomdata(t_state *state, t_state *state_local)
 {
     /* When t_state changes, this code should be updated. */
     int ngtc, nnhpres;
diff --git a/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.h b/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.h
index aa51f07b440ed436ebc85454d15d0d4b459f8d28..29d7bfa4954834b9b02dcaed60e0e4f496e3ff67 100644
--- a/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.h
+++ b/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.h
@@ -76,6 +76,7 @@ extern int replica_exchange_get_repl(const gmx_repl_ex_t re);
 extern int replica_exchange_get_nrepl(const gmx_repl_ex_t re);
 extern void pd_collect_state(const t_commrec *cr, t_state *state);
 extern void exchange_state(const gmx_multisim_t *ms, int b, t_state *state);
+extern void copy_state_nonatomdata(t_state *state, t_state *state_local);
 
 #ifdef __cplusplus
 }