diff --git a/src/function.jl b/src/function.jl
index 17cb43be649fa848dae11687b324d4fdb52e7e46..22f25a83618a6f1c0d4b8b375eeb49e45154b5ab 100644
--- a/src/function.jl
+++ b/src/function.jl
@@ -214,9 +214,10 @@ function integrate(mesh::Mesh, expr; params...)
 end
 
 function bind!(f::FeFunction, cell)
-    gdofs_view = view(f.space.dofmap, :, :, cell)
-    gdofs = SArray{Tuple{prod(f.space.size) * ndofs(f.space.element)}}(gdofs_view)
-    f.ldata .= f.data[gdofs]
+    @boundscheck cell in axes(f.space.dofmap, 3)
+    gdofs = SArray{Tuple{prod(f.space.size) * ndofs(f.space.element)}}(
+        @inbounds view(f.space.dofmap, :, :, cell))
+    f.ldata .= @inbounds f.data[gdofs]
     return f
 end
 
diff --git a/src/mesh.jl b/src/mesh.jl
index 6b0ef3a847514d8b5059d0ad39c381ba5d8e0922..e3331bd15787cb8f34d36d5f4ff686f7cb1dc4b3 100644
--- a/src/mesh.jl
+++ b/src/mesh.jl
@@ -378,7 +378,7 @@ function area(mesh, cell)
     return det(A[:, 2:3] .- A[:, 1]) / 2
 end
 
-area(mesh) = mapreduce(cell -> area(mesh, cell), +, cells(mesh))
+area(mesh) = mapfoldl(cell -> area(mesh, cell), +, cells(mesh))
 
 function diam(mesh, cell)
     A = SArray{Tuple{ndims_space(mesh), nvertices_cell(mesh)}}(
@@ -392,9 +392,10 @@ end
 mesh_size(mesh) = mapreduce(cell -> diam(mesh, cell), max, cells(mesh))
 
 function elmap(mesh, cell)
-    # TODO: can be improved
+    @boundscheck cell in axes(mesh.cells, 2)
+    # TODO: can be improved, how?
     A = SArray{Tuple{ndims_space(mesh), nvertices_cell(mesh)}}(
-	view(mesh.vertices, :, view(mesh.cells, :, cell)))
+	@inbounds view(mesh.vertices, :, view(mesh.cells, :, cell)))
     return x -> A * SA[1 - x[1] - x[2], x[1], x[2]]
 end