Use conj_expr_if to clarify what it's doing.
diff --git a/blas/GeneralRank1Update.h b/blas/GeneralRank1Update.h
index 6d33fbc..07d388c 100644
--- a/blas/GeneralRank1Update.h
+++ b/blas/GeneralRank1Update.h
@@ -21,9 +21,10 @@
 {
   static void run(Index rows, Index cols, Scalar* mat, Index stride, const Scalar* u, const Scalar* v, Scalar alpha)
   {
-    internal::conj_if<ConjRhs> cj;
     typedef Map<const Matrix<Scalar,Dynamic,1> > OtherMap;
-    typedef typename internal::conditional<ConjLhs,typename OtherMap::ConjugateReturnType,const OtherMap&>::type ConjRhsType;
+    typedef typename conj_expr_if<ConjLhs,OtherMap>::type ConjRhsType;
+    conj_if<ConjRhs> cj;
+
     for (Index i=0; i<cols; ++i)
       Map<Matrix<Scalar,Dynamic,1> >(mat+stride*i,rows) += alpha * cj(v[i]) * ConjRhsType(OtherMap(u,rows));
   }
diff --git a/blas/PackedSelfadjointProduct.h b/blas/PackedSelfadjointProduct.h
index adc86ec..1ba67b9 100644
--- a/blas/PackedSelfadjointProduct.h
+++ b/blas/PackedSelfadjointProduct.h
@@ -17,9 +17,9 @@
  *
  * FIXME I always fail tests for complex self-adjoint matrices.
  *
- ******* FATAL ERROR - PARAMETER NUMBER  6 WAS CHANGED INCORRECTLY *******
- ******* xHPR   FAILED ON CALL NUMBER:
-      2: xHPR  ('U',  1, 0.0, X, 1, AP)
+ * ******* FATAL ERROR - PARAMETER NUMBER  6 WAS CHANGED INCORRECTLY *******
+ * ******* xHPR   FAILED ON CALL NUMBER:
+ *      2: xHPR  ('U',  1, 0.0, X, 1, AP)
  */
 template<typename Scalar, typename Index, int StorageOrder, int UpLo, bool ConjLhs, bool ConjRhs>
 struct selfadjoint_packed_rank1_update;
@@ -29,9 +29,9 @@
 {
   static void run(Index size, Scalar* mat, const Scalar* vec, Scalar alpha)
   {
-    internal::conj_if<ConjRhs> cj;
     typedef Map<const Matrix<Scalar,Dynamic,1> > OtherMap;
-    typedef typename internal::conditional<ConjLhs,typename OtherMap::ConjugateReturnType,const OtherMap&>::type ConjRhsType;
+    typedef typename conj_expr_if<ConjLhs,OtherMap>::type ConjRhsType;
+    conj_if<ConjRhs> cj;
     Index offset = 0;
 
     for (Index i=0; i<size; ++i)
diff --git a/blas/level2_real_impl.h b/blas/level2_real_impl.h
index 38b0dad..febf08d 100644
--- a/blas/level2_real_impl.h
+++ b/blas/level2_real_impl.h
@@ -242,8 +242,8 @@
     for(int k=0; k<2; ++k)
       func[k] = 0;
 
-    func[UP] = (internal::selfadjoint_packed_rank1_update<Scalar,int,ColMajor,Upper,false,Conj>::run);
-    func[LO] = (internal::selfadjoint_packed_rank1_update<Scalar,int,ColMajor,Lower,false,Conj>::run);
+    func[UP] = (internal::selfadjoint_packed_rank1_update<Scalar,int,ColMajor,Upper,false,false>::run);
+    func[LO] = (internal::selfadjoint_packed_rank1_update<Scalar,int,ColMajor,Lower,false,false>::run);
 
     init = true;
   }