diff --git a/src/MRIBuilder.jl b/src/MRIBuilder.jl
index 5c63fd16c97a44f7f64fdc1b6746bffba5997067..4d4bb01a644d85cb5dab1c439d97f2e7049f5093 100644
--- a/src/MRIBuilder.jl
+++ b/src/MRIBuilder.jl
@@ -18,8 +18,8 @@ export build_sequence, global_model, global_scanner
 import .Scanners: Scanner, B0, Siemens_Connectom, Siemens_Prisma, Siemens_Terra
 export Scanner, B0, Siemens_Connectom, Siemens_Prisma, Siemens_Terra
 
-import .Variables: variables, duration, effective_time, flip_angle, amplitude, phase, frequency, bandwidth, N_left, N_right, qval, δ, rise_time, flat_time, slew_rate, gradient_strength, qvec, qval_square, slice_thickness, inverse_slice_thickness, fov, inverse_fov, voxel_size, inverse_voxel_size, resolution, nsamples, oversample, dwell_time, ramp_overlap, spoiler_scale, TR, Δ
-export variables, duration, effective_time, flip_angle, amplitude, phase, frequency, bandwidth, N_left, N_right, qval, δ, rise_time, flat_time, slew_rate, gradient_strength, qvec, qval_square, slice_thickness, inversne_slice_thickness, fov, inverse_fov, voxel_size, inverse_voxel_size, resolution, nsamples, oversample, dwell_time, ramp_overlap, spoiler_scale, TR, Δ
+import .Variables: variables, duration, effective_time, flip_angle, amplitude, phase, frequency, bandwidth, N_left, N_right, qval, δ, rise_time, flat_time, slew_rate, gradient_strength, qvec, qval_square, slice_thickness, inverse_slice_thickness, fov, inverse_fov, voxel_size, inverse_voxel_size, resolution, nsamples, oversample, dwell_time, ramp_overlap, spoiler_scale, TR, Δ, get_gradient, get_pulse, get_readout
+export variables, duration, effective_time, flip_angle, amplitude, phase, frequency, bandwidth, N_left, N_right, qval, δ, rise_time, flat_time, slew_rate, gradient_strength, qvec, qval_square, slice_thickness, inversne_slice_thickness, fov, inverse_fov, voxel_size, inverse_voxel_size, resolution, nsamples, oversample, dwell_time, ramp_overlap, spoiler_scale, TR, Δ, get_gradient, get_pulse, get_readout
 
 import .Components: InstantPulse, ConstantPulse, SincPulse, GenericPulse, InstantGradient, SingleReadout, ADC
 export InstantPulse, ConstantPulse, SincPulse, GenericPulse, InstantGradient, SingleReadout, ADC
diff --git a/src/variables.jl b/src/variables.jl
index 7008fc726f75bdc524929aec7f71506abe5ff068..061e76816abd8525c0d9105b4bc98ea8c56e7582 100644
--- a/src/variables.jl
+++ b/src/variables.jl
@@ -249,7 +249,15 @@ for (target_name, all_vars) in all_variables_symbols
                 throw(VariableNotAvailable(typeof(bb), Variables.$variable_func))
             catch e
                 if $use_get_func && e isa VariableNotAvailable && hasmethod($get_func, tuple(typeof(bb)))
-                    return Variables.$variable_func($get_func(bb))
+                    apply_to = $(get_func)(bb)
+                    if apply_to isa AbstractBlock
+                        return Variables.$variable_func(apply_to)
+                    elseif apply_to isa NamedTuple
+                        return NamedTuple(k => Variables.$variable_func(v) for (k, v) in pairs(apply_to))
+                    elseif apply_to isa AbstractVector{<:AbstractBlock} || apply_to isa Tuple
+                        return Variables.$variable_func.(apply_to)
+                    end
+                    error("$($(use_get_func)) returned an unexpected type for $(bb).")
                 end
                 rethrow()
             end