diff --git a/generate_automake_test_programs.py b/generate_automake_test_programs.py
index 05c3e918159ba5c95a55d7a098ccb4f62eb7490c..d86922a6e088d1f9d387aab2e2c0cd2b508e867f 100755
--- a/generate_automake_test_programs.py
+++ b/generate_automake_test_programs.py
@@ -29,12 +29,19 @@ test_type_flag = {
         "solve_tridiagonal"  : "-D__SOLVE_TRIDIAGONAL",
 }
 
-for m, g, t, p, d, s in product(sorted(matrix_flag.keys()),
+layout_flag = {
+        "all_layouts" : "-DTEST_ALL_LAYOUTS",
+        "square" : ""
+}
+
+for m, g, t, p, d, s, l in product(
+                             sorted(matrix_flag.keys()),
                              sorted(gpu_flag.keys()),
                              sorted(test_type_flag.keys()),
                              sorted(prec_flag.keys()),
                              sorted(domain_flag.keys()),
-                             sorted(solver_flag.keys())):
+                             sorted(solver_flag.keys()),
+                             sorted(layout_flag.keys())):
 
     #todo: decide what tests we actually want
     if(m == "analytic" and (g == 1 or t != "eigenvectors" or p == "single" or d == "complex")):
@@ -59,6 +66,9 @@ for m, g, t, p, d, s in product(sorted(matrix_flag.keys()),
         elif kernel == "all_kernels":
             extra_flags.append("-DTEST_ALL_KERNELS")
 
+        if layout_flag[l]:
+            extra_flags.append(layout_flag[l])
+
         if (p == "single"):
             if (d == "real"):
                 print("if WANT_SINGLE_PRECISION_REAL")
@@ -68,7 +78,12 @@ for m, g, t, p, d, s in product(sorted(matrix_flag.keys()),
                 raise Exception("Oh no!")
             endifs += 1
 
-        name = "test_{0}_{1}_{2}_{3}{4}{5}{6}".format(d, p, t, s, "" if kernel == "nokernel" else "_" + kernel, "_gpu" if g else "", "_analytic" if m == "analytic" else "")
+        name = "test_{0}_{1}_{2}_{3}{4}{5}{6}{7}".format(
+                    d, p, t, s,
+                    "" if kernel == "nokernel" else "_" + kernel,
+                    "_gpu" if g else "",
+                    "_analytic" if m == "analytic" else "",
+                    "_all_layouts" if l == "all_layouts" else "")
         print("noinst_PROGRAMS += " + name)
         print("check_SCRIPTS += " + name + ".sh")
         print(name + "_SOURCES = test/Fortran/test.F90")
diff --git a/src/elpa_impl.F90 b/src/elpa_impl.F90
index 9a03d30e3f39b8937ea9b8de46bd5abb354455b4..14bd94be8dc02c7fdb8b295173332c787372fcb0 100644
--- a/src/elpa_impl.F90
+++ b/src/elpa_impl.F90
@@ -1176,7 +1176,7 @@ module elpa_impl
     !> \param nrows_c               number of rows of local (sub) matrix c
     !> \param ncols_c               number of columns of local (sub) matrix c
     !> \param error                 optional argument, error code which can be queried with elpa_strerr
-    subroutine elpa_hermitian_multiply_d (self,uplo_a, uplo_c, ncb, a, b, nrows_b, ncols_b, &
+    subroutine elpa_hermitian_multiply_d (self, uplo_a, uplo_c, ncb, a, b, nrows_b, ncols_b, &
                                           c, nrows_c, ncols_c, error)
       use iso_c_binding
       use elpa1_auxiliary_impl
diff --git a/test/C/driver/legacy_interface/legacy_complex_driver_c_version.c b/test/C/driver/legacy_interface/legacy_complex_driver_c_version.c
index 8adf9155187c4161509ee14accd5393e8217fcfb..86c28f3bfee69eadaf20952c4904a66e34027a99 100644
--- a/test/C/driver/legacy_interface/legacy_complex_driver_c_version.c
+++ b/test/C/driver/legacy_interface/legacy_complex_driver_c_version.c
@@ -66,7 +66,7 @@ int main(int argc, char** argv) {
 
    int np_cols, np_rows, np_colsStart;
 
-   int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol;
+   int my_blacs_ctxt, my_prow, my_pcol;
 
    int mpierr;
 
@@ -138,7 +138,7 @@ int main(int argc, char** argv) {
 #else
    my_mpi_comm_world = 1;
 #endif
-   set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
 
    if (myid == 0) {
      printf("\n");
diff --git a/test/C/driver/legacy_interface/legacy_real_driver_c_version.c b/test/C/driver/legacy_interface/legacy_real_driver_c_version.c
index 1fe1bf692af57d6c50fd2ba3f3f1946f8e7ae23a..60a1181b39ccad7eaaf43428a2363cb232e45119 100644
--- a/test/C/driver/legacy_interface/legacy_real_driver_c_version.c
+++ b/test/C/driver/legacy_interface/legacy_real_driver_c_version.c
@@ -65,7 +65,7 @@ int main(int argc, char** argv) {
 
    int np_cols, np_rows, np_colsStart;
 
-   int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol;
+   int my_blacs_ctxt, my_prow, my_pcol;
 
    int mpierr;
 
@@ -134,7 +134,7 @@ int main(int argc, char** argv) {
 #else
   my_mpi_comm_world = 1;
 #endif
-   set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
 
    if (myid == 0) {
      printf("\n");
diff --git a/test/C/driver/legacy_interface/legacy_single_complex_driver_c_version.c b/test/C/driver/legacy_interface/legacy_single_complex_driver_c_version.c
index a062404f5c6d15c5fda6002e6a9bf329f33c6970..4fbff0520d89b726e62e5c681d35300476271108 100644
--- a/test/C/driver/legacy_interface/legacy_single_complex_driver_c_version.c
+++ b/test/C/driver/legacy_interface/legacy_single_complex_driver_c_version.c
@@ -66,7 +66,7 @@ int main(int argc, char** argv) {
 
    int np_cols, np_rows, np_colsStart;
 
-   int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol;
+   int my_blacs_ctxt, my_prow, my_pcol;
 
    int mpierr;
 
@@ -138,7 +138,7 @@ int main(int argc, char** argv) {
 #else
    my_mpi_comm_world = 1;
 #endif
-   set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
 
    if (myid == 0) {
      printf("\n");
diff --git a/test/C/driver/legacy_interface/legacy_single_real_driver_c_version.c b/test/C/driver/legacy_interface/legacy_single_real_driver_c_version.c
index 2a43b67d8ae4fdcea18846896e6f8edf684896ec..a21c71d98e69fc1a21452866f420c49d72bd0ac6 100644
--- a/test/C/driver/legacy_interface/legacy_single_real_driver_c_version.c
+++ b/test/C/driver/legacy_interface/legacy_single_real_driver_c_version.c
@@ -65,7 +65,7 @@ int main(int argc, char** argv) {
 
    int np_cols, np_rows, np_colsStart;
 
-   int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol;
+   int my_blacs_ctxt, my_prow, my_pcol;
 
    int mpierr;
 
@@ -135,7 +135,7 @@ int main(int argc, char** argv) {
 #else
   my_mpi_comm_world = 1;
 #endif
-   set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
 
    if (myid == 0) {
      printf("\n");
diff --git a/test/C/elpa1/legacy_interface/legacy_complex_1stage_c_version.c b/test/C/elpa1/legacy_interface/legacy_complex_1stage_c_version.c
index 9e999ccde3641ff3f56d6be4aeefae2209631be9..9e010bce925cd01aed2adf7b9a9cfdea0728711f 100644
--- a/test/C/elpa1/legacy_interface/legacy_complex_1stage_c_version.c
+++ b/test/C/elpa1/legacy_interface/legacy_complex_1stage_c_version.c
@@ -68,7 +68,7 @@ int main(int argc, char** argv) {
 
    int np_cols, np_rows, np_colsStart;
 
-   int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol;
+   int my_blacs_ctxt, my_prow, my_pcol;
 
    int mpierr;
 
@@ -151,7 +151,7 @@ int main(int argc, char** argv) {
 #else
    my_mpi_comm_world = 1;
 #endif
-   set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
 
    if (myid == 0) {
      printf("\n");
diff --git a/test/C/elpa1/legacy_interface/legacy_real_1stage_c_version.c b/test/C/elpa1/legacy_interface/legacy_real_1stage_c_version.c
index 285a2df5d47e1df6b9403a841d62606fb6de8885..55144fc730fe63cbfe9ac57511b7cd5295f22910 100644
--- a/test/C/elpa1/legacy_interface/legacy_real_1stage_c_version.c
+++ b/test/C/elpa1/legacy_interface/legacy_real_1stage_c_version.c
@@ -68,7 +68,7 @@ int main(int argc, char** argv) {
 
    int np_cols, np_rows, np_colsStart;
 
-   int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol;
+   int my_blacs_ctxt, my_prow, my_pcol;
 
    int mpierr;
 
@@ -143,7 +143,7 @@ int main(int argc, char** argv) {
 #ifdef WITH_MPI
    my_mpi_comm_world = MPI_Comm_c2f(MPI_COMM_WORLD);
 #endif
-   set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
 
    if (myid == 0) {
      printf("\n");
diff --git a/test/C/elpa2/legacy_interface/legacy_complex_2stage_c_version.c b/test/C/elpa2/legacy_interface/legacy_complex_2stage_c_version.c
index b62d453c65275552ead58589ba0ec5d1d7595b9c..b69a6b34ae57e5ad7dc9742add0109231cc24bb7 100644
--- a/test/C/elpa2/legacy_interface/legacy_complex_2stage_c_version.c
+++ b/test/C/elpa2/legacy_interface/legacy_complex_2stage_c_version.c
@@ -68,7 +68,7 @@ int main(int argc, char** argv) {
 
    int np_cols, np_rows, np_colsStart;
 
-   int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol;
+   int my_blacs_ctxt, my_prow, my_pcol;
 
    int mpierr;
 
@@ -148,7 +148,7 @@ int main(int argc, char** argv) {
 #else
    my_mpi_comm_world = 1;
 #endif
-   set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
 
    if (myid == 0) {
      printf("\n");
diff --git a/test/C/elpa2/legacy_interface/legacy_real_2stage_c_version.c b/test/C/elpa2/legacy_interface/legacy_real_2stage_c_version.c
index 85286aea5f4a32e991c5bbe445f6e4c060ace4bb..941b90a25b7e3dd9f33433f2a3369218b1e13a6f 100644
--- a/test/C/elpa2/legacy_interface/legacy_real_2stage_c_version.c
+++ b/test/C/elpa2/legacy_interface/legacy_real_2stage_c_version.c
@@ -67,7 +67,7 @@ int main(int argc, char** argv) {
 
    int np_cols, np_rows, np_colsStart;
 
-   int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol;
+   int my_blacs_ctxt, my_prow, my_pcol;
 
    int mpierr;
 
@@ -143,7 +143,7 @@ int main(int argc, char** argv) {
 #else
   my_mpi_comm_world = 1;
 #endif
-   set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
 
    if (myid == 0) {
      printf("\n");
diff --git a/test/C/test.c b/test/C/test.c
index 2ecac8590949abc90218648791f52a92dfcae16b..c3f387a0500e5e1a1173d6e6a3eb0ace1f11db77 100644
--- a/test/C/test.c
+++ b/test/C/test.c
@@ -97,7 +97,7 @@ int main(int argc, char** argv) {
    int mpi_comm;
 
    /* blacs */
-   int my_blacs_ctxt, sc_desc[9], info, nprow, npcol;
+   int my_blacs_ctxt, sc_desc[9], info;
 
    /* The Matrix */
    MATRIX_TYPE *a, *as, *z;
@@ -136,7 +136,7 @@ int main(int argc, char** argv) {
 #else
    mpi_comm = 0;
 #endif
-   set_up_blacsgrid_f(mpi_comm, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol);
+   set_up_blacsgrid_f(mpi_comm, np_rows, np_cols, &my_blacs_ctxt, &my_prow, &my_pcol);
    set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info);
 
    /* allocate the matrices needed for elpa */
diff --git a/test/Fortran/driver/legacy_interface/legacy_complex_driver.F90 b/test/Fortran/driver/legacy_interface/legacy_complex_driver.F90
index 4fc55f264b5f34111cf26ecf62ba414762182ee3..ff3abc7be23cda4bab33b34eda67635c983d7388 100644
--- a/test/Fortran/driver/legacy_interface/legacy_complex_driver.F90
+++ b/test/Fortran/driver/legacy_interface/legacy_complex_driver.F90
@@ -166,8 +166,8 @@ program test_complex2
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/driver/legacy_interface/legacy_real_driver.F90 b/test/Fortran/driver/legacy_interface/legacy_real_driver.F90
index f096cc37f02c0e769c46d34b194b8316c02a28b9..1f5a51a210d853fdadcb7bc786f6ec8a666a878a 100644
--- a/test/Fortran/driver/legacy_interface/legacy_real_driver.F90
+++ b/test/Fortran/driver/legacy_interface/legacy_real_driver.F90
@@ -165,8 +165,8 @@ program test_real2
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/driver/legacy_interface/legacy_single_complex_driver.F90 b/test/Fortran/driver/legacy_interface/legacy_single_complex_driver.F90
index fccbbdcb32e983a5dd1b7bc8d3a9f5527c67e2d6..8749eed947b409e1d50038243d1d3e08161b6136 100644
--- a/test/Fortran/driver/legacy_interface/legacy_single_complex_driver.F90
+++ b/test/Fortran/driver/legacy_interface/legacy_single_complex_driver.F90
@@ -166,8 +166,8 @@ program test_complex2
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/driver/legacy_interface/legacy_single_real_driver.F90 b/test/Fortran/driver/legacy_interface/legacy_single_real_driver.F90
index 72ca5dd80a3fd17d13dbe1c26192014737fb956d..123df6eb6823a95ded52fed5ebe6a0fd570bd190 100644
--- a/test/Fortran/driver/legacy_interface/legacy_single_real_driver.F90
+++ b/test/Fortran/driver/legacy_interface/legacy_single_real_driver.F90
@@ -165,8 +165,8 @@ program test_real2
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_complex.F90 b/test/Fortran/elpa1/legacy_interface/legacy_complex.F90
index c9d05e657a94ab6857c4675f7df98d6a95a089b0..df8383f8c31c321ccb92b9659850aa32854a3b23 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_complex.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_complex.F90
@@ -174,8 +174,8 @@ program test_complex_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_complex_cholesky.F90 b/test/Fortran/elpa1/legacy_interface/legacy_complex_cholesky.F90
index 1f4bf18553cfe5e6fafd7b4b928f852e4ce49d2f..807c545d0c80f0640bf0a78778538429ecb35e36 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_complex_cholesky.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_complex_cholesky.F90
@@ -138,8 +138,8 @@ program test_cholesky
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_complex_gpu.F90 b/test/Fortran/elpa1/legacy_interface/legacy_complex_gpu.F90
index 91326aaf22993ebde054f6cb7f6e31c69bd44246..7f4b018d06444667f2faf4d9335c07eeb97b3b17 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_complex_gpu.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_complex_gpu.F90
@@ -173,8 +173,8 @@ program test_complex_gpu_version_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_complex_invert_trm.F90 b/test/Fortran/elpa1/legacy_interface/legacy_complex_invert_trm.F90
index 6f1ef010aed94002e85c39a9e1a929e7ea6d54cb..9f4827f9104c12b0758f6d3bcb0d69c3d7b41608 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_complex_invert_trm.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_complex_invert_trm.F90
@@ -138,8 +138,8 @@ program test_invert_trm
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_complex_transp_multiply.F90 b/test/Fortran/elpa1/legacy_interface/legacy_complex_transp_multiply.F90
index a11481624d5f5ffade419ef7fbd0cc0855ed2735..a2929e1f58a0649f69a56d02e1cc0fb0b42971c8 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_complex_transp_multiply.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_complex_transp_multiply.F90
@@ -132,8 +132,8 @@ program test_transpose_multiply
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_real.F90 b/test/Fortran/elpa1/legacy_interface/legacy_real.F90
index 52ca04ae5a7b86ac72ad5651a82eceee89b0c5cb..8bf6bec92d560f783d6c4038d3ce8fc68daacc24 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_real.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_real.F90
@@ -170,8 +170,8 @@ program test_real_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_real_cholesky.F90 b/test/Fortran/elpa1/legacy_interface/legacy_real_cholesky.F90
index 226e3d06d9de39cd2e103a0208c909cf152a4eaf..50f41b9c832106bd1d36b1fb2bf53660114dad53 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_real_cholesky.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_real_cholesky.F90
@@ -135,8 +135,8 @@ program test_cholesky
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_real_gpu.F90 b/test/Fortran/elpa1/legacy_interface/legacy_real_gpu.F90
index 8a62cf26172ab134b3c60fc07b448771d5a75f62..4d58f3bf099beac1eb69c12d1f2bdf4355b59a79 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_real_gpu.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_real_gpu.F90
@@ -170,8 +170,8 @@ program test_real_gpu_version_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_real_invert_trm.F90 b/test/Fortran/elpa1/legacy_interface/legacy_real_invert_trm.F90
index 7c35b71852590f178e0f2d0a8890ab278b3599d4..c2dc767a2a8049684897a49fa7195ae07b8a1629 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_real_invert_trm.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_real_invert_trm.F90
@@ -135,8 +135,8 @@ program test_invert_trm
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_real_transp_multiply.F90 b/test/Fortran/elpa1/legacy_interface/legacy_real_transp_multiply.F90
index d145257fbb15e0d76e314e25e2fd4bb8e0c51f3c..d55815c9470880f6f5d9ad23f2e8c3e4e18a41b7 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_real_transp_multiply.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_real_transp_multiply.F90
@@ -131,8 +131,8 @@ program test_transpose_multiply
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_complex.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_complex.F90
index b2a55b66e56c4c2facf71342ee1ed4870e3f71e7..a47a03ce80111504e1a2c38c85d05d2eff08b157 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_complex.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_complex.F90
@@ -174,8 +174,8 @@ program test_complex_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_complex_cholesky.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_complex_cholesky.F90
index 2d16581f9ebb04551bf261f0b1b3cb7481c1c657..b8e0f59c90f09bf708f98fd4808fa600e43d0503 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_complex_cholesky.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_complex_cholesky.F90
@@ -138,8 +138,8 @@ program test_cholesky
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_complex_gpu.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_complex_gpu.F90
index 869fa8332a4049f6bad15cf3d9cd4b64d2723973..b0801b4db7af9bf785ebc00ffd3eba1ff8c086cb 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_complex_gpu.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_complex_gpu.F90
@@ -173,8 +173,8 @@ program test_complex_gpu_version_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_complex_invert_trm.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_complex_invert_trm.F90
index 1f83621c2dca83fb8111058eb4df8a544eedf07e..d621a5f627712b13c8450ba33b74469940057aea 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_complex_invert_trm.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_complex_invert_trm.F90
@@ -138,8 +138,8 @@ program test_invert_trm
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_complex_transp_multiply.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_complex_transp_multiply.F90
index 60accf853902876f484de680e384d95d51f6d659..e30413cc967d91e9bda30bf07ce56ef04019928d 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_complex_transp_multiply.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_complex_transp_multiply.F90
@@ -132,8 +132,8 @@ program test_transpose_multiply
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_real.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_real.F90
index 796e0cbf6dfc249867b3d0f3e5c5fd1c674c78e9..a3488998c23b86b58d814d5a8a04c727e71d8338 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_real.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_real.F90
@@ -170,8 +170,8 @@ program test_real_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_real_cholesky.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_real_cholesky.F90
index 434a0020a92130f3092018f42c9747c6aaf19a7d..6f7d8e09f8d19646e215d4dede98bfb3d493dd73 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_real_cholesky.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_real_cholesky.F90
@@ -135,8 +135,8 @@ program test_cholesky
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_real_gpu.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_real_gpu.F90
index dc74d58ff3f0dc67edf269183f3b6a4eeaa59acb..3169e59a705eb537ed5f5587dc0d6644a4809316 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_real_gpu.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_real_gpu.F90
@@ -170,8 +170,8 @@ program test_real_gpu_version_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_real_invert_trm.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_real_invert_trm.F90
index cfc983ee414898e4fb0fd3dc7b9f74306f6eefeb..23ddeb8e46551af320a0afa2ea4d23556818a856 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_real_invert_trm.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_real_invert_trm.F90
@@ -135,8 +135,8 @@ program test_invert_trm
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_real_transp_multiply.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_real_transp_multiply.F90
index c5801aaf00af64414ede4e0c6f405ca2d42d5074..fb8a8416d3210acb079e5f077ad2f13f5043ebee 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_real_transp_multiply.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_real_transp_multiply.F90
@@ -132,8 +132,8 @@ program test_transpose_multiply
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_single_toeplitz.F90 b/test/Fortran/elpa1/legacy_interface/legacy_single_toeplitz.F90
index 112e083718ee0a53a6383563bb5f4870c4d5c5d9..78143e4226dbe15c66bb0760b30e711efcb844a6 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_single_toeplitz.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_single_toeplitz.F90
@@ -153,8 +153,8 @@ program test_solve_tridi_single
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa1/legacy_interface/legacy_toeplitz.F90 b/test/Fortran/elpa1/legacy_interface/legacy_toeplitz.F90
index 3f64bff3a8d93e7fa54ec8da99bc9b8d8fc6f463..37276cde1d1afa2403ea4ce2cfb1d81c923385bd 100644
--- a/test/Fortran/elpa1/legacy_interface/legacy_toeplitz.F90
+++ b/test/Fortran/elpa1/legacy_interface/legacy_toeplitz.F90
@@ -152,8 +152,8 @@ program test_solve_tridi
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/complex_2stage_banded.F90 b/test/Fortran/elpa2/complex_2stage_banded.F90
index 93d90cf405fbceafccc849c21221ada7ae44d243..79862f0c59403a8d0b3aec534402173281d5207f 100644
--- a/test/Fortran/elpa2/complex_2stage_banded.F90
+++ b/test/Fortran/elpa2/complex_2stage_banded.F90
@@ -171,8 +171,8 @@ program test_complex2_double_banded
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/double_instance.F90 b/test/Fortran/elpa2/double_instance.F90
index fe3a115367ca0c36039089f6841d364bdb6fa2f1..9cb615b91b733f2753d8a754416daf8c425913d9 100644
--- a/test/Fortran/elpa2/double_instance.F90
+++ b/test/Fortran/elpa2/double_instance.F90
@@ -102,8 +102,8 @@ program test_interface
    my_prow = mod(myid, np_cols)
    my_pcol = myid / np_cols
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, &
                                 na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_complex.F90 b/test/Fortran/elpa2/legacy_interface/legacy_complex.F90
index 2e8c74b0d3f66c801d8a092cd05ae36bce2c139d..c090095af4b87774f9bc646e759dc87e399be49c 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_complex.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_complex.F90
@@ -178,8 +178,8 @@ program test_complex2_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_complex_api.F90 b/test/Fortran/elpa2/legacy_interface/legacy_complex_api.F90
index 4523d80cbcb6ac40274995944950277826f3590a..0503f60fd7ac89df2e5f08648f01ea9665735c15 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_complex_api.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_complex_api.F90
@@ -248,8 +248,8 @@ program test_complex2_choose_kernel_with_api_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_complex_default_kernel.F90 b/test/Fortran/elpa2/legacy_interface/legacy_complex_default_kernel.F90
index b519b127e22d8616005dfdeecdea455ab2ddbc0d..75fffca674be26466ef67b6df9e1a90c49a8b6ff 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_complex_default_kernel.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_complex_default_kernel.F90
@@ -195,8 +195,8 @@ program test_complex2_default_kernel_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_complex_gpu.F90 b/test/Fortran/elpa2/legacy_interface/legacy_complex_gpu.F90
index c081688cd583c8461ff55d28afd5140b09ad6fe4..05cb0fdeee091a9c26dea07d9869982f564af233 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_complex_gpu.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_complex_gpu.F90
@@ -191,8 +191,8 @@ program test_complex2_gpu_version_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_real.F90 b/test/Fortran/elpa2/legacy_interface/legacy_real.F90
index 8abf6d1fbaf7c76576fb04fde4748778c3f0f5ae..db6c46e1f7416878536a89685420fb5b7146b361 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_real.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_real.F90
@@ -173,8 +173,8 @@ program test_real2_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_real_api.F90 b/test/Fortran/elpa2/legacy_interface/legacy_real_api.F90
index 83d3259653b13a68e491d7a6ddbf7b0da93eceb2..7db717449b6458b61606b378d6dd8f21eb1edb2f 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_real_api.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_real_api.F90
@@ -257,8 +257,8 @@ program test_real2_choose_kernel_with_api_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_real_default_kernel.F90 b/test/Fortran/elpa2/legacy_interface/legacy_real_default_kernel.F90
index 9d240a2cf5aae5c8cf7938f922ea24d4a6c9f707..2172742fd07d7b23bd44aa490310d7dca88e9bdf 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_real_default_kernel.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_real_default_kernel.F90
@@ -189,8 +189,8 @@ program test_real2_default_kernel_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_real_gpu.F90 b/test/Fortran/elpa2/legacy_interface/legacy_real_gpu.F90
index 3f5e4b57e99ed82193cccf5faacf074e7efccd48..cdd7790aa5d1b9cbf738a1124844139a4366c8f3 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_real_gpu.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_real_gpu.F90
@@ -191,8 +191,8 @@ program test_real2_gpu_version_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_real_qr.F90 b/test/Fortran/elpa2/legacy_interface/legacy_real_qr.F90
index bdfe9523f11c351a414f5ac0e2d77095352b22d6..ce23e417f690d7140dffe2e1b15e1d027943542d 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_real_qr.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_real_qr.F90
@@ -231,8 +231,8 @@ program test_real2_default_kernel_qr_decomposition_double_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_complex.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_complex.F90
index e75a3f6924325b31f5a526f61aee082e69d17457..5a23baafc1585af6c432cf52ef27568e9c6a17b9 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_complex.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_complex.F90
@@ -178,8 +178,8 @@ program test_complex2_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_complex_api.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_complex_api.F90
index 24789189cad5c040172704c6a3d2c5ef15389444..4baf8d2d6366f1e49d63ad2f04cee46bfe0981a6 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_complex_api.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_complex_api.F90
@@ -247,8 +247,8 @@ program test_complex2_choose_kernel_with_api_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_complex_default_kernel.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_complex_default_kernel.F90
index 7f21963c8ae6b1318b840c197c268ebbe5cb9f36..7d5d996aa9e9873c5f27f98548abaf4363c2cbf5 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_complex_default_kernel.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_complex_default_kernel.F90
@@ -193,8 +193,8 @@ program test_complex2_default_kernel_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_complex_gpu.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_complex_gpu.F90
index 145f688a82962c67ce65676c54ea8fc5f112cdc2..587ea02017467a0759ba6c9a2cbccc75f6d3c5a9 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_complex_gpu.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_complex_gpu.F90
@@ -190,8 +190,8 @@ program test_complex2_gpu_version_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_real.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_real.F90
index 182706b03970304b96dc906ea32219fc66fc07ef..f6b5fea6357ee50b7843be18aaff74eca94875b4 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_real.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_real.F90
@@ -173,8 +173,8 @@ program test_real2_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_real_api.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_real_api.F90
index 416ef57c7f8041c0ae0adfbe769066e67c83f879..6ceeea203d63eb41db969782368b4390f26b4bda 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_real_api.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_real_api.F90
@@ -255,8 +255,8 @@ program test_real2_choose_kernel_with_api_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_real_default_kernel.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_real_default_kernel.F90
index fae37710d310cb3168e9ab927f9c881eaed481c9..e16130ba61112bc4ba6ee20dd9644721c234f975 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_real_default_kernel.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_real_default_kernel.F90
@@ -189,8 +189,8 @@ program test_real2_default_kernel_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_real_gpu.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_real_gpu.F90
index 57bad615aad86da6a6eef81319d79b58e9e76737..0944d759e91d312a3d2956b23a64b00155ff52b8 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_real_gpu.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_real_gpu.F90
@@ -191,8 +191,8 @@ program test_real2_gpu_version_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/legacy_interface/legacy_single_real_qr.F90 b/test/Fortran/elpa2/legacy_interface/legacy_single_real_qr.F90
index a8fcb6dbe1f5b834124760703e294db870c24e6b..7d3ac37547dcefe8f0fd81f3debae5700a9ac640 100644
--- a/test/Fortran/elpa2/legacy_interface/legacy_single_real_qr.F90
+++ b/test/Fortran/elpa2/legacy_interface/legacy_single_real_qr.F90
@@ -235,8 +235,8 @@ program test_real2_default_kernel_qr_decomposition_single_precision
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/real_2stage_banded.F90 b/test/Fortran/elpa2/real_2stage_banded.F90
index 1b1dd05c8cc44bd9665aceb03fbf0bc4a7fd694b..850182a3a16c76e104b14b6b399d6c7603007caa 100644
--- a/test/Fortran/elpa2/real_2stage_banded.F90
+++ b/test/Fortran/elpa2/real_2stage_banded.F90
@@ -169,8 +169,8 @@ program test_real2_double_banded
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/single_complex_2stage_banded.F90 b/test/Fortran/elpa2/single_complex_2stage_banded.F90
index 9f2cd0c1cbbda51a64d06f840188098981177021..ed974eaa51ef92ee551f101bd9fd437a356e37aa 100644
--- a/test/Fortran/elpa2/single_complex_2stage_banded.F90
+++ b/test/Fortran/elpa2/single_complex_2stage_banded.F90
@@ -171,8 +171,8 @@ program test_complex2_single_banded
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/elpa2/single_real_2stage_banded.F90 b/test/Fortran/elpa2/single_real_2stage_banded.F90
index 21d758d5c3e5f645ad8f316740dfa66acd8b07fe..183555572fe89703f86885046d3affddc8e5cc26 100644
--- a/test/Fortran/elpa2/single_real_2stage_banded.F90
+++ b/test/Fortran/elpa2/single_real_2stage_banded.F90
@@ -168,8 +168,8 @@ program test_real2_single_banded
    ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
    ! process has a unique (my_prow,my_pcol) pair).
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, 'C', &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    if (myid==0) then
      print '(a)','| Past BLACS_Gridinfo.'
diff --git a/test/Fortran/test.F90 b/test/Fortran/test.F90
index addbabc679c7caf3eb79fc2130d5b298d6d7d33a..167607ddd222f7d2b062e1c9a860624dbbeb87ab 100644
--- a/test/Fortran/test.F90
+++ b/test/Fortran/test.F90
@@ -145,8 +145,13 @@ program test
    class(elpa_t), pointer :: e
 #ifdef TEST_ALL_KERNELS
    integer :: i
+#endif
+#ifdef TEST_ALL_LAYOUTS
+   character(len=1), parameter :: layouts(2) = [ 'C', 'R' ]
+   integer :: i_layout
 #endif
    integer :: kernel
+   character(len=1) :: layout
 
 #if defined(TEST_COMPLEX) && defined(__SOLVE_TRIDIAGONAL)
 #ifdef WITH_MPI
@@ -158,11 +163,27 @@ program test
 
    call setup_mpi(myid, nprocs)
 
+   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
+     print *, "ELPA API version not supported"
+     stop 1
+   endif
+
+#ifdef TEST_ALL_LAYOUTS
+   do i_layout = 1, size(layouts)               ! layout loop
+     layout = layouts(i_layout)
+     do np_cols = 1, nprocs                     ! factor loop
+       if (mod(nprocs,np_cols) /= 0 ) then
+         cycle
+       endif
+#else
+   layout = 'C'
    do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
       if(mod(nprocs,np_cols) == 0 ) exit
    enddo
+#endif
 
    np_rows = nprocs/np_cols
+   assert(nprocs == np_rows * np_cols)
 
    if (myid == 0) then
      print '((a,i0))', 'Matrix size: ', na
@@ -170,11 +191,12 @@ program test
      print '((a,i0))', 'Blocksize: ', nblk
      print '((a,i0))', 'Num MPI proc: ', nprocs
      print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
+     print '(a)',      'Process layout: ' // layout
      print *,''
    endif
 
-   call set_up_blacsgrid(mpi_comm_world, my_blacs_ctxt, np_rows, np_cols, &
-                         nprow, npcol, my_prow, my_pcol)
+   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, layout, &
+                         my_blacs_ctxt, my_prow, my_pcol)
 
    call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, &
                                 na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
@@ -218,11 +240,6 @@ program test
                                 np_cols, my_prow, my_pcol)
 #endif
 
-   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
-     print *, "ELPA API version not supported"
-     stop 1
-   endif
-
    e => elpa_allocate()
 
    call e%set("na", na, error)
@@ -382,7 +399,6 @@ program test
 #endif
 
    call elpa_deallocate(e)
-   call elpa_uninit()
 
    deallocate(a)
 #ifdef TEST_MATRIX_RANDOM
@@ -397,6 +413,13 @@ program test
    deallocate(ev_analytic)
 #endif
 
+#ifdef TEST_ALL_LAYOUTS
+   end do ! factors
+   end do ! layouts
+#endif
+
+   call elpa_uninit()
+
 #ifdef WITH_MPI
    call blacs_gridexit(my_blacs_ctxt)
    call mpi_finalize(mpierr)
diff --git a/test/shared/test_blacs_infrastructure.F90 b/test/shared/test_blacs_infrastructure.F90
index 9cb7ba5e4dcdb75dcd0a98a16be0412ccb90d19b..ac52dbbdd7f1e60425ca256244f1b9ac200308cf 100644
--- a/test/shared/test_blacs_infrastructure.F90
+++ b/test/shared/test_blacs_infrastructure.F90
@@ -45,44 +45,45 @@ module test_blacs_infrastructure
 
   contains
 
-    subroutine set_up_blacsgrid(mpi_comm_parent, my_blacs_ctxt, np_rows, &
-                                np_cols, nprow, npcol, my_prow, my_pcol)
+    !c> void set_up_blacsgrid_f(int mpi_comm_parent, int np_rows, int np_cols, char layout,
+    !c>                         int* my_blacs_ctxt, int *my_prow, int *my_pcol);
+    subroutine set_up_blacsgrid(mpi_comm_parent, np_rows, np_cols, layout, &
+                                my_blacs_ctxt, my_prow, my_pcol) bind(C, name="set_up_blacsgrid_f")
 
       use test_util
 
       implicit none
-      integer(kind=ik), intent(in)     :: mpi_comm_parent
-      integer(kind=ik), intent(inout)  :: my_blacs_ctxt, np_rows, &
-                                          np_cols, nprow, npcol, my_prow, my_pcol
+      integer(kind=c_int), intent(in), value  :: mpi_comm_parent, np_rows, np_cols
+      character(len=1), intent(in), value     :: layout
+      integer(kind=c_int), intent(out)        :: my_blacs_ctxt, my_prow, my_pcol
+
+#ifdef WITH_MPI
+      integer :: np_rows_, np_cols_
+#endif
+
+      if (layout /= 'R' .and. layout /= 'C') then
+        print *, "layout must be 'R' or 'C'"
+        stop 1
+      end if
 
       my_blacs_ctxt = mpi_comm_parent
 #ifdef WITH_MPI
-      call BLACS_Gridinit(my_blacs_ctxt, 'C', np_rows, np_cols)
-      call BLACS_Gridinfo(my_blacs_ctxt, nprow, npcol, my_prow, my_pcol)
+      call BLACS_Gridinit(my_blacs_ctxt, layout, np_rows, np_cols)
+      call BLACS_Gridinfo(my_blacs_ctxt, np_rows_, np_cols_, my_prow, my_pcol)
+      if (np_rows /= np_rows_) then
+        print *, "BLACS_Gridinfo returned different values for np_rows as set by BLACS_Gridinit"
+        stop 1
+      endif
+      if (np_cols /= np_cols_) then
+        print *, "BLACS_Gridinfo returned different values for np_cols as set by BLACS_Gridinit"
+        stop 1
+      endif
 #else
-      np_rows = 1
-      np_cols = 1
       my_prow = 0
       my_pcol = 0
 #endif
     end subroutine
 
-    !c> void set_up_blacsgrid_f(int mpi_comm_parent, int* my_blacs_ctxt,
-    !c>                         int *np_rows, int *np_cols, int *nprow, int *npcol,
-    !c>                         int *my_prow, int *my_pcol);
-    subroutine set_up_blacsgrid_f(mpi_comm_parent, my_blacs_ctxt, np_rows,  &
-                                  np_cols, nprow, npcol, my_prow, my_pcol) &
-                                  bind(C, name="set_up_blacsgrid_f")
-      use iso_c_binding
-      implicit none
-      integer(kind=c_int), value :: mpi_comm_parent
-      integer(kind=c_int)        :: my_blacs_ctxt, np_rows, &
-                                    np_cols, nprow, npcol, my_prow, my_pcol
-
-      call set_up_blacsgrid(mpi_comm_parent, my_blacs_ctxt, np_rows, &
-                                np_cols, nprow, npcol, my_prow, my_pcol)
-    end subroutine
-
     subroutine set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, &
                                        np_rows, np_cols, na_rows,  &
                                        na_cols, sc_desc, my_blacs_ctxt, info)
@@ -91,9 +92,10 @@ module test_blacs_infrastructure
       use test_util
       implicit none
 
-      integer(kind=ik), intent(inout)  :: na, nblk, my_prow, my_pcol, np_rows,   &
-                                          np_cols, na_rows, na_cols, sc_desc(1:9), &
-                                          my_blacs_ctxt, info
+      integer(kind=ik), intent(in)  :: na, nblk, my_prow, my_pcol, np_rows,   &
+                                       np_cols, &
+                                       my_blacs_ctxt, info
+      integer(kind=ik), intent(out)  :: na_rows, na_cols, sc_desc(1:9)
 #ifdef WITH_MPI
       integer(kind=ik), external       :: numroc
       integer(kind=ik)                 :: mpierr