diff --git a/trainer.h b/trainer.h
index 8772f24fb6cc6cfb87b1d7affd60b15d0cf38613..a749932c4fdc417a5d3bdc943d26b59ad83f2e3f 100644
--- a/trainer.h
+++ b/trainer.h
@@ -198,7 +198,8 @@ class MPI_Trainer: public Trainer {
       // workers.
       //DesignMatrix<DM_Function_Base&> dm(*fb, config);
       dm.Phi.resize(phi_rows1,phi_cols1);
-      dm.T.resize(phi_cols1);
+      int b_lda1 = phi_rows1 > phi_cols1 ? phi_rows1 : phi_cols1;
+      dm.T.resize(b_lda1);
       dm.Tlabels.resize(phi_rows1);
     }
     void probe() {
@@ -219,9 +220,9 @@ class MPI_Trainer: public Trainer {
 
 
       descinit_( descPHI,  &PHI_rows, &PHI_cols, &rnb1, &cnb1, &izero,
-          &izero, &context1, /*leading dimension*/&phi_cols1, &info);
+          &izero, &context1, /*leading dimension*/&phi_rows1, &info);
       descinit_( descPHI2, &PHI_rows, &PHI_cols, &rnb2, &cnb2, &izero,
-          &izero, &context2, /*leading dimension*/&phi_cols2, &info2);
+          &izero, &context2, /*leading dimension*/&phi_rows2, &info2);
 
       if(info != 0) {
         printf("Error in descinit 1a, info = %d\n", info);
@@ -231,10 +232,12 @@ class MPI_Trainer: public Trainer {
         printf("HINT: Check these CONFIG parameters: MPIWPCKG, MBLOCK, NBLOCK\n");
       }
 
+      int b_lda1 = phi_rows1 > phi_cols1 ? phi_rows1 : phi_cols1;
+      int b_lda2 = phi_rows2 > phi_cols2 ? phi_rows2 : phi_cols2;
       descinit_( descB,   &PHI_cols, &ione, &rnb1, &cnb1, &izero, 
-          &izero, &context1, /*leading dimension*/&phi_cols1, &info);
+          &izero, &context1, /*leading dimension*/&b_lda1, &info);
       descinit_( descB2,  &PHI_cols, &ione, &rnb2, &cnb2, &izero, 
-          &izero, &context2, /*leading dimension*/&phi_cols2, &info2);
+          &izero, &context2, /*leading dimension*/&b_lda2, &info2);
 
       if(info != 0) {
         printf("Error in descinit 1b, info = %d\n", info);
@@ -255,7 +258,7 @@ class MPI_Trainer: public Trainer {
       // Distribute data in 2D block cyclic 
       DesignMatrix<DM_Function_Base&> dm2(*fb, config);
       dm2.Phi.resize(phi_rows2,phi_cols2);
-      dm2.T.resize(phi_cols2);
+      dm2.T.resize(b_lda2);
       dm2.Tlabels.resize(phi_rows2);
 
       pdgemr2d_(&PHI_rows, &PHI_cols, dm.Phi.ptr(), &ione, &ione, descPHI,