diff --git a/patches/gromacs-2016.1.diff/src/gromacs/CMakeLists.txt b/patches/gromacs-2016.1.diff/src/gromacs/CMakeLists.txt
index dfb7260dff9b42ff3f523c47e57fd639909f737e..ddd01e76ef4ad85ae7c67015daa51db8fb7d3a3c 100644
--- a/patches/gromacs-2016.1.diff/src/gromacs/CMakeLists.txt
+++ b/patches/gromacs-2016.1.diff/src/gromacs/CMakeLists.txt
@@ -123,8 +123,10 @@ list(APPEND LIBGROMACS_SOURCES ${GMXLIB_SOURCES} ${MDLIB_SOURCES} ${PROPERTY_SOU
 tmpi_get_source_list(THREAD_MPI_SOURCES ${CMAKE_SOURCE_DIR}/src/external/thread_mpi/src)
 list(APPEND LIBGROMACS_SOURCES ${THREAD_MPI_SOURCES})
 
-list(APPEND LIBGROMACS_SOURCES ${TNG_SOURCES})
-tng_set_source_properties(WITH_ZLIB ${HAVE_ZLIB})
+if(GMX_USE_TNG)
+    list(APPEND LIBGROMACS_SOURCES ${TNG_SOURCES})
+    tng_set_source_properties(WITH_ZLIB ${HAVE_ZLIB})
+endif()
 
 get_lmfit_properties(LMFIT_SOURCES LMFIT_LIBRARIES_TO_LINK LMFIT_INCLUDE_DIRECTORY LMFIT_INCLUDE_DIR_ORDER)
 include_directories(${LMFIT_INCLUDE_DIR_ORDER} SYSTEM "${LMFIT_INCLUDE_DIRECTORY}")
diff --git a/patches/gromacs-2016.1.diff/src/gromacs/CMakeLists.txt.preplumed b/patches/gromacs-2016.1.diff/src/gromacs/CMakeLists.txt.preplumed
index fd321f1e1cbbe81b98e100baaeff7aabeebd6004..b7d9bf47da46e371f6dfbcddc33fe1a390d1d174 100644
--- a/patches/gromacs-2016.1.diff/src/gromacs/CMakeLists.txt.preplumed
+++ b/patches/gromacs-2016.1.diff/src/gromacs/CMakeLists.txt.preplumed
@@ -121,8 +121,10 @@ list(APPEND LIBGROMACS_SOURCES ${GMXLIB_SOURCES} ${MDLIB_SOURCES} ${PROPERTY_SOU
 tmpi_get_source_list(THREAD_MPI_SOURCES ${CMAKE_SOURCE_DIR}/src/external/thread_mpi/src)
 list(APPEND LIBGROMACS_SOURCES ${THREAD_MPI_SOURCES})
 
-list(APPEND LIBGROMACS_SOURCES ${TNG_SOURCES})
-tng_set_source_properties(WITH_ZLIB ${HAVE_ZLIB})
+if(GMX_USE_TNG)
+    list(APPEND LIBGROMACS_SOURCES ${TNG_SOURCES})
+    tng_set_source_properties(WITH_ZLIB ${HAVE_ZLIB})
+endif()
 
 get_lmfit_properties(LMFIT_SOURCES LMFIT_LIBRARIES_TO_LINK LMFIT_INCLUDE_DIRECTORY LMFIT_INCLUDE_DIR_ORDER)
 include_directories(${LMFIT_INCLUDE_DIR_ORDER} SYSTEM "${LMFIT_INCLUDE_DIRECTORY}")
diff --git a/patches/gromacs-2016.1.diff/src/gromacs/mdlib/force.cpp b/patches/gromacs-2016.1.diff/src/gromacs/mdlib/force.cpp
index 3bee45971a7e763451ebb77a43f40c0c2f2cb3eb..fef6c62d12f35194d7bcbdfcc9936d300201af04 100644
--- a/patches/gromacs-2016.1.diff/src/gromacs/mdlib/force.cpp
+++ b/patches/gromacs-2016.1.diff/src/gromacs/mdlib/force.cpp
@@ -366,7 +366,7 @@ void do_force_lowlevel(t_forcerec *fr,      t_inputrec *ir,
                    TRUE, box);
     }
 
-    do_force_listed(wcycle, box, ir->fepvals, cr->ms,
+    do_force_listed(wcycle, box, ir->fepvals, cr,
                     idef, (const rvec *) x, hist, f, fr,
                     &pbc, graph, enerd, nrnb, lambda, md, fcd,
                     DOMAINDECOMP(cr) ? cr->dd->gatindex : NULL,
@@ -456,8 +456,7 @@ void do_force_lowlevel(t_forcerec *fr,      t_inputrec *ir,
                          * exclusion forces) are calculated, so we can store
                          * the forces in the normal, single fr->f_novirsum array.
                          */
-                        ewald_LRcorrection(fr->excl_load[t], fr->excl_load[t+1],
-                                           cr, t, fr,
+                        ewald_LRcorrection(md->homenr, cr, nthreads, t, fr,
                                            md->chargeA, md->chargeB,
                                            md->sqrt_c6A, md->sqrt_c6B,
                                            md->sigmaA, md->sigmaB,
diff --git a/patches/gromacs-2016.1.diff/src/gromacs/mdlib/force.cpp.preplumed b/patches/gromacs-2016.1.diff/src/gromacs/mdlib/force.cpp.preplumed
index 107e00a8e7b3393ec0eaf42a07f584d29c6ea4eb..fa592e1993b0a7736fe2c524975858c6f2c0bf29 100644
--- a/patches/gromacs-2016.1.diff/src/gromacs/mdlib/force.cpp.preplumed
+++ b/patches/gromacs-2016.1.diff/src/gromacs/mdlib/force.cpp.preplumed
@@ -359,7 +359,7 @@ void do_force_lowlevel(t_forcerec *fr,      t_inputrec *ir,
                    TRUE, box);
     }
 
-    do_force_listed(wcycle, box, ir->fepvals, cr->ms,
+    do_force_listed(wcycle, box, ir->fepvals, cr,
                     idef, (const rvec *) x, hist, f, fr,
                     &pbc, graph, enerd, nrnb, lambda, md, fcd,
                     DOMAINDECOMP(cr) ? cr->dd->gatindex : NULL,
@@ -449,8 +449,7 @@ void do_force_lowlevel(t_forcerec *fr,      t_inputrec *ir,
                          * exclusion forces) are calculated, so we can store
                          * the forces in the normal, single fr->f_novirsum array.
                          */
-                        ewald_LRcorrection(fr->excl_load[t], fr->excl_load[t+1],
-                                           cr, t, fr,
+                        ewald_LRcorrection(md->homenr, cr, nthreads, t, fr,
                                            md->chargeA, md->chargeB,
                                            md->sqrt_c6A, md->sqrt_c6B,
                                            md->sigmaA, md->sigmaB,
diff --git a/patches/gromacs-2016.1.diff/src/gromacs/mdlib/minimize.cpp b/patches/gromacs-2016.1.diff/src/gromacs/mdlib/minimize.cpp
index 6282d144cb36d7f660aa4b952ed25a3757e0c24f..7585cdbe09ec09c994e52f6499b59efc9ddcc3d4 100644
--- a/patches/gromacs-2016.1.diff/src/gromacs/mdlib/minimize.cpp
+++ b/patches/gromacs-2016.1.diff/src/gromacs/mdlib/minimize.cpp
@@ -408,8 +408,6 @@ void init_em(FILE *fplog, const char *title,
 
         *top      = gmx_mtop_generate_local_top(top_global, ir->efep != efepNO);
 
-        forcerec_set_excl_load(fr, *top);
-
         setup_bonded_threading(fr, &(*top)->idef);
 
         if (ir->ePBC != epbcNONE && !fr->bMolPBC)
@@ -626,9 +624,7 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
 
 {
     t_state *s1, *s2;
-    int      i;
     int      start, end;
-    rvec    *x1, *x2;
     real     dvdl_constr;
     int      nthreads gmx_unused;
 
@@ -661,7 +657,7 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
     s2->natoms = s1->natoms;
     copy_mat(s1->box, s2->box);
     /* Copy free energy state */
-    for (i = 0; i < efptNR; i++)
+    for (int i = 0; i < efptNR; i++)
     {
         s2->lambda[i] = s1->lambda[i];
     }
@@ -670,18 +666,16 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
     start = 0;
     end   = md->homenr;
 
-    x1 = s1->x;
-    x2 = s2->x;
-
     // cppcheck-suppress unreadVariable
     nthreads = gmx_omp_nthreads_get(emntUpdate);
 #pragma omp parallel num_threads(nthreads)
     {
-        int gf, i, m;
+        rvec *x1 = s1->x;
+        rvec *x2 = s2->x;
 
-        gf = 0;
+        int   gf = 0;
 #pragma omp for schedule(static) nowait
-        for (i = start; i < end; i++)
+        for (int i = start; i < end; i++)
         {
             try
             {
@@ -689,7 +683,7 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
                 {
                     gf = md->cFREEZE[i];
                 }
-                for (m = 0; m < DIM; m++)
+                for (int m = 0; m < DIM; m++)
                 {
                     if (ir->opts.nFreeze[gf][m])
                     {
@@ -707,13 +701,13 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
         if (s2->flags & (1<<estCGP))
         {
             /* Copy the CG p vector */
-            x1 = s1->cg_p;
-            x2 = s2->cg_p;
+            rvec *p1 = s1->cg_p;
+            rvec *p2 = s2->cg_p;
 #pragma omp for schedule(static) nowait
-            for (i = start; i < end; i++)
+            for (int i = start; i < end; i++)
             {
                 // Trivial OpenMP block that does not throw
-                copy_rvec(x1[i], x2[i]);
+                copy_rvec(p1[i], p2[i]);
             }
         }
 
@@ -736,7 +730,7 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
             }
             s2->ncg_gl = s1->ncg_gl;
 #pragma omp for schedule(static) nowait
-            for (i = 0; i < s2->ncg_gl; i++)
+            for (int i = 0; i < s2->ncg_gl; i++)
             {
                 s2->cg_gl[i] = s1->cg_gl[i];
             }
diff --git a/patches/gromacs-2016.1.diff/src/gromacs/mdlib/minimize.cpp.preplumed b/patches/gromacs-2016.1.diff/src/gromacs/mdlib/minimize.cpp.preplumed
index 3890e24e3734a167e3e6c9efab91a204945dcbc1..2d5290d4b9502a9d1f900089717a5b1578c490ed 100644
--- a/patches/gromacs-2016.1.diff/src/gromacs/mdlib/minimize.cpp.preplumed
+++ b/patches/gromacs-2016.1.diff/src/gromacs/mdlib/minimize.cpp.preplumed
@@ -401,8 +401,6 @@ void init_em(FILE *fplog, const char *title,
 
         *top      = gmx_mtop_generate_local_top(top_global, ir->efep != efepNO);
 
-        forcerec_set_excl_load(fr, *top);
-
         setup_bonded_threading(fr, &(*top)->idef);
 
         if (ir->ePBC != epbcNONE && !fr->bMolPBC)
@@ -582,9 +580,7 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
 
 {
     t_state *s1, *s2;
-    int      i;
     int      start, end;
-    rvec    *x1, *x2;
     real     dvdl_constr;
     int      nthreads gmx_unused;
 
@@ -617,7 +613,7 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
     s2->natoms = s1->natoms;
     copy_mat(s1->box, s2->box);
     /* Copy free energy state */
-    for (i = 0; i < efptNR; i++)
+    for (int i = 0; i < efptNR; i++)
     {
         s2->lambda[i] = s1->lambda[i];
     }
@@ -626,18 +622,16 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
     start = 0;
     end   = md->homenr;
 
-    x1 = s1->x;
-    x2 = s2->x;
-
     // cppcheck-suppress unreadVariable
     nthreads = gmx_omp_nthreads_get(emntUpdate);
 #pragma omp parallel num_threads(nthreads)
     {
-        int gf, i, m;
+        rvec *x1 = s1->x;
+        rvec *x2 = s2->x;
 
-        gf = 0;
+        int   gf = 0;
 #pragma omp for schedule(static) nowait
-        for (i = start; i < end; i++)
+        for (int i = start; i < end; i++)
         {
             try
             {
@@ -645,7 +639,7 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
                 {
                     gf = md->cFREEZE[i];
                 }
-                for (m = 0; m < DIM; m++)
+                for (int m = 0; m < DIM; m++)
                 {
                     if (ir->opts.nFreeze[gf][m])
                     {
@@ -663,13 +657,13 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
         if (s2->flags & (1<<estCGP))
         {
             /* Copy the CG p vector */
-            x1 = s1->cg_p;
-            x2 = s2->cg_p;
+            rvec *p1 = s1->cg_p;
+            rvec *p2 = s2->cg_p;
 #pragma omp for schedule(static) nowait
-            for (i = start; i < end; i++)
+            for (int i = start; i < end; i++)
             {
                 // Trivial OpenMP block that does not throw
-                copy_rvec(x1[i], x2[i]);
+                copy_rvec(p1[i], p2[i]);
             }
         }
 
@@ -692,7 +686,7 @@ static bool do_em_step(t_commrec *cr, t_inputrec *ir, t_mdatoms *md,
             }
             s2->ncg_gl = s1->ncg_gl;
 #pragma omp for schedule(static) nowait
-            for (i = 0; i < s2->ncg_gl; i++)
+            for (int i = 0; i < s2->ncg_gl; i++)
             {
                 s2->cg_gl[i] = s1->cg_gl[i];
             }
diff --git a/patches/gromacs-2016.1.diff/src/programs/mdrun/md.cpp b/patches/gromacs-2016.1.diff/src/programs/mdrun/md.cpp
index 90633b424718f87debe8c579617e2cdc04c70a88..1a2da1d470ceea7b5ac1b6847b6c6aa9c2c7cbd8 100644
--- a/patches/gromacs-2016.1.diff/src/programs/mdrun/md.cpp
+++ b/patches/gromacs-2016.1.diff/src/programs/mdrun/md.cpp
@@ -434,8 +434,6 @@ double gmx::do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[],
     {
         top = gmx_mtop_generate_local_top(top_global, ir->efep != efepNO);
 
-        forcerec_set_excl_load(fr, top);
-
         state    = serial_init_local_state(state_global);
 
         atoms2md(top_global, ir, 0, NULL, top_global->natoms, mdatoms);
diff --git a/patches/gromacs-2016.1.diff/src/programs/mdrun/md.cpp.preplumed b/patches/gromacs-2016.1.diff/src/programs/mdrun/md.cpp.preplumed
index 2a49aba4a37b3d20df5bb7b49f472fbf1f96000c..06c25f321404e012b870cfff79c5044308431b7e 100644
--- a/patches/gromacs-2016.1.diff/src/programs/mdrun/md.cpp.preplumed
+++ b/patches/gromacs-2016.1.diff/src/programs/mdrun/md.cpp.preplumed
@@ -421,8 +421,6 @@ double gmx::do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[],
     {
         top = gmx_mtop_generate_local_top(top_global, ir->efep != efepNO);
 
-        forcerec_set_excl_load(fr, top);
-
         state    = serial_init_local_state(state_global);
 
         atoms2md(top_global, ir, 0, NULL, top_global->natoms, mdatoms);