diff --git a/matlab/GetOneDraw.m b/matlab/GetOneDraw.m
index f8e2a0d63b96c9264e2cd35e4a110d16fe409373..e4fba3a4319a51ccd4e30138add672563aa7ada9 100644
--- a/matlab/GetOneDraw.m
+++ b/matlab/GetOneDraw.m
@@ -1,10 +1,15 @@
-function [xparams, logpost] = GetOneDraw(type)
-% function [xparams, logpost] = GetOneDraw(type)
+function [xparams, logpost] = GetOneDraw(type,M_,estim_params_,oo_,options_,bayestopt_)
+% function [xparams, logpost] = GetOneDraw(type,M_,estim_params_,oo_,options_,bayestopt_)
 % draws one parameter vector and its posterior from MCMC or the prior
 %
 % INPUTS
 %    type:      [string]       'posterior': draw from MCMC draws
 %                              'prior': draw from prior
+%    M_         [structure]     Definition of the model
+%    estim_params_ [structure]  characterizing parameters to be estimated
+%    oo_         [structure]    Storage of results
+%    options_    [structure]    Options
+%    bayestopt_  [structure]    describing the priors
 %
 % OUTPUTS
 %    xparams:   vector of estimated parameters (drawn from posterior or prior distribution)
@@ -36,6 +41,6 @@ switch type
   case 'prior'
     xparams = prior_draw();
     if nargout>1
