diff --git a/src/building_blocks.jl b/src/building_blocks.jl
index 715092b4a7aaa25bd097087d410daa5438cd9e06..cb23eb78781c7fbf3b6a507ac2fef93780f5e2b1 100644
--- a/src/building_blocks.jl
+++ b/src/building_blocks.jl
@@ -1,5 +1,5 @@
 module BuildingBlocks
-import JuMP: has_values, GenericVariableRef, value, Model, @constraint, @objective, owner_model, objective_function
+import JuMP: has_values, GenericVariableRef, value, Model, @constraint, @objective, owner_model, objective_function, optimize!, AbstractJuMPScalar
 import Printf: @sprintf
 import ..Scanners: Scanner
 import ..Variables: variables, start_time, duration, end_time, gradient_strength, slew_rate
@@ -138,4 +138,20 @@ function match_blocks!(block1::BuildingBlock, block2::BuildingBlock)
     match_blocks!(block1, block2, property_list)
 end
 
+
+optimize!(bb::BuildingBlock) = optimize!(owner_model(bb))
+function owner_model(bb::BuildingBlock)
+    if hasproperty(bb, :model)
+        return bb.model
+    else
+        for name in propertynames(bb)
+            value = getproperty(bb, name)
+            if value isa AbstractJuMPScalar
+                return owner_model(value)
+            end
+        end
+    end
+    error("Cannot find owner model of $bb")
+end
+
 end
\ No newline at end of file