diff --git a/matlab/optimization/dynare_minimize_objective.m b/matlab/optimization/dynare_minimize_objective.m
index 025d411899bb4112ad484210ca61ba9d4c0055a8..b5161701063432015891450ffa49b0eacb3747ff 100644
--- a/matlab/optimization/dynare_minimize_objective.m
+++ b/matlab/optimization/dynare_minimize_objective.m
@@ -135,11 +135,7 @@ switch minimizer_algorithm
         simulated_annealing(objective_function,start_par_value,sa_options,LB,UB,varargin{:});
   case 3
     if isoctave && ~user_has_octave_forge_package('optim')
-        try
-            pkg load optim
-        catch
-            error('Optimization algorithm 3 requires the optim package')
-        end
+        error('Optimization algorithm 3 requires the optim package')
     elseif ~isoctave && ~user_has_matlab_license('optimization_toolbox')
         error('Optimization algorithm 3 requires the Optimization Toolbox')
     end
diff --git a/matlab/user_has_octave_forge_package.m b/matlab/user_has_octave_forge_package.m
index 07d918d4242520458c08f3eb1c225c2fe79ee441..a3f1bc38dbbb70606dd919e508a1259eae6ceac8 100644
--- a/matlab/user_has_octave_forge_package.m
+++ b/matlab/user_has_octave_forge_package.m
@@ -20,4 +20,11 @@ function [hasPackage] = user_has_octave_forge_package(package)
 
 [desc,flag] = pkg('describe', package);
 
-hasPackage = isequal(flag{1,1}, 'Loaded');
+if isequal(flag{1,1}, 'Not installed')
+    hasPackage = 0;
+else
+    if isequal(flag{1,1}, 'Not loaded')
+        pkg('load', package);
+    end
+    hasPackage = 1;
+end