diff --git a/src/base/solver.jl b/src/base/solver.jl
index 56d67f7b353a811ec4490781de7ca356c0856611..3cb5c5bd4487c2d35a007c9b9f59a9bd7bd780ba 100644
--- a/src/base/solver.jl
+++ b/src/base/solver.jl
@@ -20,23 +20,10 @@ function make_optimization_model(model::MetabolicModel, optimizer; sense = MOI.M
     @constraint(optimization_model, lbs, xl .<= x) # lower bounds
     @constraint(optimization_model, ubs, x .<= xu) # upper bounds
 
-    return optimization_model
-end
-
-function make_optimization_model(model::CoreModelCoupled, optimizer; sense = MOI.MAX_SENSE)
-    # coupled models have specific structure
-    m, n = size(stoichiometry(model))
-    xl, xu = bounds(model)
+    C = coupling(model) # empty if no coupling
     cl, cu = coupling_bounds(model)
-
-    optimization_model = COBREXA.JuMP.Model(optimizer)
-    @variable(optimization_model, x[i = 1:n])
-    @objective(optimization_model, sense, objective(model)' * x)
-    @constraint(optimization_model, mb, stoichiometry(model) * x .== balance(model)) # mass balance
-    @constraint(optimization_model, lbs, xl .<= x) # lower bounds
-    @constraint(optimization_model, ubs, x .<= xu) # upper bounds
-    @constraint(optimization_model, c_lbs, cl .<= coupling(model) * x) # coupling lower bounds
-    @constraint(optimization_model, c_ubs, coupling(model) * x .<= cu) # coupling upper bounds
+    isempty(C) || @constraint(optimization_model, c_lbs, cl.<= coupling(model)*x) # coupling lower bounds
+    isempty(C) || @constraint(optimization_model, c_ubs, coupling(model)*x .<= cu) # coupling upper bounds
 
     return optimization_model
 end