diff --git a/AMDiS/src/Assembler.cc b/AMDiS/src/Assembler.cc
index dfc72f4b066157815bf9f50036991c217c7121a1..03e16e3e7d7a88170b943c5e950eb8750ad3e43b 100644
--- a/AMDiS/src/Assembler.cc
+++ b/AMDiS/src/Assembler.cc
@@ -120,23 +120,39 @@ namespace AMDiS {
     }
 
     if (firstOrderAssemblerGrdPsi) {
+      firstOrderAssemblerGrdPsi->calculateElementMatrix(smallElInfo, mat);
+
       if (largeElInfo == colElInfo) {
-	ERROR_EXIT("123 Not yet implemented for first order assembler!\n");
-      } else {
-	firstOrderAssemblerGrdPsi->calculateElementMatrix(smallElInfo, mat);
+	ElementMatrix &m = 
+	  smallElInfo->getSubElemGradCoordsMat(rowFESpace->getBasisFcts()->getDegree());
 
+	tmpMat = m * mat;
+      } else {
 	ElementMatrix &m = 
 	  smallElInfo->getSubElemCoordsMat(rowFESpace->getBasisFcts()->getDegree());
 	
 	tmpMat = mat * trans(m);
-	
-	mat = tmpMat;
       }
+	
+      mat = tmpMat;
     }
 
     if (firstOrderAssemblerGrdPhi) {
-      ERROR_EXIT("Not yet implemented for first order assembler!\n");
       firstOrderAssemblerGrdPhi->calculateElementMatrix(smallElInfo, mat);
+
+      if (largeElInfo == rowElInfo) {
+	ElementMatrix &m = 
+	  smallElInfo->getSubElemGradCoordsMat(rowFESpace->getBasisFcts()->getDegree());
+
+	tmpMat = mat * trans(m);
+      } else {
+	ElementMatrix &m = 
+	  smallElInfo->getSubElemCoordsMat(rowFESpace->getBasisFcts()->getDegree());
+	
+	tmpMat = m * mat;	
+      }
+
+      mat = tmpMat;
     }
 
     if (zeroOrderAssembler) {