diff --git a/matlab/check.m b/matlab/check.m
index cf2d10ea1ca1bf7f017b058a76305c080fd502a4..0ab37195971678c59a56af881095fd86ef43af14 100644
--- a/matlab/check.m
+++ b/matlab/check.m
@@ -1,15 +1,42 @@
-function [result,info] = check
-% function result = check
-% checks determinacy conditions by computing the eigenvalues
-%
-% INPUTS
-%    none
-%    
-% OUTPUTS
-%    result  [integer]   scalar, equal to 1 if the derterministic steady state satisfies BK conditions. 
-%
-% SPECIAL REQUIREMENTS
-%    none
+function [result,info] = check(M, options, oo)
+% Checks determinacy conditions by computing the generalized eigenvalues.
+
+%@info:
+%! @deftypefn {Function File} {[result,info] =} check (@var{M},@var{options},@var{oo})
+%! @anchor{check}
+%! @sp 1
+%! Checks determinacy conditions by computing the generalized eigenvalues.
+%! @sp 2
+%! @strong{Inputs}
+%! @sp 1
+%! @table @ @var
+%! @item M
+%! Matlab's structure describing the model (initialized by dynare).
+%! @item options
+%! Matlab's structure describing the options (initialized by dynare).
+%! @item oo
+%! Matlab's structure gathering the results (initialized by dynare).
+%! @end table
+%! @sp 2
+%! @strong{Outputs}
+%! @sp 1
+%! @table @ @var
+%! @item result
+%! Integer scalar equal to one (BK conditions are satisfied) or zero (otherwise).
+%! @item info
+%! Integer scalar, error code as returned by @ref{resol}.
+%! @end table
+%! @sp 2
+%! @strong{This function is called by:}
+%! @sp 1
+%! @ref{smm_objective}
+%! @sp 2
+%! @strong{This function calls:}
+%! @sp 1
+%! @ref{resol}
+%! None.
+%! @end deftypefn
+%@eod:
 
 % Copyright (C) 2001-2011 Dynare Team
 %
@@ -28,46 +55,40 @@ function [result,info] = check
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global M_ options_ oo_
-
 
-temp_options = options_;
-tempex = oo_.exo_simul;
-if ~options_.initval_file && M_.exo_nbr > 1
-    oo_.exo_simul = ones(M_.maximum_lead+M_.maximum_lag+1,1)*oo_.exo_steady_state';
+if ~options.initval_file && M.exo_nbr > 1
+    oo.exo_simul = ones(M.maximum_lead+M.maximum_lag+1,1)*oo.exo_steady_state';
 end
 
-options_.order = 1;
+options.order = 1;
 
-if isempty(options_.qz_criterium)
-    options_.qz_criterium = 1+1e-6;
+if isempty(options.qz_criterium)
+    options.qz_criterium = 1+1e-6;
 end
 
-[dr, info] = resol(oo_.steady_state,1);
+[dr, info] = resol(oo.steady_state,1);
 
-oo_.dr = dr;
+oo.dr = dr;
 
 if info(1) ~= 0 && info(1) ~= 3 && info(1) ~= 4
-    print_info(info, options_.noprint);
-end  
-
-oo_.exo_simul = tempex;
+    print_info(info, options.noprint);
+end
 
 eigenvalues_ = dr.eigval;
-if (options_.block)
+if (options.block)
     nyf = dr.nyf;
 else
-    nyf = nnz(dr.kstate(:,2)>M_.maximum_endo_lag+1);
+    nyf = nnz(dr.kstate(:,2)>M.maximum_endo_lag+1);
 end;
 [m_lambda,i]=sort(abs(eigenvalues_));
-n_explod = nnz(abs(eigenvalues_) > options_.qz_criterium);
+n_explod = nnz(abs(eigenvalues_) > options.qz_criterium);
 
 result = 0;
 if (nyf== n_explod) && (dr.rank == nyf)
     result = 1;
 end
 
-if options_.noprint == 0
+if options.noprint == 0
     disp(' ')
     disp('EIGENVALUES:')
     disp(sprintf('%16s %16s %16s\n','Modulus','Real','Imaginary'))
@@ -82,6 +103,4 @@ if options_.noprint == 0
         disp('The rank conditions ISN''T verified!')
     end
     disp(' ')
-end
-
-options_ = temp_options;
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/matlab/smm_objective.m b/matlab/smm_objective.m
index 6dc711275a1d3dd5204e23675b3c373bbad5b6dd..5a0773b02156e0787d15cd8e5b35d39348eedbf9 100644
--- a/matlab/smm_objective.m
+++ b/matlab/smm_objective.m
@@ -32,7 +32,7 @@ function [r,flag] = smm_objective(xparams,sample_moments,weighting_matrix,option
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.    
 
-global M_ options_
+global M_ options_ oo_
 persistent mainStream mainState
 persistent priorObjectiveValue
 
@@ -71,7 +71,7 @@ save('estimated_parameters.mat','xparams');
 
 % Check for local determinacy of the deterministic steady state.
 noprint = options_.noprint; options_.noprint = 1;
-[local_determinacy_and_stability,info] = check; options_.noprint = noprint;
+[local_determinacy_and_stability,info] = check(M_,options_,oo_); options_.noprint = noprint;
 if ~local_determinacy_and_stability
     r = priorObjectiveValue * (1+info(2));
     flag = 0;