diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py
index f246e0d95b68235eb7c467ce01dbc3fae3e4c2a6..9940aba70a83b17e606b3912bda72aa55ef4dd9a 100644
--- a/python/dune/perftool/pdelab/driver.py
+++ b/python/dune/perftool/pdelab/driver.py
@@ -72,7 +72,7 @@ def isSimplical(fem):
 
 
 def isQuadrilateral(fem):
-    return any(fem._cell._cellname in x for x in ["vertex", "interval", "quadrilateral", "hexalateral"])
+    return any(fem._cell._cellname in x for x in ["vertex", "interval", "quadrilateral", "hexahedron"])
 
 
 def isPk(fem):
@@ -146,7 +146,7 @@ def name_dimension():
 @preamble
 def typedef_grid(name):
     dim = name_dimension()
-    if any(_form.ufl_cell().cellname() in x for x in ["vertex", "interval", "quadrilateral", "hexalateral"]):
+    if any(_form.ufl_cell().cellname() in x for x in ["vertex", "interval", "quadrilateral", "hexahedron"]):
         gridt = "Dune::YaspGrid<{}>".format(dim)
         include_file("dune/grid/yaspgrid.hh", filetag="driver")
     else:
diff --git a/python/dune/perftool/ufl/execution.py b/python/dune/perftool/ufl/execution.py
index 90d75e771f93aa9c1f41f6136f20e3864d3b5685..8018e8593cbc3cffb304a6aea1fa62f8423846ff 100644
--- a/python/dune/perftool/ufl/execution.py
+++ b/python/dune/perftool/ufl/execution.py
@@ -51,17 +51,16 @@ def TrialFunctions(element):
     return split(TrialFunction(element))
 
 
-_dg0 = FiniteElement("DG", "triangle", 0)
-_dg0vec = VectorElement("DG", "triangle", 0)
-
-
 class Expression(Coefficient):
-    def __init__(self, expr, is_global=True, on_intersection=False):
+    def __init__(self, expr, is_global=True, on_intersection=False, cell_type="triangle"):
         assert isinstance(expr, str)
         self.c_expr = expr
         self.is_global = is_global
         self.on_intersection = on_intersection
 
+        # Avoid ufl complaining about not matching dimension/cells
+        _dg0 = FiniteElement("DG", cell_type, 0)
+
         # Initialize a coefficient with a dummy finite element map.
         Coefficient.__init__(self, _dg0)
 
@@ -72,12 +71,15 @@ class Expression(Coefficient):
 
 
 class VectorExpression(Coefficient):
-    def __init__(self, expr, is_global=True, on_intersection=False):
+    def __init__(self, expr, is_global=True, on_intersection=False, cell_type="triangle"):
         assert isinstance(expr, str)
         self.c_expr = expr
         self.is_global = is_global
         self.on_intersection = on_intersection
 
+        # Avoid ufl complaining about not matching dimension/cells
+        _dg0vec = VectorElement("DG", cell_type, 0)
+
         # Initialize a coefficient with a dummy finite element map.
         Coefficient.__init__(self, _dg0vec)
 
