diff --git a/test/stokes/stokes_dg.mini b/test/stokes/stokes_dg.mini
index eb27110153f4066fa3d790e8584a776c41ddb93d..9d65b4a9cf752c2f23d0f6700df1f2b34d393fa5 100644
--- a/test/stokes/stokes_dg.mini
+++ b/test/stokes/stokes_dg.mini
@@ -16,5 +16,4 @@ zeroThreshold.data_1 = 1e-6
 
 [formcompiler]
 numerical_jacobian = 0, 1 | expand num
-exact_solution_expression = g
 compare_l2errorsquared = 1e-8
diff --git a/test/stokes/stokes_dg.ufl b/test/stokes/stokes_dg.ufl
index f1995c8b2f928d34a1965b62f3fee391dec4caa3..74b857426979820ac72001a8c69c612a9f016f8e 100644
--- a/test/stokes/stokes_dg.ufl
+++ b/test/stokes/stokes_dg.ufl
@@ -2,8 +2,6 @@ cell = triangle
 
 x = SpatialCoordinate(cell)
 g_v = as_vector((4*x[1]*(1.-x[1]), 0.0))
-g_p = 8*(1.-x[0])
-g = (g_v, g_p)
 bctype = conditional(x[0] < 1. - 1e-8, 1, 0)
 
 P2 = VectorElement("DG", cell, 2)
@@ -35,3 +33,4 @@ r = inner(grad(u), grad(v))*dx \
   - q*inner(g_v, n)*ds
 
 forms = [r]
+exact_solution = g_v, 8*(1.-x[0])
\ No newline at end of file
diff --git a/test/stokes/stokes_dg_quadrilateral.mini b/test/stokes/stokes_dg_quadrilateral.mini
index e8b76346031f7993fb5e95681c1949b29979b574..7f25099677036a8bfe1f715984ee500d9dc4d015 100644
--- a/test/stokes/stokes_dg_quadrilateral.mini
+++ b/test/stokes/stokes_dg_quadrilateral.mini
@@ -11,5 +11,4 @@ extension = vtu
 
 [formcompiler]
 numerical_jacobian = 0, 1 | expand num
-exact_solution_expression = g
 compare_l2errorsquared = 1e-8
diff --git a/test/stokes/stokes_dg_quadrilateral.ufl b/test/stokes/stokes_dg_quadrilateral.ufl
index 0995ec6ece110d49fc6ca99d0c05ab79e8143229..1beb3356fcd35d9e5ca094745ec34aa55f89621c 100644
--- a/test/stokes/stokes_dg_quadrilateral.ufl
+++ b/test/stokes/stokes_dg_quadrilateral.ufl
@@ -2,8 +2,6 @@ cell = quadrilateral
 
 x = SpatialCoordinate(cell)
 g_v = as_vector((4*x[1]*(1.-x[1]), 0.0))
-g_p = 8*(1.-x[0])
-g = (g_v, g_p)
 bctype = conditional(x[0] < 1. - 1e-8, 1, 0)
 
 P2 = VectorElement("DG", cell, 2)
@@ -35,3 +33,4 @@ r = inner(grad(u), grad(v))*dx \
   - q*inner(g_v, n)*ds
 
 forms = [r]
+exact_solution = g_v, 8*(1.-x[0])
diff --git a/test/stokes/stokes_quadrilateral.mini b/test/stokes/stokes_quadrilateral.mini
index 36ce9d61bebd2de68b2aa075c0f12b20e59f8874..e9440771716292bda9664a26b2c8911e00a65a34 100644
--- a/test/stokes/stokes_quadrilateral.mini
+++ b/test/stokes/stokes_quadrilateral.mini
@@ -12,5 +12,4 @@ extension = vtu
 
 [formcompiler]
 numerical_jacobian = 1, 0 | expand num
-exact_solution_expression = g
 compare_l2errorsquared = 1e-10
