diff --git a/Solver/dofManager.h b/Solver/dofManager.h
index be34e9706df35e18da0795d13e4e219bdc57a2e2..9bec62daa61b47686b15321b08f8444887d98c09 100644
--- a/Solver/dofManager.h
+++ b/Solver/dofManager.h
@@ -317,19 +317,20 @@ class dofManager{
       {
         _current->addToRightHandSide(NR[i], m(i));
       }
-      else
-      {
-        typename std::map<Dof,DofAffineConstraint<dataVec> >::iterator itConstraint;
-        itConstraint = constraints.find(R[i]);
-        if (itConstraint != constraints.end())
-        {
-          for (unsigned j=0;j<(itConstraint->second).linear.size();j++)
-          {
-                  std::map<Dof, int>::iterator itC = unknown.find((itConstraint->second).linear[j].first); // lin dep in unknown ?!
-                  _current->addToRightHandSide(itC->second, m(i)*(itConstraint->second).linear[j].second);
-          }
-        }
-      }
+			else
+			{
+				typename std::map<Dof,DofAffineConstraint<dataVec> >::iterator itConstraint;
+				itConstraint = constraints.find(R[i]);
+				if (itConstraint != constraints.end())
+				{
+					for (unsigned j=0;j<(itConstraint->second).linear.size();j++)
+					{
+									dataMat tmp;
+									dofTraits<T>::gemm(tmp,(itConstraint->second).linear[j].second,m(i), 1, 0);
+									assemble((itConstraint->second).linear[j].first,tmp);
+					}
+				}
+			}
     }
   }
 
@@ -394,6 +395,20 @@ class dofManager{
     if(itR != unknown.end()){
       _current->addToRightHandSide(itR->second, value);
     }
+		else
+		{
+			typename std::map<Dof,DofAffineConstraint<dataVec> >::iterator itConstraint;
+			itConstraint = constraints.find(R);
+			if (itConstraint != constraints.end())
+			{
+				for (unsigned j=0;j<(itConstraint->second).linear.size();j++)
+				{
+								dataMat tmp;
+								dofTraits<T>::gemm(tmp,(itConstraint->second).linear[j].second,value, 1, 0);
+								assemble((itConstraint->second).linear[j].first,tmp);
+				}
+			}
+		}
   }
   inline void assemble(int entR, int typeR, const dataMat &value)
   {