diff --git a/src/COBREXA.jl b/src/COBREXA.jl
index 79d6ed4dece7aa35948e2d2acab56862b7bd6c7a..bed066962c04c93d5c5d06dedef8207045876db0 100644
--- a/src/COBREXA.jl
+++ b/src/COBREXA.jl
@@ -8,12 +8,12 @@ using JuMP
 using MAT
 using Distributed
 using DistributedData
+using Downloads
 using Requires
 using JSON
 using Measurements
 using Statistics
 using Random
-using PyCall
 using Tulip # for LPs
 using OSQP # for QPs, but it kinda sucks
 
diff --git a/src/analysis/fva.jl b/src/analysis/fva.jl
index 9c33be1afca0ca439e1ddb5fce69029125d63ff6..0b38dc87179e3d82db28c96b2f5abcd4db8a0f6c 100644
--- a/src/analysis/fva.jl
+++ b/src/analysis/fva.jl
@@ -38,7 +38,7 @@ function flux_variability_analysis(
     end
 
     (optimization_model, x0) = flux_balance_analysis(model, optimizer)
-    Z0 = JuMP.objective_value(optimization_model)
+    Z0 = COBREXA.JuMP.objective_value(optimization_model)
     optimization_model = nothing # we won't need this one anymore, so free the memory
 
     # store a JuMP optimization model at all workers
@@ -91,7 +91,7 @@ Internal helper function for adding constraints to a model. Exists mainly
 because for avoiding namespace problems on remote workers.
 """
 function _FVA_add_constraint(model, c, x, Z0, gamma)
-    JuMP.@constraint(model, c' * x ≥ gamma * Z0)
+    COBREXA.JuMP.@constraint(model, c' * x ≥ gamma * Z0)
 end
 
 """
@@ -102,11 +102,11 @@ namespace problems.
 """
 function _FVA_optimize_reaction(model, rid)
     sense = rid > 0 ? MOI.MAX_SENSE : MOI.MIN_SENSE
-    var = JuMP.all_variables(model)[abs(rid)]
+    var = COBREXA.JuMP.all_variables(model)[abs(rid)]
 
-    JuMP.@objective(model, sense, var)
-    JuMP.optimize!(model)
-    return JuMP.objective_value(model)
+    COBREXA.JuMP.@objective(model, sense, var)
+    COBREXA.JuMP.optimize!(model)
+    return COBREXA.JuMP.objective_value(model)
 end
 
 """
diff --git a/src/analysis/pfba.jl b/src/analysis/pfba.jl
index 29bde931ec1ef3fe14f574fa821fcb3774fd949d..1e2afc4139a4494610cda97493d8da0643a5a941 100644
--- a/src/analysis/pfba.jl
+++ b/src/analysis/pfba.jl
@@ -120,7 +120,7 @@ function pfba(
            termination_status(cbm) == MOI.LOCALLY_SOLVED # try to relax bound if failed optimization
             break
         else
-            JuMP.delete(cbm, pfbacon)
+            COBREXA.JuMP.delete(cbm, pfbacon)
             @constraint(cbm, lbconval * λ <= sum(v[i] for i in objective_indices) <= λ)
             optimize!(cbm)
         end
diff --git a/src/base/solver.jl b/src/base/solver.jl
index f9f9d2c4610c2bf839732c52618a77102a12eb86..178654463f73c57a05844438ca73c0cdf8674620 100644
--- a/src/base/solver.jl
+++ b/src/base/solver.jl
@@ -10,7 +10,7 @@ function make_optimization_model(
     m, n = size(stoichiometry(model))
     xl, xu = bounds(model)
 
-    optimization_model = JuMP.Model(optimizer)
+    optimization_model = COBREXA.JuMP.Model(optimizer)
     @variable(optimization_model, x[i = 1:n])
     @objective(optimization_model, sense, objective(model)' * x)
     mb = @constraint(optimization_model, mb, stoichiometry(model) * x .== balance(model)) # mass balance
@@ -30,6 +30,6 @@ function optimize_model(
 ) where {LM<:MetabolicModel}
     optimization_model, x, _, _, _ =
         make_optimization_model(model, optimizer; sense = sense)
-    JuMP.optimize!(optimization_model)
+        COBREXA.JuMP.optimize!(optimization_model)
     return (optimization_model, x)
 end