-        logpost = evaluate_posterior_kernel(xparams');
+        logpost = evaluate_posterior_kernel(xparams',M_,estim_params_,oo_,options_,bayestopt_);
     end
 end
\ No newline at end of file
diff --git a/matlab/PosteriorIRF.m b/matlab/PosteriorIRF.m
index 157a5e3a13a22be663ff72f1db6d11716bf05562..12cc6c8d8beb213bc541d60d4a61a8c6105d8549 100644
--- a/matlab/PosteriorIRF.m
+++ b/matlab/PosteriorIRF.m
@@ -174,7 +174,7 @@ localVars.type=type;
 if strcmpi(type,'posterior')
     while b<B
         b = b + 1;
-        x(b,:) = GetOneDraw(type);
+        x(b,:) = GetOneDraw(type,M_,estim_params_,oo_,options_,bayestopt_);
     end
 end
 
diff --git a/matlab/PosteriorIRF_core1.m b/matlab/PosteriorIRF_core1.m
index 561104f673c8c0921c84f9c345d58a5183ac6093..2f5a931c4612407e4a27eaa64f59470be799a010 100644
--- a/matlab/PosteriorIRF_core1.m
+++ b/matlab/PosteriorIRF_core1.m
@@ -141,7 +141,7 @@ while fpar<B
     irun = irun+1;
     irun2 = irun2+1;
     if strcmpi(type,'prior')
-        deep = GetOneDraw(type);
+        deep = GetOneDraw(type,M_,estim_params_,oo_,options_,bayestopt_);
     else
         deep = x(fpar,:);
     end
diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m
index 3fe420a2bfc85aab6dde28eca940e8991c5fe9aa..1a674c32bfb3392e77c2a745b37126b9b03324a8 100644
--- a/matlab/dynare_estimation_1.m
+++ b/matlab/dynare_estimation_1.m
@@ -519,7 +519,7 @@ if (any(bayestopt_.pshape  >0 ) && options_.mh_replic) || ...
             end
             prior_posterior_statistics('posterior',dataset_,dataset_info);
         end
-        xparam1 = get_posterior_parameters('mean');
+        xparam1 = get_posterior_parameters('mean',M_,estim_params_,oo_,options_);
         M_ = set_all_parameters(xparam1,estim_params_,M_);
     end
 end
diff --git a/matlab/dynare_identification.m b/matlab/dynare_identification.m
index 7b5c1e5569e803ecd1d8a1f952620e8896452288..bc16725fa9411eb35244423c6c671e9a51f96939 100644
--- a/matlab/dynare_identification.m
+++ b/matlab/dynare_identification.m
@@ -271,15 +271,15 @@ if iload <=0
               case 'posterior_mode'
                 parameters_TeX = 'Posterior mode';
                 disp('Testing posterior mode')
-                params(1,:) = get_posterior_parameters('mode');
+                params(1,:) = get_posterior_parameters('mode',M_,estim_params_,oo_,options_);
               case 'posterior_mean'
                 parameters_TeX = 'Posterior mean';
                 disp('Testing posterior mean')
-                params(1,:) = get_posterior_parameters('mean');
+                params(1,:) = get_posterior_parameters('mean',M_,estim_params_,oo_,options_);
               case 'posterior_median'
                 parameters_TeX = 'Posterior median';
                 disp('Testing posterior median')
-                params(1,:) = get_posterior_parameters('median');
+                params(1,:) = get_posterior_parameters('median',M_,estim_params_,oo_,options_);
               case 'prior_mode'
                 parameters_TeX = 'Prior mode';
                 disp('Testing prior mode')
diff --git a/matlab/evaluate_likelihood.m b/matlab/evaluate_likelihood.m
index a76534adff87bc0f301bbcbc6e218a024f175dcc..20da8eb4c6c196104cc02103a67c4f2d7413cb43 100644
--- a/matlab/evaluate_likelihood.m
+++ b/matlab/evaluate_likelihood.m
@@ -1,10 +1,14 @@
-function [llik,parameters] = evaluate_likelihood(parameters)
+function [llik,parameters] = evaluate_likelihood(parameters,M_,estim_params_,oo_,options_,bayestopt_)
 % Evaluate the logged likelihood at parameters.
 %
 % INPUTS
 %    o parameters  a string ('posterior mode','posterior mean','posterior median','prior mode','prior mean') or a vector of values for
 %                  the (estimated) parameters of the model.
-%
+%    o M_          [structure]  Definition of the model
+%    o estim_params_ [structure] characterizing parameters to be estimated
+%    o oo_         [structure]  Storage of results
+%    o options_    [structure]  Options
+%    o bayestopt_  [structure]  describing the priors
 %
 % OUTPUTS
 %    o ldens       [double]  value of the sample logged density at parameters.
@@ -35,8 +39,6 @@ function [llik,parameters] = evaluate_likelihood(parameters)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global options_ M_ bayestopt_ oo_ estim_params_
-
 persistent dataset dataset_info
 
 if nargin==0
@@ -46,11 +48,11 @@ end
 if ischar(parameters)
     switch parameters
       case 'posterior mode'
-        parameters = get_posterior_parameters('mode');
+        parameters = get_posterior_parameters('mode',M_,estim_params_,oo_,options_);
       case 'posterior mean'
-        parameters = get_posterior_parameters('mean');
+        parameters = get_posterior_parameters('mean',M_,estim_params_,oo_,options_);
       case 'posterior median'
-        parameters = get_posterior_parameters('median');
+        parameters = get_posterior_parameters('median',M_,estim_params_,oo_,options_);
       case 'prior mode'
         parameters = bayestopt_.p5(:);
       case 'prior mean'
@@ -72,5 +74,5 @@ end
 options_=select_qz_criterium_value(options_);
 
 llik = -dsge_likelihood(parameters,dataset,dataset_info,options_,M_,estim_params_,bayestopt_,prior_bounds(bayestopt_,options_.prior_trunc),oo_);
-ldens = evaluate_prior(parameters);
+ldens = evaluate_prior(parameters,M_,estim_params_,oo_,options_,bayestopt_);
 llik = llik - ldens;
\ No newline at end of file
diff --git a/matlab/evaluate_posterior_kernel.m b/matlab/evaluate_posterior_kernel.m
index 997962127a7a672e38cc6e7529a4828c3d495c5d..c4132fb38f04dd4e9c3422e4ce056c7c22e1d8d7 100644
--- a/matlab/evaluate_posterior_kernel.m
+++ b/matlab/evaluate_posterior_kernel.m
@@ -1,10 +1,16 @@
-function lpkern = evaluate_posterior_kernel(parameters,llik)
-% Evaluate the prior density at parameters.
+function lpkern = evaluate_posterior_kernel(parameters,M_,estim_params_,oo_,options_,bayestopt_,llik)
+% Evaluate the evaluate_posterior_kernel at parameters.
 %
 % INPUTS
 %    o parameters  a string ('posterior mode','posterior mean','posterior median','prior mode','prior mean') or a vector of values for
 %                  the (estimated) parameters of the model.
-%
+%    o M_         [structure]     Definition of the model
+%    o estim_params_ [structure]  characterizing parameters to be estimated
+%    o oo_         [structure]    Storage of results
+%    o options_    [structure]    Options
+%    o bayestopt_  [structure]    describing the priors
+%    o llik        [double]       value of the logged likelihood if it
+%                                   should not be computed
 %
 % OUTPUTS
 %    o lpkern      [double]  value of the logged posterior kernel.
@@ -34,8 +40,8 @@ function lpkern = evaluate_posterior_kernel(parameters,llik)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-[ldens,parameters] = evaluate_prior(parameters);
-if nargin==1
-    llik = evaluate_likelihood(parameters);
+[ldens,parameters] = evaluate_prior(parameters,M_,estim_params_,oo_,options_,bayestopt_);
+if nargin==6 %llik provided as an input
+    llik = evaluate_likelihood(parameters,M_,estim_params_,oo_,options_,bayestopt_);
 end
 lpkern = ldens+llik;
\ No newline at end of file
diff --git a/matlab/evaluate_prior.m b/matlab/evaluate_prior.m
index 01cede921ea4ccd78acd10cbf38e0d865f2f1ddc..e340667c3ecad7c19982ed348c158530b0d7e914 100644
--- a/matlab/evaluate_prior.m
+++ b/matlab/evaluate_prior.m
@@ -1,9 +1,14 @@
-function [ldens,parameters] = evaluate_prior(parameters)
+function [ldens,parameters] = evaluate_prior(parameters,M_,estim_params_,oo_,options_,bayestopt_)
 % Evaluate the prior density at parameters.
 %
 % INPUTS
 %    o parameters  a string ('posterior mode','posterior mean','posterior median','prior mode','prior mean') or a vector of values for
 %                  the (estimated) parameters of the model.
+%    o M_          [structure]  Definition of the model
+%    o oo_         [structure]  Storage of results
+%    o options_    [structure]  Options
+%    o bayestopt_  [structure]  describing the priors
+%    o estim_params_ [structure] characterizing parameters to be estimated
 %
 %
 % OUTPUTS
@@ -33,8 +38,6 @@ function [ldens,parameters] = evaluate_prior(parameters)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global bayestopt_
-
 if nargin==0
     parameters = 'posterior mode';
 end
@@ -42,11 +45,11 @@ end
 if ischar(parameters)
     switch parameters
       case 'posterior mode'
-        parameters = get_posterior_parameters('mode');
+        parameters = get_posterior_parameters('mode',M_,estim_params_,oo_,options_);
       case 'posterior mean'
-        parameters = get_posterior_parameters('mean');
+        parameters = get_posterior_parameters('mean',M_,estim_params_,oo_,options_);
       case 'posterior median'
-        parameters = get_posterior_parameters('median');
+        parameters = get_posterior_parameters('median',M_,estim_params_,oo_,options_);
       case 'prior mode'
         parameters = bayestopt_.p5(:);
       case 'prior mean'
diff --git a/matlab/evaluate_smoother.m b/matlab/evaluate_smoother.m
index 9ab94654b1f42e0d134fa8ce5193c56817624ed5..0c67142ddc9a0b48b14249a61a7c54d51eac55c3 100644
--- a/matlab/evaluate_smoother.m
+++ b/matlab/evaluate_smoother.m
@@ -73,13 +73,13 @@ end
 if ischar(parameters)
     switch parameters
       case 'posterior_mode'
-        parameters = get_posterior_parameters('mode');
+        parameters = get_posterior_parameters('mode',M_,estim_params_,oo_,options_);
       case 'posterior_mean'
-        parameters = get_posterior_parameters('mean');
+        parameters = get_posterior_parameters('mean',M_,estim_params_,oo_,options_);
       case 'posterior_median'
-        parameters = get_posterior_parameters('median');
+        parameters = get_posterior_parameters('median',M_,estim_params_,oo_,options_);
       case 'mle_mode'
-        parameters = get_posterior_parameters('mode','mle_');
+        parameters = get_posterior_parameters('mode',M_,estim_params_,oo_,options_,'mle_');
       case 'prior_mode'
         parameters = bayestopt_.p5(:);
       case 'prior_mean'
diff --git a/matlab/execute_prior_posterior_function.m b/matlab/execute_prior_posterior_function.m
index 1370ab34ee4176a34a3cbd20aa38770675e1fdd5..cb7884e83916c945a4c19fb069f3f130204c5ec1 100644
--- a/matlab/execute_prior_posterior_function.m
+++ b/matlab/execute_prior_posterior_function.m
@@ -75,11 +75,11 @@ else
 end
 
 %get draws for later use
-first_draw=GetOneDraw(type);
+first_draw=GetOneDraw(type,M_,estim_params_,oo_,options_,bayestopt_);
 parameter_mat=NaN(n_draws,length(first_draw));
 parameter_mat(1,:)=first_draw;
 for draw_iter=2:n_draws
-    parameter_mat(draw_iter,:) = GetOneDraw(type);
+    parameter_mat(draw_iter,:) = GetOneDraw(type,M_,estim_params_,oo_,options_,bayestopt_);
 end
 
 % get output size
diff --git a/matlab/get_all_parameters.m b/matlab/get_all_parameters.m
index 289b6a67994a50007c44085e80e429787ccac3ac..d2aa30c61bc3500138f78928e328d65cfd5651a8 100644
--- a/matlab/get_all_parameters.m
+++ b/matlab/get_all_parameters.m
@@ -6,7 +6,7 @@ function xparam1=get_all_parameters(estim_params_,M_)
 % parameter values
 %
 % INPUTS
-%        estim_params_:  Dynare structure describing the estimated parameters.
+%    estim_params_:  Dynare structure describing the estimated parameters.
 %    M_:             Dynare structure describing the model.
 %
 % OUTPUTS
diff --git a/matlab/get_posterior_parameters.m b/matlab/get_posterior_parameters.m
index e10616d2078e964ff6f47aa16a5f0ccfb947f775..0417956ed232d1870a0d0befc71cfd17c4b2afa1 100644
--- a/matlab/get_posterior_parameters.m
+++ b/matlab/get_posterior_parameters.m
@@ -1,11 +1,13 @@
-function xparam = get_posterior_parameters(type,field1)
+function xparam = get_posterior_parameters(type,M_,estim_params_,oo_,options_,field1)
 
-% function xparam = get_posterior_parameters(type)
+% function xparam = get_posterior_parameters(type,M_,estim_params_,oo_,options_,field1)
 % Selects (estimated) parameters (posterior mode or posterior mean).
 %
 % INPUTS
-%   o type       [char]     = 'mode' or 'mean'.
-%   o field_1    [char]     optional field like 'mle_'.
+%   o type              [char]     = 'mode' or 'mean'.
+%   o M_:               [structure] Dynare structure describing the model.
+%   o estim_params_:    [structure] Dynare structure describing the estimated parameters.
+%   o field_1           [char]     optional field like 'mle_'.
 %
 % OUTPUTS
 %   o xparam     vector of estimated parameters
@@ -30,9 +32,7 @@ function xparam = get_posterior_parameters(type,field1)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global estim_params_ oo_ options_ M_
-
-if nargin<2
+if nargin<6
     field1='posterior_';
 end
 nvx = estim_params_.nvx;
@@ -48,7 +48,6 @@ for i=1:nvx
     k1 = estim_params_.var_exo(i,1);
     name1 = deblank(M_.exo_names(k1,:));
     xparam(m) = oo_.([field1 type]).shocks_std.(name1);
-    M_.Sigma_e(k1,k1) = xparam(m)^2;
     m = m+1;
 end
 
@@ -65,8 +64,6 @@ for i=1:ncx
     name1 = deblank(M_.exo_names(k1,:));
     name2 = deblank(M_.exo_names(k2,:));
     xparam(m) = oo_.([field1 type]).shocks_corr.([name1 '_' name2]);
-    M_.Sigma_e(k1,k2) = xparam(m);
-    M_.Sigma_e(k2,k1) = xparam(m);
     m = m+1;
 end
 
@@ -84,10 +81,5 @@ FirstDeep = m;
 for i=1:np
     name1 = deblank(M_.param_names(estim_params_.param_vals(i,1),:));
     xparam(m) = oo_.([field1 type]).parameters.(name1);
-    %assignin('base',name1,xparam(m));% Useless with version 4 (except maybe for users)
     m = m+1;
-end
-
-if np
-    M_.params(estim_params_.param_vals(:,1)) = xparam(FirstDeep:end);
 end
\ No newline at end of file
diff --git a/matlab/imcforecast.m b/matlab/imcforecast.m
index 66841319a847fd3bf43f1d5269cfc2ea6ab6a114..3f77a3f2fbe0523bd4d1f14e0103298c57204e1e 100644
--- a/matlab/imcforecast.m
+++ b/matlab/imcforecast.m
@@ -80,16 +80,16 @@ if estimated_model
     if ischar(options_cond_fcst.parameter_set)
         switch options_cond_fcst.parameter_set
           case 'posterior_mode'
-            xparam = get_posterior_parameters('mode');
+            xparam = get_posterior_parameters('mode',M_,estim_params_,oo_,options_);
             graph_title='Posterior Mode';
           case 'posterior_mean'
-            xparam = get_posterior_parameters('mean');
+            xparam = get_posterior_parameters('mean',M_,estim_params_,oo_,options_);
             graph_title='Posterior Mean';
           case 'posterior_median'
-            xparam = get_posterior_parameters('median');
+            xparam = get_posterior_parameters('median',M_,estim_params_,oo_,options_);
             graph_title='Posterior Median';
           case 'mle_mode'
-            xparam = get_posterior_parameters('mode','mle_');
+            xparam = get_posterior_parameters('mode',M_,estim_params_,oo_,options_,'mle_');
             graph_title='ML Mode';
           case 'prior_mode'
             xparam = bayestopt_.p5(:);
diff --git a/matlab/prior_posterior_statistics.m b/matlab/prior_posterior_statistics.m
index 064e7874ae0dac8c38be2bc7cb8b4a79c7c9d0ca..72aca1e7948e074bf5f49aa2730700f6f2f5644b 100644
--- a/matlab/prior_posterior_statistics.m
+++ b/matlab/prior_posterior_statistics.m
@@ -226,7 +226,7 @@ if strcmpi(type,'posterior')
     else
         logpost=NaN(B,1);
         for b=1:B
-            [x(b,:), logpost(b)] = GetOneDraw(type);
+            [x(b,:), logpost(b)] = GetOneDraw(type,M_,estim_params_,oo_,options_,bayestopt_);
         end
     end
     localVars.logpost=logpost;
diff --git a/matlab/prior_posterior_statistics_core.m b/matlab/prior_posterior_statistics_core.m
index 8e39e5ae2c4b629515275f03e7c136fc5927e68c..7fa6832d2de4c6297bb876f91a107746ac6a08f2 100644
--- a/matlab/prior_posterior_statistics_core.m
+++ b/matlab/prior_posterior_statistics_core.m
@@ -190,14 +190,14 @@ end
 for b=fpar:B
     if strcmpi(type,'prior')
 
-        [deep, logpo] = GetOneDraw(type);
+        [deep, logpo] = GetOneDraw(type,M_,estim_params_,oo_,options_,bayestopt_);
 
     else
         deep = x(b,:);
         if strcmpi(type,'posterior')
             logpo = logpost(b);
         else
-            logpo = evaluate_posterior_kernel(deep');
+            logpo = evaluate_posterior_kernel(deep',M_,estim_params_,oo_,options_,bayestopt_);
         end
     end
     M_ = set_all_parameters(deep,estim_params_,M_);