diff --git a/Solver/femTerm.h b/Solver/femTerm.h
index b0ebaf69c8677e3dfc4923336ff234e5b0d4a3a1..77ba2b55dab73ec37b72b90b97a220b0d5e65e0c 100644
--- a/Solver/femTerm.h
+++ b/Solver/femTerm.h
@@ -75,23 +75,40 @@ class femTerm {
   {
     const int nbR = localMatrix.size1();
     const int nbC = localMatrix.size2();
-    std::vector<Dof> R,C;
-    for (int j = 0; j < nbR; j++)
-      R.push_back(getLocalDofR(se, j));
-    for (int k = 0; k < nbC; k++)
-      C.push_back(getLocalDofC(se, k));
-
+    std::vector<Dof> R,C; // better use default consdtructors and reserve the right amount of space to avoid reallocation
+    R.reserve(nbR);
+    C.reserve(nbC);
+    bool sym=true;
+    if (nbR == nbC)
+    {
+      for (int j = 0; j < nbR; j++)
+      { 
+        Dof r(getLocalDofR(se, j));
+        Dof c(getLocalDofC(se, j));
+        R.push_back(r);
+        C.push_back(c);
+        if (!(r==c)) sym=false;
+      }
+    }
+    else
+    {
+      sym=false;
+      for (int j = 0; j < nbR; j++)
+        R.push_back(getLocalDofR(se, j));
+      for (int k = 0; k < nbC; k++)
+        C.push_back(getLocalDofC(se, k));
+    }
 /*     for (int i = 0; i < nbC; i++) */
 /*       for (int j = 0; j < nbR; j++) */
 /* 	dm.assemble(getLocalDofR(se, i), getLocalDofC(se, j), localMatrix(i,j)); */
 /*     return; */
     
-    bool sym = true;
-    if (nbR == nbC){
-      for (int i=0;i<nbR;i++)
-	if (!(C[i] == R[i]))sym = false;
-    }
-    else sym = false;
+    
+//    if (nbR == nbC){
+//      for (int i=0;i<nbR;i++)
+//	if (!(C[i] == R[i]))sym = false;
+//    }
+//    else sym = false;
     if (!sym)
       dm.assemble(R, C, localMatrix);
     else