diff --git a/modules/mol/alg/src/svd_superpose.cc b/modules/mol/alg/src/svd_superpose.cc
index 343c00e98291c06b29eb17be8c59483414178536..6608372c13a2372196041a0d6dfee8f2e312e647 100644
--- a/modules/mol/alg/src/svd_superpose.cc
+++ b/modules/mol/alg/src/svd_superpose.cc
@@ -27,6 +27,7 @@
 #include <Eigen/SVD>
 #include <Eigen/LU>
 
+#include <iostream>
 #include <ost/base.hh>
 #include <ost/geom/vec3.hh>
 #include <ost/mol/alg/svd_superpose.hh>
@@ -108,19 +109,54 @@ SuperposerSVD::SuperposerSVD(int natoms, bool alloc_atoms):
 }
 
 geom::Vec3 SuperposerSVD::EigenVec3ToVec3(const EVec3 &vec){
+#if  defined _MSC_VER
+  geom::Vec3 myvec3;
+  for (int i=0; i<3; ++i) {
+      myvec3[i]=vec[i]; 
+  }
+  return myvec3;
+#else
   return *reinterpret_cast<const geom::Vec3*>(&vec);
+#endif
 }
 
 geom::Mat3 SuperposerSVD::EigenMat3ToMat3(const EMat3 &mat){
+#if  defined _MSC_VER
+  geom::Mat3 mymat3;
+  for (int i=0; i<3; ++i) {
+    for (int j=0; j<3; ++j) {    
+      mymat3(j,i)=mat(i,j); 
+    }
+  }
+  return mymat3;
+#else
   return *reinterpret_cast<const geom::Mat3*>(&mat);
+#endif
+
 }
 
 EVec3 SuperposerSVD::Vec3ToEigenRVec(const geom::Vec3 &vec){
+#if  defined _MSC_VER
+  EVec3 myvec3=EVec3::Zero();
+  for (int counter=0; counter<3; ++counter) {
+    myvec3[counter]=vec[counter];
+  }
+  return myvec3;
+#else
   return *reinterpret_cast<const ERVec3*>(&vec);
+#endif
 }
 
 EVec3 SuperposerSVD::Vec3ToEigenVec(const geom::Vec3 &vec){
-  return *reinterpret_cast<const EVec3*>(&vec);
+#if  defined _MSC_VER
+  EVec3 myvec3=EVec3::Zero();
+  for (int counter=0; counter<3; ++counter) {
+    myvec3[counter]=vec[counter];
+  }
+  return myvec3;
+#else
+  return *reinterpret_cast<const EVec3*>(&vec);  
+#endif
 }
 
 EMatX SuperposerSVD::SubtractVecFromMatrixRows(EMatX Mat,
@@ -165,6 +201,7 @@ SuperpositionResult SuperposerSVD::DoSuperposition()
   atoms1_=this->SuperposerSVD::SubtractVecFromMatrixRows(atoms1_, avg1_);
   atoms2_=this->SuperposerSVD::SubtractVecFromMatrixRows(atoms2_, avg2_);
   EMatX atoms2=atoms2_.transpose();
+
   //single value decomposition
   Eigen::SVD<EMat3> svd(atoms2*atoms1_);