diff --git a/test/stokes/stokes_quadrilateral.ufl b/test/stokes/stokes_quadrilateral.ufl
index 0d7c58aa180a9d4586184d1eda6c53353bbbb67a..c8f630b84aae43a68221ace670fe9fcb027af47d 100644
--- a/test/stokes/stokes_quadrilateral.ufl
+++ b/test/stokes/stokes_quadrilateral.ufl
@@ -3,10 +3,8 @@ cell = quadrilateral
 x = SpatialCoordinate(cell)
 v_bctype = conditional(x[0] < 1. - 1e-8, 1, 0)
 g_v = as_vector((4.*x[1]*(1.-x[1]), 0.0))
-g_p = 8.*(1.-x[0])
-g = (g_v, g_p)
 
-P2 = VectorElement("Lagrange", cell, 2, dirichlet_constraints=v_bctype, dirichlet_expression=g_v)
+P2 = VectorElement("Lagrange", cell, 2)
 P1 = FiniteElement("Lagrange", cell, 1)
 TH = P2 * P1
 
@@ -16,3 +14,6 @@ u, p = TrialFunctions(TH)
 r = (inner(grad(v), grad(u)) - div(v)*p - q*div(u))*dx
 
 forms = [r]
+is_dirichlet = v_bctype, v_bctype, 0
+dirichlet_expression = g_v, None
+exact_solution = g_v, 8.*(1.-x[0])
diff --git a/test/stokes/stokes_stress.mini b/test/stokes/stokes_stress.mini
index a724a0a0656bc8fd9b711ac97ba2654588a6321f..af72867f443e85aa8b824f66a0c155b9b9f4e9a6 100644
--- a/test/stokes/stokes_stress.mini
+++ b/test/stokes/stokes_stress.mini
@@ -17,5 +17,4 @@ extension = vtu
 [formcompiler]
 # numerical_jacobian = 0, 1 | expand num
 numerical_jacobian = 1
-exact_solution_expression = g
 compare_l2errorsquared = 1e-11
