diff --git a/src/averageinterface.hh b/src/averageinterface.hh
index 22ba084d760c6656e50252fda4057698baa78266..3b731ba212ed15928e3a97d1270f11211741928e 100644
--- a/src/averageinterface.hh
+++ b/src/averageinterface.hh
@@ -52,9 +52,6 @@ void computeAveragePressure(const Dune::FieldVector<double,GridType::dimension>&
             const Dune::LagrangeShapeFunctionSet<ctype, field_type, dim-1>& baseSet
                 = Dune::LagrangeShapeFunctions<ctype, field_type, dim-1>::general(nIt.intersectionGlobal().type(),1);
 
-            if (baseSet.size() != 4)
-                DUNE_THROW(Dune::NotImplemented, "average interface only for quad faces");
-            
             // four rows because a face may have no more than four vertices
             Dune::FieldVector<double,4> mu(0);
             Dune::FieldVector<double,3> mu_tilde[4][3];
@@ -96,25 +93,19 @@ void computeAveragePressure(const Dune::FieldVector<double,GridType::dimension>&
                 
             }
 
-
-//             std::cout << "tilde{mu}\n" << std::endl;
-//             for (int i=0; i<4; i++)
-//                 for (int j=0; j<3; j++)
-//                     std::cout << "i: " << i << ",  j: " << j << ",   " << mu_tilde[i][j] << std::endl;
-
-
             // Set up matrix
-            Dune::FieldMatrix<double, 6, 12> matrix(0);
-            for (int i=0; i<4; i++)
+            Dune::Matrix<Dune::FieldMatrix<double,1,1> > matrix(6, 3*baseSet.size());
+            matrix = 0;
+            for (int i=0; i<baseSet.size(); i++)
                 for (int j=0; j<3; j++)
                     matrix[j][i*3+j] = mu[i];
 
-            for (int i=0; i<4; i++)
+            for (int i=0; i<baseSet.size(); i++)
                 for (int j=0; j<3; j++)
                     for (int k=0; k<3; k++)
                         matrix[3+k][3*i+j] = mu_tilde[i][j][k];
 
-            Dune::FieldVector<double,12> u;
+            Dune::BlockVector<Dune::FieldVector<double,1> > u(3*baseSet.size());
             Dune::FieldVector<double,6> b;
 
             // Scale the resultant force and torque with this segments area percentage.
@@ -133,12 +124,9 @@ void computeAveragePressure(const Dune::FieldVector<double,GridType::dimension>&
             linearSolver(matrix, u, b);
             //std::cout << u << std::endl;
 
-            for (int i=0; i<3; i++) {
-                pressure[dgIndexSet(*eIt, nIt.numberInSelf())][i]   = u[i];
-                pressure[dgIndexSet(*eIt, nIt.numberInSelf())+1][i] = u[i+3];
-                pressure[dgIndexSet(*eIt, nIt.numberInSelf())+2][i] = u[i+6];
-                pressure[dgIndexSet(*eIt, nIt.numberInSelf())+3][i] = u[i+9];
-            }
+            for (int i=0; i<baseSet.size(); i++)
+                for (int j=0; j<3; j++)
+                    pressure[dgIndexSet(*eIt, nIt.numberInSelf())+i][j]   = u[i*3+j];
 
         }
 
@@ -201,8 +189,8 @@ void computeAveragePressure(const Dune::FieldVector<double,GridType::dimension>&
 
     outputForce  -= resultantForce;
     outputTorque -= resultantTorque;
-    assert( outputForce.two_norm() < 1e-6 );
-    assert( outputTorque.two_norm() < 1e-6 );
+    assert( outputForce.infinity_norm() < 1e-6 );
+    assert( outputTorque.infinity_norm() < 1e-6 );
 //     std::cout << "Output force:  " << outputForce << std::endl;
 //     std::cout << "Output torque: " << outputTorque << "      " << resultantTorque[0]/outputTorque[0] << std::endl;