diff --git a/Numeric/fullMatrix.cpp b/Numeric/fullMatrix.cpp
index 58abf9f24acedef0ec3e4a1410a495207efbaa46..b4325e0ef689f50373300ecf07721e86794f8488 100644
--- a/Numeric/fullMatrix.cpp
+++ b/Numeric/fullMatrix.cpp
@@ -290,24 +290,22 @@ bool fullMatrix<double>::luSolve(const fullVector<double> &rhs, fullVector<doubl
 }
 
 template<>
-bool fullMatrix<double>::luFactor()
+bool fullMatrix<double>::luFactor(fullVector<int> &ipiv)
 {
   int M = size1(), N = size2(), lda = size1(), info;
-  int *ipiv = new int[std::min(M, N)];
-  F77NAME(dgetrf)(&M, &N, _data, &lda, ipiv, &info);
-  delete [] ipiv;
+  ipiv.resize(std::min(M, N));
+  F77NAME(dgetrf)(&M, &N, _data, &lda, &ipiv(0), &info);
   if(info == 0) return true;
   return false;
 }
 
 template<>
-bool fullMatrix<double>::luSubstitute(const fullVector<double> &rhs, fullVector<double> &result)
+bool fullMatrix<double>::luSubstitute(const fullVector<double> &rhs, fullVector<int> &ipiv, fullVector<double> &result)
 {
   int N = size1(), nrhs=1, lda = N, ldb = N, info;
-  int *ipiv = new int[N];
+  char trans = 'N';
   for(int i = 0; i < N; i++) result(i) = rhs(i);
-  F77NAME(dgetrs)("N", &N, &nrhs, _data, &lda, ipiv, result._data, &ldb, &info);
-  delete [] ipiv;
+  F77NAME(dgetrs)(&trans, &N, &nrhs, _data, &lda, &ipiv(0), result._data, &ldb, &info);
   if(info == 0) return true;
   return false;
 }
diff --git a/Numeric/fullMatrix.h b/Numeric/fullMatrix.h
index 74cf557c339c2bf627cb68157b415dc9dbde60a5..74debb530eefa04985ea788cf681b3cf529af794 100644
--- a/Numeric/fullMatrix.h
+++ b/Numeric/fullMatrix.h
@@ -686,7 +686,7 @@ class fullMatrix
   }
 #endif
   ;
- bool luFactor()
+ bool luFactor(fullVector<int> &ipiv)
 #if !defined(HAVE_LAPACK)
   {
     Msg::Error("LU factorization requires LAPACK");
@@ -694,7 +694,7 @@ class fullMatrix
   }
 #endif
   ;
- bool luSubstitute(const fullVector<double> &rhs, fullVector<double> &result)
+ bool luSubstitute(const fullVector<scalar> &rhs, fullVector<int> &ipiv, fullVector<scalar> &result)
 #if !defined(HAVE_LAPACK)
   {
     Msg::Error("LU substitution requires LAPACK");