diff --git a/unsupported/Eigen/src/IterativeSolvers/ConjugateGradient.h b/unsupported/Eigen/src/IterativeSolvers/ConjugateGradient.h
index c8b276dcf..f1bed1116 100644
--- a/unsupported/Eigen/src/IterativeSolvers/ConjugateGradient.h
+++ b/unsupported/Eigen/src/IterativeSolvers/ConjugateGradient.h
@@ -330,13 +330,13 @@ struct solve_retval<ConjugateGradient<_MatrixType,_UpLo,_Preconditioner>, Rhs>
 
 template<typename CG, typename Rhs, typename Guess>
 class conjugate_gradient_solve_retval_with_guess
-  : solve_retval_base<CG, Rhs>
+  : public solve_retval_base<CG, Rhs>
 {
   typedef Eigen::internal::solve_retval_base<CG,Rhs> Base;
   using Base::dec;
   using Base::rhs;
-
-    conjugate_gradient_solve_retval_with_guess(const CG& cg, const Rhs& rhs, const Guess guess)
+  public:
+    conjugate_gradient_solve_retval_with_guess(const CG& cg, const Rhs& rhs, const Guess& guess)
       : Base(cg, rhs), m_guess(guess)
     {}
 
diff --git a/unsupported/test/cg.cpp b/unsupported/test/cg.cpp
index bc421985e..a9ac81960 100644
--- a/unsupported/test/cg.cpp
+++ b/unsupported/test/cg.cpp
@@ -53,6 +53,10 @@ template<typename Scalar,typename Index> void cg(int size)
   x = ConjugateGradient<SparseMatrixType, Lower>().compute(m3).solve(b);
   VERIFY(ref_x.isApprox(x,test_precision<Scalar>()) && "ConjugateGradient: solve, full storage, lower");
 
+  x.setRandom();
+  x = ConjugateGradient<SparseMatrixType, Lower>().compute(m3).solveWithGuess(b,x);
+  VERIFY(ref_x.isApprox(x,test_precision<Scalar>()) && "ConjugateGradient: solveWithGuess, full storage, lower");
+
   x = ConjugateGradient<SparseMatrixType, Upper>().compute(m3).solve(b);
   VERIFY(ref_x.isApprox(x,test_precision<Scalar>()) && "ConjugateGradient: solve, full storage, upper, single dense rhs");