diff --git a/test/stokes/stokes_stress.ufl b/test/stokes/stokes_stress.ufl
index d5c41e301ce7919fbd94fb86f9c6cab250ae9083..2efd1420b25d1f1c1837ce2fb590707a7e2dc3f4 100644
--- a/test/stokes/stokes_stress.ufl
+++ b/test/stokes/stokes_stress.ufl
@@ -2,10 +2,9 @@ v_bctype = Expression("if (x[0] < 1. - 1e-8) return 1; else return 0;", on_inter
 g_v = Expression(("4*x[1]*(1.-x[1])", "0.0"))
 g_p = Expression("8*(1.-x[0])")
 g_S = Expression(("0.0", "0.0", "-8*x[1] + 4.", "0.0"))
-g = g_v * g_p * g_S
 
 cell = triangle
-P2 = VectorElement("Lagrange", cell, 2, dirichlet_constraints=v_bctype, dirichlet_expression=g_v)
+P2 = VectorElement("Lagrange", cell)
 P1 = FiniteElement("Lagrange", cell, 1)
 P2_stress = TensorElement("DG", cell, 1)
 
@@ -17,3 +16,6 @@ u, p, S  = TrialFunctions(TH)
 r = (inner(grad(v), S) + inner(grad(u) - S, T) - div(v)*p - q*div(u))*dx
 
 forms = [r]
+is_dirichlet = v_bctype, v_bctype, 0, 0, 0, 0, 0
+dirichlet_expression = g_v, None, None, None, None, None, None
+exact_solution = g_v, g_p, g_S
\ No newline at end of file
diff --git a/test/stokes/stokes_stress_sym.mini b/test/stokes/stokes_stress_sym.mini
index 328f5e8985fbd2a22f911cc01125753464af8cb4..1aa3d6f087cae99310dd2c7b3a50721f3fd447f6 100644
--- a/test/stokes/stokes_stress_sym.mini
+++ b/test/stokes/stokes_stress_sym.mini
@@ -14,5 +14,4 @@ extension = vtu
 
 [formcompiler]
 numerical_jacobian = 1
-exact_solution_expression = g
 compare_l2errorsquared = 1e-6
diff --git a/test/stokes/stokes_stress_sym.ufl b/test/stokes/stokes_stress_sym.ufl
index 47e41380efddbaca3fc089dbfa9844ab1e44b695..cff1dee52ffa81881619e7b9580ad76c18538990 100644
--- a/test/stokes/stokes_stress_sym.ufl
+++ b/test/stokes/stokes_stress_sym.ufl
@@ -2,10 +2,9 @@ v_bctype = Expression("if (x[0] < 1. - 1e-8) return 1; else return 0;", on_inter
 g_v = Expression(("4*x[1]*(1.-x[1])", "0.0"))
 g_p = Expression("8*(1.-x[0])")
 g_S = Expression(("0.0", "-8*x[1] + 4.", "0.0"))
-g = g_v * g_p * g_S
 
 cell = triangle
-P2 = VectorElement("Lagrange", cell, 2, dirichlet_constraints=v_bctype, dirichlet_expression=g_v)
+P2 = VectorElement("Lagrange", cell, 2)
 P1 = FiniteElement("Lagrange", cell, 1)
 P2_stress = TensorElement("DG", cell, 1, symmetry={(0, 1): (1, 0)})
 
@@ -23,3 +22,6 @@ r = (inner(grad(v), S) + inner(2*sym(grad(u)) - S, T) - div(v)*p - q*div(u))*dx
 #  + inner(S.T*n, v)*ds
 
 forms = [r]
+is_dirichlet = v_bctype, v_bctype, 0, 0, 0, 0
+dirichlet_expression = g_v, None, None, None, None, None
+exact_solution = g_v, g_p, g_S
\ No newline at end of file
diff --git a/test/stokes/stokes_sym.mini b/test/stokes/stokes_sym.mini
index 75c34604490bd5fa4d7dceb932bd98327f0e9f74..74bcae0dee180977d0dc59b05e0618021114150a 100644
--- a/test/stokes/stokes_sym.mini
+++ b/test/stokes/stokes_sym.mini
@@ -14,7 +14,4 @@ extension = vtu
 
 [formcompiler]
 numerical_jacobian = 0, 1 | expand num
-exact_solution_expression = g
 compare_l2errorsquared = 1e-11
-print_transformations = True
-print_transformations_dir = .
diff --git a/test/stokes/stokes_sym.ufl b/test/stokes/stokes_sym.ufl
index 6c2b5e5437b46844c2e8a00e1731fc566b129bb1..0fe8fea45591acd9709d110d43ffb99dfdb20bf7 100644
--- a/test/stokes/stokes_sym.ufl
+++ b/test/stokes/stokes_sym.ufl
@@ -1,11 +1,8 @@
 v_bctype = Expression("if (x[0] < 1. - 1e-8) return 1; else return 0;", on_intersection=True)
 g_v = Expression(("4*x[1]*(1.-x[1])", "0.0"))
-g_p = Expression("8*(1.-x[0])")
-
-g = g_v * g_p
 
 cell = triangle
-P2 = VectorElement("Lagrange", cell, 2, dirichlet_constraints=v_bctype, dirichlet_expression=g_v)
+P2 = VectorElement("Lagrange", cell, 2)
 P1 = FiniteElement("Lagrange", cell, 1)
 TH = P2 * P1
 
@@ -18,3 +15,6 @@ n = FacetNormal(triangle)('+')
 r = (inner(2*sym(grad(u)), grad(v)) - div(v)*p - q*div(u))*dx - inner(grad(u).T*n,v)*ds
 
 forms = [r]
+is_dirichlet = v_bctype, v_bctype, 0
+dirichlet_expression = g_v, None
+exact_solution = g_v, 8.*(1.-x[0])