diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h
index a29504b..e0220fd 100644
--- a/Eigen/src/Core/MatrixBase.h
+++ b/Eigen/src/Core/MatrixBase.h
@@ -202,6 +202,7 @@
     /** the return type of MatrixBase::adjoint() */
     typedef Transpose<NestByValue<typename ei_unref<ConjugateReturnType>::type> >
             AdjointReturnType;
+    typedef Matrix<typename NumTraits<typename ei_traits<Derived>::Scalar>::Real, ei_traits<Derived>::ColsAtCompileTime, 1> EigenvaluesReturnType;
     //@}
 
     /// \name Copying and initialization
@@ -605,6 +606,9 @@
       */
     //@{
     const QR<typename ei_eval<Derived>::type> qr() const;
+    
+    EigenvaluesReturnType eigenvalues() const;
+    RealScalar matrixNorm() const;
     //@}
 
 };
diff --git a/Eigen/src/LU/Inverse.h b/Eigen/src/LU/Inverse.h
index 89140e8..8ff723e 100644
--- a/Eigen/src/LU/Inverse.h
+++ b/Eigen/src/LU/Inverse.h
@@ -269,7 +269,7 @@
 const Inverse<typename ei_eval<Derived>::type, true>
 MatrixBase<Derived>::inverse() const
 {
-  return Inverse<typename ei_eval<Derived>::type, true>(eval());
+  return Inverse<typename Derived::Eval, true>(eval());
 }
 
 /** \return the matrix inverse of \c *this, which is assumed to exist.
@@ -283,7 +283,7 @@
 const Inverse<typename ei_eval<Derived>::type, false>
 MatrixBase<Derived>::quickInverse() const
 {
-  return Inverse<typename ei_eval<Derived>::type, false>(eval());
+  return Inverse<typename Derived::Eval, false>(eval());
 }
 
 #endif // EIGEN_INVERSE_H
diff --git a/Eigen/src/QR/SelfAdjointEigenSolver.h b/Eigen/src/QR/SelfAdjointEigenSolver.h
index 0df0db0..e62a953 100644
--- a/Eigen/src/QR/SelfAdjointEigenSolver.h
+++ b/Eigen/src/QR/SelfAdjointEigenSolver.h
@@ -31,6 +31,8 @@
   *
   * \param MatrixType the type of the matrix of which we are computing the eigen decomposition
   *
+  * \note MatrixType must be an actual Matrix type, it can't be an expression type.
+  *
   * \sa MatrixBase::eigenvalues(), class EigenSolver
   */
 template<typename _MatrixType> class SelfAdjointEigenSolver
@@ -58,7 +60,6 @@
 
     RealVectorType eigenvalues(void) const { return m_eivalues; }
 
-
   protected:
     MatrixType m_eivec;
     RealVectorType m_eivalues;
@@ -169,4 +170,49 @@
   std::cout << "ei values = " << m_eivalues.transpose() << "\n\n";
 }
 
+template<typename Derived>
+inline Matrix<typename NumTraits<typename ei_traits<Derived>::Scalar>::Real, ei_traits<Derived>::ColsAtCompileTime, 1>
+MatrixBase<Derived>::eigenvalues() const
+{
+  ei_assert(Flags&SelfAdjointBit);
+  return SelfAdjointEigenSolver<typename Derived::Eval>(eval()).eigenvalues();
+}
+
+template<typename Derived, bool IsSelfAdjoint>
+struct ei_matrixNorm_selector
+{
+  static inline typename NumTraits<typename ei_traits<Derived>::Scalar>::Real
+  matrixNorm(const MatrixBase<Derived>& m)
+  {
+    // FIXME if it is really guaranteed that the eigenvalues are already sorted,
+    // then we don't need to compute a maxCoeff() here, comparing the 1st and last ones is enough.
+    return m.eigenvalues().cwiseAbs().maxCoeff();
+  }
+};
+
+template<typename Derived> struct ei_matrixNorm_selector<Derived, false>
+{
+  static inline typename NumTraits<typename ei_traits<Derived>::Scalar>::Real
+  matrixNorm(const MatrixBase<Derived>& m)
+  {
+    // FIXME if it is really guaranteed that the eigenvalues are already sorted,
+    // then we don't need to compute a maxCoeff() here, comparing the 1st and last ones is enough.
+    return ei_sqrt(
+             (m*m.adjoint())
+             .template marked<SelfAdjoint>()
+             .eigenvalues()
+             .cwiseAbs()
+             .maxCoeff()
+           );
+  }
+};
+
+template<typename Derived>
+inline typename NumTraits<typename ei_traits<Derived>::Scalar>::Real
+MatrixBase<Derived>::matrixNorm() const
+{
+  return ei_matrixNorm_selector<Derived, Flags&SelfAdjointBit>
+       ::matrixNorm(derived());
+}
+
 #endif // EIGEN_SELFADJOINTEIGENSOLVER_H
