diff --git a/src/build_sequences.jl b/src/build_sequences.jl
index b53faeb1dc1c5a99f9d71f8e6fa300594a83dc1f..c9a715a7a2daff57d504b2df2b7882e89582c54b 100644
--- a/src/build_sequences.jl
+++ b/src/build_sequences.jl
@@ -1,5 +1,5 @@
 module BuildSequences
-import JuMP: Model, optimizer_with_attributes, optimize!, AbstractJuMPScalar, value, solution_summary, termination_status, LOCALLY_SOLVED, OPTIMAL, num_variables, all_variables, set_start_value, ALMOST_LOCALLY_SOLVED, objective_value, INVALID_MODEL, @variable, @objective, @constraint, raw_status
+using JuMP
 import Ipopt
 import Juniper
 import ..Scanners: Scanner, gradient_strength, Default_Scanner
@@ -95,6 +95,10 @@ function build_sequence(f::Function, scanner::Union{Nothing, Scanner}, model::Tu
     end
 end
 
+function number_equality_constraints(model::Model)
+    sum([num_constraints(model, expr, comp) for (expr, comp) in JuMP.list_of_constraint_types(model) if comp <: MOI.EqualTo])
+end
+
 function optimise_with_cost_func(jump_model::Model, cost_func, n_attempts)
     @objective jump_model Min cost_func
     min_objective = Inf
@@ -107,11 +111,10 @@ function optimise_with_cost_func(jump_model::Model, cost_func, n_attempts)
                 set_start_value(var, v)
             end
         end
-        optimize!(jump_model)
-        while termination_status(jump_model) == INVALID_MODEL
+        for _ in num_variables(jump_model):number_equality_constraints(jump_model)
             @variable(jump_model)
-            optimize!(jump_model)
         end
+        optimize!(jump_model)
         if termination_status(jump_model) in (LOCALLY_SOLVED, OPTIMAL)
             if objective_value(jump_model) < min_objective
                 min_objective = objective_value(jump_model)