diff --git a/unsupported/Eigen/src/SparseExtra/SimplicialCholesky.h b/unsupported/Eigen/src/SparseExtra/SimplicialCholesky.h
index 302be1c..6af6407 100644
--- a/unsupported/Eigen/src/SparseExtra/SimplicialCholesky.h
+++ b/unsupported/Eigen/src/SparseExtra/SimplicialCholesky.h
@@ -295,7 +295,7 @@
   m_parent.resize(size);
   m_nonZerosPerCol.resize(size);
   
-  Index* tags = ei_aligned_stack_new(Index, size);
+  ei_declare_aligned_stack_constructed_variable(Index, tags, size, 0);
   
   // TODO allows to configure the permutation
   {
@@ -338,9 +338,6 @@
     }
   }
   
-  // release workspace
-  ei_aligned_stack_delete(Index, tags, size);
-  
   /* construct Lp index array from m_nonZerosPerCol column counts */
   Index* Lp = m_matrix._outerIndexPtr();
   Lp[0] = 0;
@@ -369,9 +366,9 @@
   Index* Li = m_matrix._innerIndexPtr();
   Scalar* Lx = m_matrix._valuePtr();
 
-  Scalar* y       = ei_aligned_stack_new(Scalar, size);
-  Index* pattern  = ei_aligned_stack_new(Index, size);
-  Index* tags     = ei_aligned_stack_new(Index, size);
+  ei_declare_aligned_stack_constructed_variable(Scalar, y, size, 0);
+  ei_declare_aligned_stack_constructed_variable(Index,  pattern, size, 0);
+  ei_declare_aligned_stack_constructed_variable(Index,  tags, size, 0);
 
   SparseMatrix<Scalar,ColMajor,Index> ap(size,size);
   ap.template selfadjointView<Upper>() = a.template selfadjointView<UpLo>().twistedBy(m_Pinv);
@@ -443,11 +440,6 @@
     }
   }
 
-  // release workspace
-  ei_aligned_stack_delete(Scalar, y, size);
-  ei_aligned_stack_delete(Index, pattern, size);
-  ei_aligned_stack_delete(Index, tags, size);
-  
   m_info = ok ? Success : NumericalIssue;
   m_factorizationIsOk = true;
 }
diff --git a/unsupported/Eigen/src/SparseExtra/SparseLDLTLegacy.h b/unsupported/Eigen/src/SparseExtra/SparseLDLTLegacy.h
index 14a89dc..14283c1 100644
--- a/unsupported/Eigen/src/SparseExtra/SparseLDLTLegacy.h
+++ b/unsupported/Eigen/src/SparseExtra/SparseLDLTLegacy.h
@@ -245,7 +245,8 @@
   m_matrix.resize(size, size);
   m_parent.resize(size);
   m_nonZerosPerCol.resize(size);
-  Index * tags = ei_aligned_stack_new(Index, size);
+
+  ei_declare_aligned_stack_constructed_variable(Index, tags, size, 0);
 
   const Index* Ap = a._outerIndexPtr();
   const Index* Ai = a._innerIndexPtr();
@@ -298,7 +299,6 @@
     Lp[k+1] = Lp[k] + m_nonZerosPerCol[k];
 
   m_matrix.resizeNonZeros(Lp[size]);
-  ei_aligned_stack_delete(Index, tags, size);
 }
 
 template<typename _MatrixType, typename Backend>
@@ -317,9 +317,9 @@
   Scalar* Lx = m_matrix._valuePtr();
   m_diag.resize(size);
 
-  Scalar * y = ei_aligned_stack_new(Scalar, size);
-  Index * pattern = ei_aligned_stack_new(Index, size);
-  Index * tags = ei_aligned_stack_new(Index, size);
+  ei_declare_aligned_stack_constructed_variable(Scalar, y, size, 0);
+  ei_declare_aligned_stack_constructed_variable(Index,  pattern, size, 0);
+  ei_declare_aligned_stack_constructed_variable(Index,  tags, size, 0);
   
   Index* P = 0;
   Index* Pinv = 0;
@@ -383,10 +383,6 @@
     }
   }
 
-  ei_aligned_stack_delete(Scalar, y, size);
-  ei_aligned_stack_delete(Index, pattern, size);
-  ei_aligned_stack_delete(Index, tags, size);
-
   return ok;  /* success, diagonal of D is all nonzero */
 }
 
