* added a lazyAssign overload skipping .lazy() such that c = (<xpr>).lazy() such that
  lazyAssign overloads of <xpr> are automatically called (this also reduces assign instansiations)
diff --git a/Eigen/CMakeLists.txt b/Eigen/CMakeLists.txt
index 7ca3640..d64b621 100644
--- a/Eigen/CMakeLists.txt
+++ b/Eigen/CMakeLists.txt
@@ -1,6 +1,6 @@
 SET(Eigen_HEADERS Core CoreDeclarations LU Cholesky QR Geometry Sparse Array)
 
-IF(TEST_LIB)
+IF(BUILD_LIB)
     SET(Eigen_SRCS
       src/Core/CoreInstantiations.cpp
       src/Cholesky/CholeskyInstantiations.cpp
@@ -8,7 +8,12 @@
     )
 
     ADD_LIBRARY(Eigen2 SHARED ${Eigen_SRCS})
-ENDIF(TEST_LIB)
+
+    INSTALL(TARGETS Eigen2
+            RUNTIME DESTINATION bin
+            LIBRARY DESTINATION lib
+            ARCHIVE DESTINATION lib)
+ENDIF(BUILD_LIB)
 
 IF(CMAKE_COMPILER_IS_GNUCXX)
     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g1 -O2")
@@ -26,11 +31,4 @@
   DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen
   )
 
-IF(TEST_LIB)
-    INSTALL(TARGETS Eigen2
-            RUNTIME DESTINATION bin
-            LIBRARY DESTINATION lib
-            ARCHIVE DESTINATION lib)
-ENDIF(TEST_LIB)
-
 ADD_SUBDIRECTORY(src)
\ No newline at end of file
diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h
index 26f0573..aba4817 100644
--- a/Eigen/src/Core/MatrixBase.h
+++ b/Eigen/src/Core/MatrixBase.h
@@ -212,9 +212,14 @@
       return this->operator=<Derived>(other);
     }
 
-    /** Overloaded for optimal product evaluation */
-    template<typename Derived1, typename Derived2>
-    Derived& lazyAssign(const Product<Derived1,Derived2,CacheFriendlyProduct>& product);
+    /** Overloaded for cache friendly product evaluation */
+    template<typename Lhs, typename Rhs>
+    Derived& lazyAssign(const Product<Lhs,Rhs,CacheFriendlyProduct>& product);
+
+    /** Overloaded for cache friendly product evaluation */
+    template<typename OtherDerived>
+    Derived& lazyAssign(const Flagged<OtherDerived, 0, EvalBeforeNestingBit | EvalBeforeAssigningBit>& other)
+    { lazyAssign(other._expression()); }
 
     /** Overloaded for sparse product evaluation */
     template<typename Derived1, typename Derived2>