diff --git a/test/poisson/CMakeLists.txt b/test/poisson/CMakeLists.txt
index 54b8cfb27525d34c76f769a2db556ad01f983277..88f33d3a7d5a8727eabec2abdf3d286bff882680 100644
--- a/test/poisson/CMakeLists.txt
+++ b/test/poisson/CMakeLists.txt
@@ -1,3 +1,5 @@
+add_subdirectory(dimension-grid-variations)
+
 # Symlink any reference solutions
 dune_symlink_to_source_files(FILES poisson_ref.vtu
                                    poisson_dg_ref.vtu
diff --git a/test/poisson/dimension-grid-variations/CMakeLists.txt b/test/poisson/dimension-grid-variations/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..13b52b6dc48b7b6b17bdd5a5a4b723f91de2954b
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/CMakeLists.txt
@@ -0,0 +1,103 @@
+#================
+# 1D Tests: cg/dg
+#================
+
+add_generated_executable(UFLFILE poisson_1d_cg_interval.ufl
+                         TARGET poisson_1d_cg_interval
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-14 --compare-l2errorsquared 1e-7
+                         )
+
+dune_add_system_test(TARGET poisson_1d_cg_interval
+                     INIFILE poisson_1d_cg_interval.mini
+                     )
+
+add_generated_executable(UFLFILE poisson_1d_dg_interval.ufl
+                         TARGET poisson_1d_dg_interval
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-2 --compare-l2errorsquared 1e-7
+                         )
+
+dune_add_system_test(TARGET poisson_1d_dg_interval
+                     INIFILE poisson_1d_dg_interval.mini
+                     )
+
+
+#========================================
+# 2D Tests: cg/dg, triangle/quadrilateral
+#========================================
+
+add_generated_executable(UFLFILE poisson_2d_cg_triangle.ufl
+                         TARGET poisson_2d_cg_triangle
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-14 --compare-l2errorsquared 1e-6
+                         )
+
+dune_add_system_test(TARGET poisson_2d_cg_triangle
+                     INIFILE poisson_2d_cg_triangle.mini
+                     )
+
+add_generated_executable(UFLFILE poisson_2d_dg_triangle.ufl
+                         TARGET poisson_2d_dg_triangle
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-1 --compare-l2errorsquared 1e-4
+                         )
+
+dune_add_system_test(TARGET poisson_2d_dg_triangle
+                     INIFILE poisson_2d_dg_triangle.mini
+                     )
+
+add_generated_executable(UFLFILE poisson_2d_cg_quadrilateral.ufl
+                         TARGET poisson_2d_cg_quadrilateral
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-14 --compare-l2errorsquared 1e-6
+                         )
+
+dune_add_system_test(TARGET poisson_2d_cg_quadrilateral
+                     INIFILE poisson_2d_cg_quadrilateral.mini
+                     )
+
+add_generated_executable(UFLFILE poisson_2d_dg_quadrilateral.ufl
+                         TARGET poisson_2d_dg_quadrilateral
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-1 --compare-l2errorsquared 1e-4
+                         )
+
+dune_add_system_test(TARGET poisson_2d_dg_quadrilateral
+                     INIFILE poisson_2d_dg_quadrilateral.mini
+                     )
+
+
+#========================================
+# 3D Tests: cg/dg, tetrahedron/hexahedron
+#========================================
+
+add_generated_executable(UFLFILE poisson_3d_cg_tetrahedron.ufl
+                         TARGET poisson_3d_cg_tetrahedron
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-14 --compare-l2errorsquared 1e-4
+                         )
+
+dune_add_system_test(TARGET poisson_3d_cg_tetrahedron
+                     INIFILE poisson_3d_cg_tetrahedron.mini
+                     )
+
+add_generated_executable(UFLFILE poisson_3d_dg_tetrahedron.ufl
+                         TARGET poisson_3d_dg_tetrahedron
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-2 --compare-l2errorsquared 1e-4
+                         )
+
+dune_add_system_test(TARGET poisson_3d_dg_tetrahedron
+                     INIFILE poisson_3d_dg_tetrahedron.mini
+                     )
+
+add_generated_executable(UFLFILE poisson_3d_cg_hexahedron.ufl
+                         TARGET poisson_3d_cg_hexahedron
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1e-14 --compare-l2errorsquared 1e-4
+                         )
+
+dune_add_system_test(TARGET poisson_3d_cg_hexahedron
+                     INIFILE poisson_3d_cg_hexahedron.mini
+                     )
+
+add_generated_executable(UFLFILE poisson_3d_dg_hexahedron.ufl
+                         TARGET poisson_3d_dg_hexahedron
+                         FORM_COMPILER_ARGS --exact-solution-expression g --compare-dofs 1 --compare-l2errorsquared 1e-3
+                         )
+
+dune_add_system_test(TARGET poisson_3d_dg_hexahedron
+                     INIFILE poisson_3d_dg_hexahedron.mini
+                     )
diff --git a/test/poisson/dimension-grid-variations/poisson_1d_cg_interval.mini b/test/poisson/dimension-grid-variations/poisson_1d_cg_interval.mini
new file mode 100644
index 0000000000000000000000000000000000000000..016ce0b61111528827273e7cfcd3c73e68042660
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_1d_cg_interval.mini
@@ -0,0 +1,8 @@
+__name = poisson_1d_cg_interval
+
+cells = 32
+extension = 1.
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_1d_cg_interval.ufl b/test/poisson/dimension-grid-variations/poisson_1d_cg_interval.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..864810e8a0dd87330992901f0badaf53c9eedbe3
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_1d_cg_interval.ufl
@@ -0,0 +1,10 @@
+cell_type = "interval"
+
+f = Expression("return -2.0*x.size();", cell_type=cell_type)
+g = Expression("return x.two_norm2();", cell_type=cell_type)
+
+V = FiniteElement("CG", cell_type, 1, dirichlet_expression=g)
+u = TrialFunction(V)
+v = TestFunction(V)
+
+forms = [(inner(grad(u), grad(v)) - f*v)*dx]
\ No newline at end of file
diff --git a/test/poisson/dimension-grid-variations/poisson_1d_dg_interval.mini b/test/poisson/dimension-grid-variations/poisson_1d_dg_interval.mini
new file mode 100644
index 0000000000000000000000000000000000000000..f053c7321cb76e5854498a60dbbf253facca52cc
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_1d_dg_interval.mini
@@ -0,0 +1,8 @@
+__name = poisson_1d_dg_interval
+
+cells = 32
+extension = 1.
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_1d_dg_interval.ufl b/test/poisson/dimension-grid-variations/poisson_1d_dg_interval.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..f7775baf11b5225addc511a2016ddaac8ad0d9fe
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_1d_dg_interval.ufl
@@ -0,0 +1,27 @@
+cell_type = "interval"
+
+f = Expression("return -2.0*x.size();", cell_type=cell_type)
+g = Expression("return x.two_norm2();", on_intersection=True, cell_type=cell_type)
+
+V = FiniteElement("DG", cell_type, 1)
+
+u = TrialFunction(V)
+v = TestFunction(V)
+
+n = FacetNormal(cell_type)('+')
+
+gamma = 1.0
+theta = 1.0
+
+r = inner(grad(u), grad(v))*dx \
+  + inner(n, avg(grad(u)))*jump(v)*dS \
+  + gamma*jump(u)*jump(v)*dS \
+  + theta*jump(u)*inner(avg(grad(v)), n)*dS \
+  - inner(n, grad(u))*v*ds \
+  + gamma*u*v*ds \
+  - theta*u*inner(grad(v), n)*ds \
+  - f*v*dx \
+  + theta*g*inner(grad(v), n)*ds \
+  - gamma*g*v*ds
+
+forms = [r]
diff --git a/test/poisson/dimension-grid-variations/poisson_2d_cg_quadrilateral.mini b/test/poisson/dimension-grid-variations/poisson_2d_cg_quadrilateral.mini
new file mode 100644
index 0000000000000000000000000000000000000000..d0ede6942e2f529eab9ba799de1376621e1917a7
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_2d_cg_quadrilateral.mini
@@ -0,0 +1,8 @@
+__name = poisson_2d_cg_quadrilateral
+
+cells = 32 32
+extension = 1. 1.
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_2d_cg_quadrilateral.ufl b/test/poisson/dimension-grid-variations/poisson_2d_cg_quadrilateral.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..7d43c7eb3ee86e180ad51443d2d4bb370e79e4c2
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_2d_cg_quadrilateral.ufl
@@ -0,0 +1,10 @@
+cell_type = "quadrilateral"
+
+f = Expression("return -2.0*x.size();", cell_type=cell_type)
+g = Expression("return x.two_norm2();", cell_type=cell_type)
+
+V = FiniteElement("CG", cell_type, 1, dirichlet_expression=g)
+u = TrialFunction(V)
+v = TestFunction(V)
+
+forms = [(inner(grad(u), grad(v)) - f*v)*dx]
diff --git a/test/poisson/dimension-grid-variations/poisson_2d_cg_triangle.mini b/test/poisson/dimension-grid-variations/poisson_2d_cg_triangle.mini
new file mode 100644
index 0000000000000000000000000000000000000000..bf7adf0a3d966c4239e5d6861b3ea4187efa4f53
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_2d_cg_triangle.mini
@@ -0,0 +1,10 @@
+__name = poisson_2d_cg_triangle
+
+lowerleft = 0.0 0.0
+upperright = 1.0 1.0
+elements = 32 32
+elementType = simplical
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_2d_cg_triangle.ufl b/test/poisson/dimension-grid-variations/poisson_2d_cg_triangle.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..902a7f2a36f739b0088ded8b08d12f3d906832da
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_2d_cg_triangle.ufl
@@ -0,0 +1,8 @@
+f = Expression("return -2.0*x.size();")
+g = Expression("return x.two_norm2();")
+
+V = FiniteElement("CG", "triangle", 1, dirichlet_expression=g)
+u = TrialFunction(V)
+v = TestFunction(V)
+
+forms = [(inner(grad(u), grad(v)) - f*v)*dx]
\ No newline at end of file
diff --git a/test/poisson/dimension-grid-variations/poisson_2d_dg_quadrilateral.mini b/test/poisson/dimension-grid-variations/poisson_2d_dg_quadrilateral.mini
new file mode 100644
index 0000000000000000000000000000000000000000..4bea68343fc24ebeee0b4188d6b17004f086c47d
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_2d_dg_quadrilateral.mini
@@ -0,0 +1,8 @@
+__name = poisson_2d_dg_quadrilateral
+
+cells = 32 32
+extension = 1. 1.
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_2d_dg_quadrilateral.ufl b/test/poisson/dimension-grid-variations/poisson_2d_dg_quadrilateral.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..24dbccae56b8b93ae305b561e1ac5025d3a53bd7
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_2d_dg_quadrilateral.ufl
@@ -0,0 +1,27 @@
+cell_type = "quadrilateral"
+
+f = Expression("return -2.0*x.size();", cell_type=cell_type)
+g = Expression("return x.two_norm2();", on_intersection=True, cell_type=cell_type)
+
+V = FiniteElement("DG", cell_type, 1)
+
+u = TrialFunction(V)
+v = TestFunction(V)
+
+n = FacetNormal(cell_type)('+')
+
+gamma = 1.0
+theta = 1.0
+
+r = inner(grad(u), grad(v))*dx \
+  + inner(n, avg(grad(u)))*jump(v)*dS \
+  + gamma*jump(u)*jump(v)*dS \
+  + theta*jump(u)*inner(avg(grad(v)), n)*dS \
+  - inner(n, grad(u))*v*ds \
+  + gamma*u*v*ds \
+  - theta*u*inner(grad(v), n)*ds \
+  - f*v*dx \
+  + theta*g*inner(grad(v), n)*ds \
+  - gamma*g*v*ds
+
+forms = [r]
diff --git a/test/poisson/dimension-grid-variations/poisson_2d_dg_triangle.mini b/test/poisson/dimension-grid-variations/poisson_2d_dg_triangle.mini
new file mode 100644
index 0000000000000000000000000000000000000000..dedd6a3ffac42315ea150ad28849c50008fbe1ec
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_2d_dg_triangle.mini
@@ -0,0 +1,10 @@
+__name = poisson_2d_dg_triangle
+
+lowerleft = 0.0 0.0
+upperright = 1.0 1.0
+elements = 32 32
+elementType = simplical
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_2d_dg_triangle.ufl b/test/poisson/dimension-grid-variations/poisson_2d_dg_triangle.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..bf606f9cdb7b3726b457688db4921c4aacfa99ab
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_2d_dg_triangle.ufl
@@ -0,0 +1,26 @@
+f = Expression("return -2.0*x.size();")
+g = Expression("return x.two_norm2();", on_intersection=True)
+
+cell = triangle
+V = FiniteElement("DG", cell, 1)
+
+u = TrialFunction(V)
+v = TestFunction(V)
+
+n = FacetNormal(cell)('+')
+
+gamma = 1.0
+theta = 1.0
+
+r = inner(grad(u), grad(v))*dx \
+  + inner(n, avg(grad(u)))*jump(v)*dS \
+  + gamma*jump(u)*jump(v)*dS \
+  + theta*jump(u)*inner(avg(grad(v)), n)*dS \
+  - inner(n, grad(u))*v*ds \
+  + gamma*u*v*ds \
+  - theta*u*inner(grad(v), n)*ds \
+  - f*v*dx \
+  + theta*g*inner(grad(v), n)*ds \
+  - gamma*g*v*ds
+
+forms = [r]
diff --git a/test/poisson/dimension-grid-variations/poisson_3d_cg_hexahedron.mini b/test/poisson/dimension-grid-variations/poisson_3d_cg_hexahedron.mini
new file mode 100644
index 0000000000000000000000000000000000000000..ee7893caae615184a6e8cca678f0e600f21bfdaa
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_3d_cg_hexahedron.mini
@@ -0,0 +1,8 @@
+__name = poisson_3d_cg_hexahedron
+
+cells = 8 8 8
+extension = 1. 1. 1.
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_3d_cg_hexahedron.ufl b/test/poisson/dimension-grid-variations/poisson_3d_cg_hexahedron.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..5c0091d74b1e9349fd6631b18b2ffdfbd42e990d
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_3d_cg_hexahedron.ufl
@@ -0,0 +1,10 @@
+cell_type = "hexahedron"
+
+f = Expression("return -2.0*x.size();", cell_type=cell_type)
+g = Expression("return x.two_norm2();", cell_type=cell_type)
+
+V = FiniteElement("CG", cell_type, 1, dirichlet_expression=g)
+u = TrialFunction(V)
+v = TestFunction(V)
+
+forms = [(inner(grad(u), grad(v)) - f*v)*dx]
\ No newline at end of file
diff --git a/test/poisson/dimension-grid-variations/poisson_3d_cg_tetrahedron.mini b/test/poisson/dimension-grid-variations/poisson_3d_cg_tetrahedron.mini
new file mode 100644
index 0000000000000000000000000000000000000000..6a788f16f67aba18d73c390b00cb5af8dbcb5ad3
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_3d_cg_tetrahedron.mini
@@ -0,0 +1,10 @@
+__name = poisson_3d_cg_tetrahedron
+
+lowerleft = 0.0 0.0 0.0
+upperright = 1.0 1.0 1.1
+elements = 8 8 8
+elementType = simplical
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_3d_cg_tetrahedron.ufl b/test/poisson/dimension-grid-variations/poisson_3d_cg_tetrahedron.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..1456671d43ce0de2d3bfbf8d1ca13fda9f8e0733
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_3d_cg_tetrahedron.ufl
@@ -0,0 +1,10 @@
+cell_type = "tetrahedron"
+
+f = Expression("return -2.0*x.size();", cell_type=cell_type)
+g = Expression("return x.two_norm2();", cell_type=cell_type)
+
+V = FiniteElement("CG", "tetrahedron", 1, dirichlet_expression=g)
+u = TrialFunction(V)
+v = TestFunction(V)
+
+forms = [(inner(grad(u), grad(v)) - f*v)*dx]
\ No newline at end of file
diff --git a/test/poisson/dimension-grid-variations/poisson_3d_dg_hexahedron.mini b/test/poisson/dimension-grid-variations/poisson_3d_dg_hexahedron.mini
new file mode 100644
index 0000000000000000000000000000000000000000..82c8faec2c8b8d23f15d09cbaa56abcf7eb385b5
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_3d_dg_hexahedron.mini
@@ -0,0 +1,8 @@
+__name = poisson_3d_dg_hexahedron
+
+cells = 8 8 8
+extension = 1. 1. 1.
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_3d_dg_hexahedron.ufl b/test/poisson/dimension-grid-variations/poisson_3d_dg_hexahedron.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..3a410e3011596ab6372028e1e705d26cd5747216
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_3d_dg_hexahedron.ufl
@@ -0,0 +1,27 @@
+cell_type = "hexahedron"
+
+f = Expression("return -2.0*x.size();", cell_type=cell_type)
+g = Expression("return x.two_norm2();", on_intersection=True, cell_type=cell_type)
+
+V = FiniteElement("DG", cell_type, 1)
+
+u = TrialFunction(V)
+v = TestFunction(V)
+
+n = FacetNormal(cell_type)('+')
+
+gamma = 1.0
+theta = 1.0
+
+r = inner(grad(u), grad(v))*dx \
+  + inner(n, avg(grad(u)))*jump(v)*dS \
+  + gamma*jump(u)*jump(v)*dS \
+  + theta*jump(u)*inner(avg(grad(v)), n)*dS \
+  - inner(n, grad(u))*v*ds \
+  + gamma*u*v*ds \
+  - theta*u*inner(grad(v), n)*ds \
+  - f*v*dx \
+  + theta*g*inner(grad(v), n)*ds \
+  - gamma*g*v*ds
+
+forms = [r]
diff --git a/test/poisson/dimension-grid-variations/poisson_3d_dg_tetrahedron.mini b/test/poisson/dimension-grid-variations/poisson_3d_dg_tetrahedron.mini
new file mode 100644
index 0000000000000000000000000000000000000000..16f1adaffaebb6ab4af342789a6c617ed73a9d8b
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_3d_dg_tetrahedron.mini
@@ -0,0 +1,10 @@
+__name = poisson_3d_dg_tetrahedron
+
+lowerleft = 0.0 0.0 0.0
+upperright = 1.0 1.0 1.1
+elements = 8 8 8
+elementType = simplical
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
diff --git a/test/poisson/dimension-grid-variations/poisson_3d_dg_tetrahedron.ufl b/test/poisson/dimension-grid-variations/poisson_3d_dg_tetrahedron.ufl
new file mode 100644
index 0000000000000000000000000000000000000000..a2d8135baa6d8f6556dcff607989af38a9ffa826
--- /dev/null
+++ b/test/poisson/dimension-grid-variations/poisson_3d_dg_tetrahedron.ufl
@@ -0,0 +1,27 @@
+cell_type = "tetrahedron"
+
+f = Expression("return -2.0*x.size();", cell_type=cell_type)
+g = Expression("return x.two_norm2();", on_intersection=True, cell_type=cell_type)
+
+V = FiniteElement("DG", cell_type, 1)
+
+u = TrialFunction(V)
+v = TestFunction(V)
+
+n = FacetNormal(cell_type)('+')
+
+gamma = 1.0
+theta = 1.0
+
+r = inner(grad(u), grad(v))*dx \
+  + inner(n, avg(grad(u)))*jump(v)*dS \
+  + gamma*jump(u)*jump(v)*dS \
+  + theta*jump(u)*inner(avg(grad(v)), n)*dS \
+  - inner(n, grad(u))*v*ds \
+  + gamma*u*v*ds \
+  - theta*u*inner(grad(v), n)*ds \
+  - f*v*dx \
+  + theta*g*inner(grad(v), n)*ds \
+  - gamma*g*v*ds
+
+forms = [r]