diff --git a/src/FiniteDifference/eq_unit_test_3d.cpp b/src/FiniteDifference/eq_unit_test_3d.cpp
index 9b9694031d75cf2f4c433c56df5e3bef67936837..18665e6d9f4026362856e580c80cbabc64a9eb36 100644
--- a/src/FiniteDifference/eq_unit_test_3d.cpp
+++ b/src/FiniteDifference/eq_unit_test_3d.cpp
@@ -44,7 +44,7 @@ struct lid_nn_3d_eigen
 	typedef grid_dist_id<3,float,aggregate<float[3],float>,CartDecomposition<3,float>> b_grid;
 
 	//! type of SparseMatrix for the linear solver
-	typedef SparseMatrix<double,int> SparseMatrix_type;
+	typedef SparseMatrix<double,int,EIGEN_BASE> SparseMatrix_type;
 
 	//! type of Vector for the linear solver
 	typedef Vector<double> Vector_type;
diff --git a/src/Solvers/umfpack_solver.hpp b/src/Solvers/umfpack_solver.hpp
index 7eabf6536a5866224ef84530506f017f52a9cc68..de7e4422f721ac6c56956e3dfbc846156be05fd6 100644
--- a/src/Solvers/umfpack_solver.hpp
+++ b/src/Solvers/umfpack_solver.hpp
@@ -141,7 +141,7 @@ class umfpack_solver
 public:
 
 	//! stub solve
-	template<typename impl> static Vector<T> solve(const SparseMatrix<T,impl> & A, const Vector<T> & b)
+	template<typename impl, typename id_type> static Vector<T> solve(const SparseMatrix<T,id_type,impl> & A, const Vector<T,impl> & b)
 	{
 		std::cerr << __FILE__ << ":" << __LINE__ << " Error Umfpack only support double precision" << "/n";
 	}
@@ -153,7 +153,7 @@ public:
 	}
 
 	//! stub solve
-	static Vector<double,EIGEN_BASE> try_solve(SparseMatrix<double,int,EIGEN_BASE> & A, const Vector<double,EIGEN_BASE> & b, size_t opt = UMFPACK_NONE)
+	template<unsigned int impl, typename id_type> static Vector<T,impl> try_solve(SparseMatrix<T,id_type,impl> & A, const Vector<T,impl> & b, size_t opt = UMFPACK_NONE)
 	{
 		std::cerr << __FILE__ << ":" << __LINE__ << " Error Umfpack only support double precision" << "/n";
 	}