diff --git a/src/sequences/diffusion_spin_echoes.jl b/src/sequences/diffusion_spin_echoes.jl
index b996f2da1632cdd285fa1f68894faa226d744af6..12fc99cef64f22407030b11d24bb09ab80491bfe 100644
--- a/src/sequences/diffusion_spin_echoes.jl
+++ b/src/sequences/diffusion_spin_echoes.jl
@@ -1,8 +1,9 @@
 module DiffusionSpinEchoes
 import ...Containers: Sequence
+import ...Components: InstantGradient
 import ...Parts: excitation_pulse, readout_event, interpret_image_size, Trapezoid, gradient_spoiler, refocus_pulse, dwi_gradients
 import ...Containers: start_time, end_time
-import ...Variables: get_pulse, get_readout, get_gradient, variables, @defvar
+import ...Variables: get_pulse, get_readout, get_gradient, variables, @defvar, add_cost_function!
 import ...Pathways: Pathway, get_pathway
 import ...BuildSequences: build_sequence
 import ...Scanners: Default_Scanner, Scanner
@@ -36,7 +37,7 @@ If image parameters are provided, this will switch to a sinc pulse and EPI reado
 - [`variables.duration`](@ref): total duration of the sequence from start of excitation pulse to end of readout or spoiler in ms.
 - [`variables.Δ`](@ref)/[`variables.diffusion_time`](@ref): Time from the start of one diffusion-weighted gradient till the other in ms.
 """
-function DiffusionSpinEcho(; delay=0., excitation=(), gradient=(), refocus=(), readout=(), optim=(), spoiler=nothing, resolution=nothing, fov=nothing, voxel_size=nothing, slice_thickness=nothing, scanner=Default_Scanner, variables...)
+function DiffusionSpinEcho(; delay=0., excitation=(), gradient=(), refocus=(), readout=(), optim=(), spoiler=nothing, resolution=nothing, fov=nothing, voxel_size=nothing, slice_thickness=nothing, scanner=Default_Scanner, vars...)
     build_sequence(scanner; optim...) do
         (slice_thickness, _, extra_readout_params) = interpret_image_size(fov, resolution, voxel_size, slice_thickness)
         (g1, g2) = dwi_gradients(; gradient...)
@@ -50,11 +51,20 @@ function DiffusionSpinEcho(; delay=0., excitation=(), gradient=(), refocus=(), r
             :gradient2 => g2,
             nothing,
             :readout => readout_event(; extra_readout_params..., readout...),
+            nothing,
         ]
         if !isnothing(spoiler)
             push!(parts, gradient_spoiler(; spoiler...))
         end
-        return Sequence(parts; name=:DiffusionSpinEcho, delay=delay, variables...)
+        seq = Sequence(parts; name=:DiffusionSpinEcho, delay=delay, vars...)
+        
+        if g1 isa InstantGradient
+            add_cost_function!((variables.duration(seq[2]) - variables.duration(seq[4]))^2)
+            add_cost_function!((variables.duration(seq[6]) - variables.duration(seq[8]))^2)
+        else
+            add_cost_function!(variables.duration(seq[6]) + variables.duration(seq[7]))
+        end
+        return seq
     end
 end