diff --git a/src/components/instant_gradients.jl b/src/components/instant_gradients.jl
index 08e9cc99451c2dc4e601f9b1bf8fd5db7f91e3ca..cc2801c6e5f77b4860bb9e06f1c5ca84f879111a 100644
--- a/src/components/instant_gradients.jl
+++ b/src/components/instant_gradients.jl
@@ -1,6 +1,6 @@
 module InstantGradients
 import StaticArrays: SVector, SMatrix
-import ...Variables: VariableType, duration, qvec, bmat_gradient, get_free_variable, set_simple_constraints!, qval, effective_time
+import ...Variables: VariableType, duration, qvec, bmat_gradient, get_free_variable, set_simple_constraints!, qval, effective_time, make_generic
 import ..AbstractTypes: EventComponent, GradientWaveform
 
 """
@@ -78,5 +78,6 @@ duration(::InstantGradient) = 0.
 effective_time(::InstantGradient) = 0.
 bmat_gradient(::InstantGradient, qstart=nothing) = zero(SMatrix{3, 3, Float64, 3})
 
+make_generic(ig::InstantGradient) = ig
 
 end
\ No newline at end of file
diff --git a/src/components/pulses/constant_pulses.jl b/src/components/pulses/constant_pulses.jl
index 7cb42e612d7ccabffdf5d0e583ff051cc4d00aa1..f240dac9098df5d9d39fa562fdc93c53f8bd06c3 100644
--- a/src/components/pulses/constant_pulses.jl
+++ b/src/components/pulses/constant_pulses.jl
@@ -2,7 +2,7 @@ module ConstantPulses
 import JuMP: @constraint
 import ...AbstractTypes: RFPulseComponent
 import ....BuildSequences: global_model
-import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, set_simple_constraints!, frequency
+import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, set_simple_constraints!, frequency, make_generic
 import ..GenericPulses: GenericPulse
 
 """
diff --git a/src/components/pulses/generic_pulses.jl b/src/components/pulses/generic_pulses.jl
index 08ac34d4c56ad39afa9c3435ea6b33cbaa08c1f7..a21af015a07b87d3f7dcc233c8730324702ab88d 100644
--- a/src/components/pulses/generic_pulses.jl
+++ b/src/components/pulses/generic_pulses.jl
@@ -1,7 +1,7 @@
 module GenericPulses
 
 import ...AbstractTypes: RFPulseComponent
-import ....Variables: duration, amplitude, effective_time, flip_angle
+import ....Variables: duration, amplitude, effective_time, flip_angle, make_generic
 
 
 """
diff --git a/src/components/pulses/instant_pulses.jl b/src/components/pulses/instant_pulses.jl
index 826c6db9ac186695eaaf2dcf3ad11083594616a4..d473299e8764eb1f70c6008c30fd8ea114ceaa74 100644
--- a/src/components/pulses/instant_pulses.jl
+++ b/src/components/pulses/instant_pulses.jl
@@ -2,7 +2,7 @@ module InstantPulses
 import JuMP: @constraint
 import ...AbstractTypes: RFPulseComponent
 import ....BuildSequences: global_model
-import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType
+import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, make_generic
 
 """
     InstantPulse(; flip_angle=nothing, phase=nothing, group=nothing)
diff --git a/src/components/pulses/sinc_pulses.jl b/src/components/pulses/sinc_pulses.jl
index 3511399e84ebc0750d412b6f9033ee363c52a21a..8e19aa333bd44f053dcc603feea44e9156835d99 100644
--- a/src/components/pulses/sinc_pulses.jl
+++ b/src/components/pulses/sinc_pulses.jl
@@ -2,7 +2,7 @@ module SincPulses
 import JuMP: @constraint
 import QuadGK: quadgk
 import ....BuildSequences: global_model
-import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, set_simple_constraints!, frequency
+import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, set_simple_constraints!, frequency, make_generic
 import ...AbstractTypes: RFPulseComponent
 import ..GenericPulses: GenericPulse
 
diff --git a/src/components/readouts/ADCs.jl b/src/components/readouts/ADCs.jl
index a5924065f80c86504d06c4f0bf384446f006c15d..20db48798dfc385df77330a550a7a11f1d81b89e 100644
--- a/src/components/readouts/ADCs.jl
+++ b/src/components/readouts/ADCs.jl
@@ -1,6 +1,6 @@
 module ADCs
 import JuMP: @constraint, value
-import ...Variables: variables, dwell_time, duration, effective_time, get_free_variable, VariableType, nsamples, resolution, oversample
+import ...Variables: variables, dwell_time, duration, effective_time, get_free_variable, VariableType, nsamples, resolution, oversample, make_generic
 import ...BuildingBlocks: BuildingBlock, apply_simple_constraint!, set_simple_constraints!, fixed, make_generic
 import ...BuildSequences: global_model
 
diff --git a/src/components/readouts/single_readouts.jl b/src/components/readouts/single_readouts.jl
index 1ec879f0568e700e46415d6a53c6a0106e17aec6..ee97eed7a3ba2e8f90adc38343c0d484c7478835 100644
--- a/src/components/readouts/single_readouts.jl
+++ b/src/components/readouts/single_readouts.jl
@@ -1,6 +1,6 @@
 module InstantReadouts
 import ...AbstractTypes: ReadoutComponent
-import ...Variables: variables, duration, effective_time
+import ...Variables: variables, duration, effective_time, make_generic
 import ..ADCs: ADC
 
 """
diff --git a/src/variables.jl b/src/variables.jl
index ac091cbb7f8e86ca4043b0276000b2398fd0f39f..1101fd02bbea9f70a887db5854dd368937f31ff2 100644
--- a/src/variables.jl
+++ b/src/variables.jl
@@ -252,4 +252,17 @@ apply_simple_constraint!(variable, value::VariableType) = @constraint global_mod
 apply_simple_constraint!(variable::AbstractVector, value::AbstractVector) = [apply_simple_constraint!(v1, v2) for (v1, v2) in zip(variable, value)]
 apply_simple_constraint!(variable::Number, value::Number) = @assert variable ≈ value "Variable set to multiple incompatible values."
 
+
+"""
+    make_generic(sequence/building_block/component)
+
+Returns a generic version of the `BaseSequence`, `BaseBuildingBlock`, or `BaseComponent`
+
+- Sequences are all flattened and returned as a single `Sequence` containing only `BuildingBlock` objects.
+- Any `BaseBuildingBlock` is converted into a `BuildingBlock`.
+- Pulses are replaced with `GenericPulse` (except for instant pulses).
+- Instant readouts are replaced with `ADC`.
+"""
+function make_generic end
+
 end
\ No newline at end of file