diff --git a/docs/src/manual/overview.md b/docs/src/manual/overview.md
index 809ed1fe0567465d55c3e7effa24eb046f5717dd..02a51354026a33c44dfb647b0a71442b70f814a7 100644
--- a/docs/src/manual/overview.md
+++ b/docs/src/manual/overview.md
@@ -84,4 +84,4 @@ end
 
     Prognostic state variables like `H` in the example above **should not be directly modified** in user code. This is especially important when using higher order or implicit integrators as unexpected changes to the underlying state may destroy the accuracy of their internal interpolators. For modleing discontinuities, use [`Callbacks`](@ref) instead.
 
-Note that `state` is of type [`LayerState`](@ref) with fields corresponding to the variables declared by the `variables` function for `Soil` and `Heat`. Additionally, output arrays for the time derivatives are provided (here `dH`), as well as the current timestep, layer boundary depths, and variable grids (accessible via `state.t`, `state.z`, and `state.grids` respectively). Note that `state` will also contain other variables declared on this `Soil` layer by other `SubSurfaceProcess`es, allowing for implicit coupling between processes where appropriate.
+Note that `state` is of type [`LayerState`](@ref) with fields corresponding to the variables declared by the `variables` function for `Soil` and `Heat`. Additionally, output arrays for the time derivatives are provided (here `dH`), as well as the current timestep, layer boundary depths, and variable grids (accessible via `state.t`, `state.bounds`, and `state.grids` respectively). Note that `state` will also contain other variables declared on this `Soil` layer by other `SubSurfaceProcess`es, allowing for implicit coupling between processes where appropriate.
diff --git a/src/Strat/state.jl b/src/Strat/state.jl
index 81af7154fe393d8fa14646b8b7e6ffafa2e88638..d93c2b76ba1e8ee86028dfd0b74ec51f5f5f2f89 100644
--- a/src/Strat/state.jl
+++ b/src/Strat/state.jl
@@ -11,10 +11,10 @@ Represents the state of a single component (layer + processes) in the stratigrap
 struct LayerState{iip,TStates,TGrids,Tt,Tz,varnames}
     grids::NamedTuple{varnames,TGrids}
     states::NamedTuple{varnames,TStates}
+    bounds::NTuple{2,Tz}
     t::Tt
-    z::NTuple{2,Tz}
-    LayerState(grids::NamedTuple{varnames,TG}, states::NamedTuple{varnames,TS}, t::Tt, z::NTuple{2,Tz}, ::Val{iip}=Val{inplace}()) where
-        {TG,TS,Tt,Tz,varnames,iip} = new{iip,TS,TG,Tt,Tz,varnames}(grids, states, t, z)
+    LayerState(grids::NamedTuple{varnames,TG}, states::NamedTuple{varnames,TS}, t::Tt, bounds::NTuple{2,Tz}, ::Val{iip}=Val{inplace}()) where
+        {TG,TS,Tt,Tz,varnames,iip} = new{iip,TS,TG,Tt,Tz,varnames}(grids, states, bounds, t)
 end
 Base.getindex(state::LayerState, sym::Symbol) = getproperty(state, sym)
 function Base.getproperty(state::LayerState, sym::Symbol)
@@ -60,7 +60,7 @@ end
 @inline @generated function TileState(vs::VarStates{names}, zs::NTuple, u=copy(vs.uproto), du=similar(vs.uproto), t=0.0, ::Val{iip}=Val{inplace}()) where {names,iip}
     layerstates = (:(LayerState(vs, (ustrip(bounds[$i][1]), ustrip(bounds[$i][2])), u, du, t, Val{$(QuoteNode(names[i]))}(), Val{iip}())) for i in 1:length(names))
     quote
-        bounds = boundaryintervals(zs, vs.grid[end])
+        bounds = boundarypairs(zs, vs.grid[end])
         return TileState(
             vs.grid,
             NamedTuple{tuple($(map(QuoteNode,names)...))}(tuple($(layerstates...))),