diff --git a/Jenkinsfile b/Jenkinsfile
index e05b7c26571084dcc3e50d36551612697b6879f2..94f403ae77c101a6a8b15f90703e08e2de24c860 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -152,7 +152,7 @@ pipeline {
                 // Doxygen is handled by gcc4 parser as well
                 tools: [gcc4(name: 'Doxygen', id: 'doxygen',
                              pattern: 'build/DoxygenWarnings.log')],
-                unstableTotalAll: 1
+                unstableTotalAll: 2
             }
             success {
               publishHTML(target: [allowMissing: false, alwaysLinkToLastBuild: true,
diff --git a/MeshLib/Elements/MapBulkElementPoint.cpp b/MeshLib/Elements/MapBulkElementPoint.cpp
index f0deb125afcb23c7fc688ac74dd852578d93e589..c5ab31d53781aa841d2e38fd7534ab6b8e3ec90e 100644
--- a/MeshLib/Elements/MapBulkElementPoint.cpp
+++ b/MeshLib/Elements/MapBulkElementPoint.cpp
@@ -14,6 +14,25 @@
 
 namespace MeshLib
 {
+MathLib::Point3d getBulkElementPoint(MeshLib::Tri const& /*tri*/,
+                                     std::size_t const face_id,
+                                     MathLib::WeightedPoint1D const& wp)
+{
+    switch (face_id)
+    {
+        case 0:
+            return MathLib::Point3d{std::array<double, 3>{{wp[0], 0.0, 0.0}}};
+        case 1:
+            return MathLib::Point3d{
+                std::array<double, 3>{{1 - wp[0], wp[0], 0.0}}};
+        case 2:
+            return MathLib::Point3d{
+                std::array<double, 3>{{0.0, 1 - wp[0], 0.0}}};
+        default:
+            OGS_FATAL("Invalid face id '{:d}' for the tri.", face_id);
+    }
+}
+
 MathLib::Point3d getBulkElementPoint(MeshLib::Quad const& /*quad*/,
                                      std::size_t const face_id,
                                      MathLib::WeightedPoint1D const& wp)
@@ -74,7 +93,7 @@ MathLib::Point3d getBulkElementPoint(MeshLib::Tet const& /*tet*/,
                 std::array<double, 3>{{1 - wp[0] - wp[1], wp[0], wp[1]}}};
         case 3:
             return MathLib::Point3d{
-                std::array<double, 3>{{0, 1 - wp[0], wp[1]}}};
+                std::array<double, 3>{{0, wp[1], wp[0]}}};
         default:
             OGS_FATAL("Invalid face id '{:d}' for the tetrahedron.", face_id);
     }
@@ -117,6 +136,11 @@ MathLib::Point3d getBulkElementPoint(MeshLib::Mesh const& mesh,
         MeshLib::Quad const& quad(*dynamic_cast<MeshLib::Quad const*>(element));
         return getBulkElementPoint(quad, bulk_face_id, wp);
     }
+    if (element->getCellType() == MeshLib::CellType::TRI3)
+    {
+        MeshLib::Tri const& tri = *static_cast<MeshLib::Tri const*>(element);
+        return getBulkElementPoint(tri, bulk_face_id, wp);
+    }
     OGS_FATAL("Wrong cell type '{:s}' or functionality not yet implemented.",
               MeshLib::CellType2String(element->getCellType()));
 }
diff --git a/MeshLib/Elements/MapBulkElementPoint.h b/MeshLib/Elements/MapBulkElementPoint.h
index 6f902717de198c552ab7c22b67eb8d9be73df706..eed2edbc1bd4ea8191164594d84a9dad10a28e92 100644
--- a/MeshLib/Elements/MapBulkElementPoint.h
+++ b/MeshLib/Elements/MapBulkElementPoint.h
@@ -17,13 +17,30 @@
 
 namespace MeshLib
 {
+/// \page BulkMappingDocuPage
+/// [Documentation](https://www.opengeosys.org/pdf/BulkElementMappings.pdf) for
+/// the mapping of a point given in local coordinates of a boundary face/element
+/// to the corresponding bulk element point.
+
+/// Maps the given lower dimensional boundary point \c wp of a line, i.e. the 1d
+/// integration point given in local coordinates of a line, to higher
+/// dimensional point of the triangle face (defined by the triangle element and
+/// the face id) also in local coordinates of the triangle element.
+/// \param tri the triangle element
+/// \param face_id the id of the triangle face the point will be mapped on
+/// \param wp the integration point of the lower dimensional element
+/// \return the mapped point
+MathLib::Point3d getBulkElementPoint(MeshLib::Tri const& tri,
+                                     std::size_t const face_id,
+                                     MathLib::WeightedPoint1D const& wp);
+
 /// Maps the given lower dimensional boundary point \c wp of a line, i.e. the 1d
-/// gauss point given in local coordinates of a line, to higher dimensional
+/// integration point given in local coordinates of a line, to higher dimensional
 /// point of the quad face (defined by the quad element and the face id) also in
 /// local coordinates of the quad face.
 /// \param quad the quad element
 /// \param face_id the id of the quad face the point will be mapped on
-/// \param wp the gauss point of the lower dimensional element
+/// \param wp the integration point of the lower dimensional element
 /// \return the mapped point
 MathLib::Point3d getBulkElementPoint(MeshLib::Quad const& quad,
                                      std::size_t const face_id,
diff --git a/ProcessLib/ComponentTransport/Tests.cmake b/ProcessLib/ComponentTransport/Tests.cmake
index cb93c6fccf62b5af47bf64425d5093f4863c1662..46da436fcf8a57b1a246e50c69234cb2c9f168d2 100644
--- a/ProcessLib/ComponentTransport/Tests.cmake
+++ b/ProcessLib/ComponentTransport/Tests.cmake
@@ -190,7 +190,7 @@ AddTest(
 )
 
 AddTest(
-    NAME 2D_ComponentTransport_NonAdvective_OpenBoundary
+    NAME 3D_ComponentTransport_NonAdvective_OpenBoundary
     PATH Parabolic/ComponentTransport/OpenBoundaryWithTets
     EXECUTABLE ogs
     EXECUTABLE_ARGS box_flow.prj
diff --git a/ProcessLib/LiquidFlow/Tests.cmake b/ProcessLib/LiquidFlow/Tests.cmake
index 05ae2845bfb51cef49aaee980f2e733d80186266..c878614c294e9e71b385818f35a851af6257b243 100644
--- a/ProcessLib/LiquidFlow/Tests.cmake
+++ b/ProcessLib/LiquidFlow/Tests.cmake
@@ -381,7 +381,7 @@ AddTest(
 )
 
 AddTest(
-    NAME LiquidFlow_Flux_2D
+    NAME LiquidFlow_Flux_2D_Quads
     PATH Parabolic/LiquidFlow/Flux/2D
     EXECUTABLE ogs
     EXECUTABLE_ARGS square_1e1_calculatesurfaceflux.prj
@@ -395,6 +395,21 @@ AddTest(
     LF_square_1e1_surfaceflux_pcs_0_ts_2_t_0.864000_expected.vtu LF_square_1e1_surfaceflux_pcs_0_ts_2_t_0.864000.vtu pressure pressure 1e-7 1e-13
 )
 
+AddTest(
+    NAME LiquidFlow_Flux_2D_Tris
+    PATH Parabolic/LiquidFlow/Flux/2D
+    EXECUTABLE ogs
+    EXECUTABLE_ARGS square_1.8e1_calculatesurfaceflux.prj
+    WRAPPER time
+    TESTER vtkdiff
+    REQUIREMENTS NOT OGS_USE_MPI
+    DIFF_DATA
+    square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.432000_expected.vtu square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.432000.vtu specific_flux specific_flux 1e-7 1e-13
+    square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.864000_expected.vtu square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.864000.vtu specific_flux specific_flux 1e-7 1e-13
+    LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_1_t_0.432000_expected.vtu LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_1_t_0.432000.vtu pressure pressure 1e-7 1e-13
+    LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_2_t_0.864000_expected.vtu LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_2_t_0.864000.vtu pressure pressure 1e-7 1e-13
+)
+
 #AddTest(
 #    NAME LiquidFlow_SimpleSynthetics_constraint_dirichlet_bc
 #    PATH Parabolic/LiquidFlow/SimpleSynthetics
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_1_t_0.432000_expected.vtu b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_1_t_0.432000_expected.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..d8084ca93e7b43ca1ffdad7025b6fce6162ebd60
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_1_t_0.432000_expected.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aa13e751c56fb0bf8f2334c5206d1c5fc4bc4e0355dee25ddeec679c0db7a692
+size 2702
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_2_t_0.864000_expected.vtu b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_2_t_0.864000_expected.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..f24e8c9177e1f8061bd1de133d9f4fedf9666590
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_2_t_0.864000_expected.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bec0d938d47033ce9c0d077cff2d479b45e47b0f8f0c24b855ce247b0c19c8c8
+size 2666
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1.8e1_calculatesurfaceflux.prj b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1.8e1_calculatesurfaceflux.prj
new file mode 100644
index 0000000000000000000000000000000000000000..f6f2780035c8c99c6a5e337e3c57bb4017a30043
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1.8e1_calculatesurfaceflux.prj
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<OpenGeoSysProject>
+    <meshes>
+        <mesh>square_1x1_tri_1.8e1.vtu</mesh>
+        <mesh>square_1x1_tri_1.8e1_complete_boundary.vtu</mesh>
+        <mesh>square_1x1_tri_1.8e1_left.vtu</mesh>
+        <mesh>square_1x1_tri_1.8e1_right.vtu</mesh>
+    </meshes>
+    <processes>
+        <process>
+            <name>LiquidFlow</name>
+            <type>LIQUID_FLOW</type>
+            <integration_order>2</integration_order>
+            <darcy_gravity>
+                <!-- axis_id: 0, 1, or the dimension of space minus one -->
+                <axis_id>0</axis_id>
+                <!-- g>=0. g=0: non gravity term -->
+                <g>0.</g>
+            </darcy_gravity>
+            <process_variables>
+                <process_variable>pressure</process_variable>
+            </process_variables>
+            <secondary_variables>
+                <secondary_variable internal_name="darcy_velocity" output_name="v"/>
+            </secondary_variables>
+            <calculatesurfaceflux>
+                <mesh>square_1x1_tri_1.8e1_complete_boundary</mesh>
+                <property_name>specific_flux</property_name>
+                <output_mesh>square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux.vtu</output_mesh>
+            </calculatesurfaceflux>
+        </process>
+    </processes>
+    <time_loop>
+        <processes>
+            <process ref="LiquidFlow">
+                <nonlinear_solver>basic_picard</nonlinear_solver>
+                <convergence_criterion>
+                    <type>DeltaX</type>
+                    <norm_type>NORM2</norm_type>
+                    <abstol>1.e-10</abstol>
+                </convergence_criterion>
+                <time_discretization>
+                    <type>BackwardEuler</type>
+                </time_discretization>
+                <time_stepping>
+                    <type>FixedTimeStepping</type>
+                    <t_initial> 0.0 </t_initial>
+                    <t_end> 0.864 </t_end>
+                    <timesteps>
+                        <pair>
+                            <repeat>2</repeat>
+                            <delta_t>0.432</delta_t>
+                        </pair>
+                    </timesteps>
+                </time_stepping>
+            </process>
+        </processes>
+        <output>
+            <type>VTK</type>
+            <prefix>LF_square_1x1_tri_1.8e1_surfaceflux</prefix>
+            <timesteps>
+                <pair>
+                    <repeat> 1 </repeat>
+                    <each_steps> 1 </each_steps>
+                </pair>
+            </timesteps>
+            <variables>
+                <variable> pressure </variable>
+                <variable> v </variable>
+            </variables>
+        </output>
+    </time_loop>
+    <media>
+        <medium id="0">
+            <phases>
+                <phase>
+                    <type>AqueousLiquid</type>
+                    <properties>
+                        <property>
+                            <name>viscosity</name>
+                            <type>Constant</type>
+                            <value> 1.295e-4 </value>
+                        </property>
+                        <property>
+                            <name>density</name>
+                            <type>Constant</type>
+                            <value> 78.68 </value>
+                        </property>
+                    </properties>
+                </phase>
+            </phases>
+            <properties>
+                <property>
+                    <name>permeability</name>
+                    <type>Constant</type>
+                    <value>9.2e-12 0 0 9.2e-12</value>
+                </property>
+                <property>
+                    <name>reference_temperature</name>
+                    <type>Constant</type>
+                    <value>293.15</value>
+                </property>
+                <property>
+                    <name>porosity</name>
+                    <type>Constant</type>
+                    <value>1</value>
+                </property>
+                <property>
+                    <name>storage</name>
+                    <type>Constant</type>
+                    <value> 8.05e-10 </value>
+                </property>
+            </properties>
+        </medium>
+    </media>
+    <parameters>
+        <parameter>
+            <name>p0</name>
+            <type>Constant</type>
+            <value>5e6</value>
+        </parameter>
+        <parameter>
+            <name>p_Dirichlet_left</name>
+            <type>Constant</type>
+            <value>1e7</value>
+        </parameter>
+        <parameter>
+            <name>p_Dirichlet_right</name>
+            <type>Constant</type>
+            <value>1e6</value>
+        </parameter>
+        <parameter>
+            <name>constant_porosity_parameter</name>
+            <type>Constant</type>
+            <value>1</value>
+        </parameter>
+        <parameter>
+            <name>kappa1</name>
+            <type>Constant</type>
+            <values>9.2e-12 0 0 9.2e-12</values>
+        </parameter>
+        <parameter>
+            <name>p_spatial</name>
+            <type>Constant</type>
+            <value>1</value>
+        </parameter>
+    </parameters>
+    <process_variables>
+        <process_variable>
+            <name>pressure</name>
+            <components>1</components>
+            <order>1</order>
+            <initial_condition>p0</initial_condition>
+            <boundary_conditions>
+                <boundary_condition>
+                    <mesh>square_1x1_tri_1.8e1_left</mesh>
+                    <type>Dirichlet</type>
+                    <parameter>p_Dirichlet_left</parameter>
+                </boundary_condition>
+                <boundary_condition>
+                    <mesh>square_1x1_tri_1.8e1_right</mesh>
+                    <type>Dirichlet</type>
+                    <parameter>p_Dirichlet_right</parameter>
+                </boundary_condition>
+            </boundary_conditions>
+        </process_variable>
+    </process_variables>
+    <nonlinear_solvers>
+        <nonlinear_solver>
+            <name>basic_picard</name>
+            <type>Picard</type>
+            <max_iter>10</max_iter>
+            <linear_solver>general_linear_solver</linear_solver>
+        </nonlinear_solver>
+    </nonlinear_solvers>
+    <linear_solvers>
+        <linear_solver>
+            <name>general_linear_solver</name>
+            <lis>-i cg -p jacobi -tol 1e-16 -maxiter 10000</lis>
+            <eigen>
+                <solver_type>CG</solver_type>
+                <precon_type>DIAGONAL</precon_type>
+                <max_iteration_step>10000</max_iteration_step>
+                <error_tolerance>1e-16</error_tolerance>
+            </eigen>
+            <petsc>
+                <prefix>lf</prefix>
+                <parameters>-lf_ksp_type cg -lf_pc_type bjacobi -lf_ksp_rtol 1e-16 -lf_ksp_max_it 10000</parameters>
+            </petsc>
+        </linear_solver>
+    </linear_solvers>
+</OpenGeoSysProject>
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1.vtu b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..f3efd25363bfe3a3a25e6d8a85fc838d21966553
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02038d37f25592860f20e33af7f39221d30b383c394d901e2b02bc2a5c48cd39
+size 2468
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary.vtu b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..6683f61fdc0a285dba8d0754c422c8a04f751976
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e49a1ccdb64a6f11a0f88a3dd8481b934c8036694d4624f219442c1cb52a41a
+size 2773
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.432000_expected.vtu b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.432000_expected.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..189762918ce8d60258024537573173d89ecb5661
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.432000_expected.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e8a4e7fade5bb0ce698207cb3d675381bf810ef0c7445d685ae355a29a2ef1d
+size 3168
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.864000_expected.vtu b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.864000_expected.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..9541fbfd03a54317aa3570c5543a3a6288ea4293
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.864000_expected.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc4fbd5d6008f31df1d8ff90c8d3204b29333f17662d837d4dd69e4038692959
+size 3168
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_left.vtu b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_left.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..66db156583055a1e2906419c538d79b11cb525c0
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_left.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a4e40d3faac538a0aa1e3f12a9efc64ab7a6bc4a236879016241bd3b50d1013
+size 2937
diff --git a/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_right.vtu b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_right.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..a1dd8398f592c4cde9ef3f507fba8bae4aecf97d
--- /dev/null
+++ b/Tests/Data/Parabolic/LiquidFlow/Flux/2D/square_1x1_tri_1.8e1_right.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8b1e6e026cc200ef1368cbda1ce59d4bd5249fe0c026b7466e09b24e6c2b144b
+size 2959
diff --git a/web/static/pdf/BulkElementMappings.pdf b/web/static/pdf/BulkElementMappings.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..67d045c799620b1c0a4252c0b59b7197f887963a
--- /dev/null
+++ b/web/static/pdf/BulkElementMappings.pdf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c2664b7e85842d668b9f0f6dd615b46f5a10c5f0bcb77a015823bec9af50df5
+size 128422