diff --git a/Solver/linearSystemPETSc.cpp b/Solver/linearSystemPETSc.cpp
index 6d485cc1a13a3841f4bd1e8da371169aec53dba6..b2f6a800dc919a8c440ef4ee09627930cc293cfa 100644
--- a/Solver/linearSystemPETSc.cpp
+++ b/Solver/linearSystemPETSc.cpp
@@ -91,13 +91,17 @@ void linearSystemPETSc<fullMatrix<PetscScalar> >::allocate(int nbRows)
   //_try(PetscOptionsInsertString("-ksp_monitor_true_residual -ksp_rtol 1e-10"));
   _try(MatCreate(PETSC_COMM_WORLD, &_a)); 
   _try(MatSetSizes(_a,nbRows * _blockSize, nbRows * _blockSize, PETSC_DETERMINE, PETSC_DETERMINE));
-  //_try(MatSetType(_a, MATSEQBAIJ));
-  _try(MatSetType(_a, MATMPIBAIJ));
+  if (Msg::GetCommSize() > 1) {
+    _try(MatSetType(_a, MATMPIBAIJ));
+    _try(MatSetFromOptions(_a));
+    _try(MatMPIBAIJSetPreallocation(_a, _blockSize, 5, NULL, 0, NULL));
+  } else {
+    _try(MatSetType(_a, MATSEQBAIJ));
+    _try(MatSetFromOptions(_a));
+    _try(MatSeqBAIJSetPreallocation(_a, _blockSize, 5, NULL)); //todo preAllocate off-diagonal part
+  }
   // override the default options with the ones from the option
   // database (if any)
-  _try(MatSetFromOptions(_a));
-  _try(MatMPIBAIJSetPreallocation(_a, _blockSize, 5, NULL, 0, NULL));
-  //_try(MatMPIBAIJSetPreallocation(_a, _blockSize, 4, NULL, 0, NULL)); //todo preAllocate off-diagonal part
   _try(VecCreate(PETSC_COMM_WORLD, &_x));
   _try(VecSetSizes(_x, nbRows * _blockSize, PETSC_DETERMINE));
   // override the default options with the ones from the option