diff --git a/doc/dynare.texi b/doc/dynare.texi
index 279a512371196ef99f3b733a825dccc077884ba4..f925be155444a636c9c79d3a91621d1e996ab5fb 100644
--- a/doc/dynare.texi
+++ b/doc/dynare.texi
@@ -2158,7 +2158,7 @@ Specifies the correlation of two variables.
 In an estimation context, it is also possible to specify variances and
 covariances on endogenous variables: in that case, these values are
 interpreted as the calibration of the measurement errors on these
-variables.
+variables. This requires the @code{var_obs}-command to be specified before the @code{shocks}-block.
 
 Here is an example:
 
@@ -3747,14 +3747,14 @@ alternatives:
 
 @item stderr @var{VARIABLE_NAME}
 Indicates that the standard error of the exogenous variable
-@var{VARIABLE_NAME}, or of the observation error associated with
+@var{VARIABLE_NAME}, or of the observation error/measurement errors associated with
 endogenous observed variable @var{VARIABLE_NAME}, is to be estimated
 
 @item corr @var{VARIABLE_NAME1}, @var{VARIABLE_NAME2}
 Indicates that the correlation between the exogenous variables
 @var{VARIABLE_NAME1} and @var{VARIABLE_NAME2}, or the correlation of
-the observation errors associated with endogenous observed variables
-@var{VARIABLE_NAME1} and @var{VARIABLE_NAME2}, is to be estimated
+the observation errors/measurement errors associated with endogenous observed variables
+@var{VARIABLE_NAME1} and @var{VARIABLE_NAME2}, is to be estimated. Note that correlations set by previous @code{shocks}-blocks or @code{estimation}-commands are kept at their value set prior to estimation if they are not estimated again subsequently. Thus, the treatment is the same as in the case of deep parameters set during model calibration and not estimated.
 
 @item @var{PARAMETER_NAME}
 The name of a model parameter to be estimated
diff --git a/matlab/GetPosteriorParametersStatistics.m b/matlab/GetPosteriorParametersStatistics.m
index ef706b584926f508f9197141010404d13acff3a1..cb6ba4219815513272b12e88627d8e895ee506e0 100644
--- a/matlab/GetPosteriorParametersStatistics.m
+++ b/matlab/GetPosteriorParametersStatistics.m
@@ -15,7 +15,7 @@ function oo_ = GetPosteriorParametersStatistics(estim_params_, M_, options_, bay
 % SPECIAL REQUIREMENTS
 %   None.
 
-% Copyright (C) 2006-2012 Dynare Team
+% Copyright (C) 2006-2013 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -163,7 +163,7 @@ end
 if nvn
     type = 'measurement_errors_std';
     if TeX
-        fid = TeXBegin(OutputDirectoryName,M_.fname,3,'standard deviation of measurement errors')
+        fid = TeXBegin(OutputDirectoryName,M_.fname,3,'standard deviation of measurement errors');
     end
     disp(' ')
     disp('standard deviation of measurement errors')
@@ -174,17 +174,17 @@ if nvn
             Draws = GetAllPosteriorDraws(ip,FirstMhFile,FirstLine,TotalNumberOfMhFiles,NumberOfDraws);
             [post_mean, post_median, post_var, hpd_interval, post_deciles, density] = ...
                 posterior_moments(Draws,1,options_.mh_conf_sig);
-            name = deblank(options_.varobs(estim_params_.var_endo(i,1),:));
+            name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:));
             oo_ = Filloo(oo_,name,type,post_mean,hpd_interval,post_median,post_var,post_deciles,density);
         else
             try
-                name = deblank(options_.varobs(estim_params_.var_endo(i,1),:));
+                name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:));
                 [post_mean,hpd_interval,post_var] = Extractoo(oo_,name,type);
             catch
                 Draws = GetAllPosteriorDraws(ip,FirstMhFile,FirstLine,TotalNumberOfMhFiles,NumberOfDraws);
                 [post_mean, post_median, post_var, hpd_interval, post_deciles, density] = ...
                     posterior_moments(Draws,1,options_.mh_conf_sig);
-                name = deblank(options_.varobs(estim_params_.var_endo(i,1),:));
+                name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:));
                 oo_ = Filloo(oo_,name,type,post_mean,hpd_interval,post_median,post_var,post_deciles,density);
             end
         end
diff --git a/matlab/PlotPosteriorDistributions.m b/matlab/PlotPosteriorDistributions.m
index ba6510eea5017c5ccef193fe451ec4da0a81f5bb..5a622272b56bec12f656179e2a589067008112e7 100644
--- a/matlab/PlotPosteriorDistributions.m
+++ b/matlab/PlotPosteriorDistributions.m
@@ -16,7 +16,7 @@ function oo_ = PlotPosteriorDistributions(estim_params_, M_, options_, bayestopt
 % SPECIAL REQUIREMENTS
 %    none
 
-% Copyright (C) 2005-2012 Dynare Team
+% Copyright (C) 2005-2013 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -89,7 +89,7 @@ for i=1:npar
             eval(['pmod = oo_.posterior_mode.shocks_std.' name ';'])
         end
     elseif i <= nvx+nvn
-        name = deblank(options_.varobs(estim_params_.var_endo(i-nvx,1),:));
+        name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i-nvx,1),:));
         eval(['x1 = oo_.posterior_density.measurement_errors_std.' name '(:,1);'])
         eval(['f1 = oo_.posterior_density.measurement_errors_std.' name '(:,2);'])    
         eval(['oo_.prior_density.mearsurement_errors_std.' name '(:,1) = x2;'])
diff --git a/matlab/dyn_forecast.m b/matlab/dyn_forecast.m
index 812ab1ca4461a79788308304406286c55d65416e..1804b9a67887f1fab7c607e98b8f60c2fb0fa315 100644
--- a/matlab/dyn_forecast.m
+++ b/matlab/dyn_forecast.m
@@ -87,8 +87,10 @@ switch task
                 i_var_obs = [ i_var_obs; tmp];
                 trend_coeffs = [trend_coeffs; oo_.Smoother.TrendCoeffs(i)];
             end
-        end         
-        trend = trend_coeffs*(gend+(1-M_.maximum_lag:horizon));
+        end
+        if ~isempty(trend_coeffs) 
+          trend = trend_coeffs*(gend+(1-M_.maximum_lag:horizon)); 
+        end
     end
     global bayestopt_
     if isfield(bayestopt_,'mean_varobs')
diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m
index f4a6dcadadc9d800fe3f50027425fe0baf9a20fd..aca6242824ef8a70f8efeb1de2de3f2e1a981239 100644
--- a/matlab/dynare_estimation_1.m
+++ b/matlab/dynare_estimation_1.m
@@ -77,6 +77,24 @@ if ~isequal(estim_params_.ncx,nnz(tril(M_.Sigma_e,-1)))
     end
 end
 
+M_.H_is_diagonal = 1;
+if estim_params_.ncn || ~isequal(nnz(M_.H),length(M_.H))
+    M_.H_is_diagonal = 0;
+end
+
+% Set the correlation matrix of measurement errors if necessary.
+if ~isequal(estim_params_.ncn,nnz(tril(M_.H,-1)))
+    M_.Correlation_matrix_ME = diag(1./sqrt(diag(M_.H)))*M_.H*diag(1./sqrt(diag(M_.H)));
+    % Remove NaNs appearing because of variances calibrated to zero.
+    if any(isnan(M_.Correlation_matrix_ME))
+        zero_variance_idx = find(~diag(M_.H));
+        for i=1:length(zero_variance_idx)
+            M_.Correlation_matrix_ME(zero_variance_idx(i),:) = 0;
+            M_.Correlation_matrix_ME(:,zero_variance_idx(i)) = 0;
+        end
+    end
+end
+
 data = dataset_.data;
 rawdata = dataset_.rawdata;
 data_index = dataset_.missing.aindex;
@@ -554,7 +572,7 @@ if any(bayestopt_.pshape > 0) && ~options_.mh_posterior_mode_estimation
         disp(tit1)
         ip = nvx+1;
         for i=1:nvn
-            name = deblank(options_.varobs(estim_params_.var_endo(i,1),:));
+            name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:));
             disp(sprintf('%-*s %7.3f %8.4f %7.4f %7.4f %4s %6.4f', ...
                          header_width,name,bayestopt_.p1(ip), ...
                          xparam1(ip),stdh(ip),tstath(ip), ...
@@ -653,7 +671,7 @@ elseif ~any(bayestopt_.pshape > 0) && ~options_.mh_posterior_mode_estimation
         disp(tit1)
         ip = nvx+1;
         for i=1:nvn
-            name = deblank(options_.varobs(estim_params_.var_endo(i,1),:));
+            name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:));
             disp(sprintf('%-*s %8.4f %7.4f %7.4f',header_width,name,xparam1(ip),stdh(ip),tstath(ip)))
             eval(['oo_.mle_mode.measurement_errors_std.' name ' = xparam1(ip);']);
             eval(['oo_.mle_std.measurement_errors_std.' name ' = stdh(ip);']);
@@ -799,7 +817,7 @@ if any(bayestopt_.pshape > 0) && options_.TeX %% Bayesian estimation (posterior
         fprintf(fidTeX,'\\hline \\hline \\endlastfoot \n');
         ip = nvx+1;
         for i=1:nvn
-            idx = strmatch(options_.varobs(estim_params_.var_endo(i,1),:),M_.endo_names);
+            idx = strmatch(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:),M_.endo_names);
             fprintf(fidTeX,'$%s$ & %4s & %7.3f & %6.4f & %8.4f & %7.4f \\\\ \n',...
                     deblank(M_.endo_names_tex(idx,:)), ...
                     deblank(pnames(bayestopt_.pshape(ip)+1,:)), ...
@@ -1100,7 +1118,8 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha
                 hh = dyn_figure(options_,'Name','Smoothed observation errors');
                 NAMES = [];
                 if options_.TeX, TeXNAMES = []; end
-                for i=1:min(nstar,number_of_plots_to_draw-(nbplt-1)*nstar)
+                nstar0=min(nstar,number_of_plots_to_draw-(nbplt-1)*nstar);
+                for i=1:nstar0
                     k = (plt-1)*nstar+i;
                     subplot(nr,nc,i);
                     plot([1 gend],[0 0],'-r','linewidth',.5)
@@ -1131,7 +1150,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha
                 dyn_saveas(hh,[M_.fname '_SmoothedObservationErrors' int2str(plt)],options_);
                 if options_.TeX
                     fprintf(fidTeX,'\\begin{figure}[H]\n');
-                    for jj = 1:nstar
+                    for jj = 1:nstar0
                         fprintf(fidTeX,'\\psfrag{%s}[1][][0.5][0]{%s}\n',deblank(NAMES(jj,:)),deblank(TeXNAMES(jj,:)));
                     end
                     fprintf(fidTeX,'\\centering \n');
@@ -1168,7 +1187,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha
         for i=1:nstar0,
             k = (plt-1)*nstar+i;
             subplot(nr,nc,i);
-            plot(1:gend,yf(k,:),'--r','linewidth',1)
+            plot(1:gend,yf(k,:),'-r','linewidth',1)
             hold on
             plot(1:gend,rawdata(:,k),'--k','linewidth',1)
             hold off
diff --git a/matlab/get_posterior_parameters.m b/matlab/get_posterior_parameters.m
index dc987f610e70c6282d87f0b9b300c018466842d1..8c4a9c8ebb713d5ca3c26ec5d17d54f467814beb 100644
--- a/matlab/get_posterior_parameters.m
+++ b/matlab/get_posterior_parameters.m
@@ -12,7 +12,7 @@ function xparam = get_posterior_parameters(type)
 % SPECIAL REQUIREMENTS
 %   None.
 
-% Copyright (C) 2006-2009 Dynare Team
+% Copyright (C) 2006-2013 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -49,7 +49,7 @@ for i=1:nvx
 end
 
 for i=1:nvn
-    k1 = estim_params_.var_endo(i,1);
+    k1 = estim_params_.nvn_observable_correspondence(i,1);
     name1 = deblank(options_.varobs(k1,:));
     xparam(m) = eval(['oo_.posterior_' type '.measurement_errors_std.' name1]);
     m = m+1;
@@ -67,8 +67,8 @@ for i=1:ncx
 end
 
 for i=1:ncn
-    k1 = estim_params_.corrn(i,1);
-    k2 = estim_params_.corrn(i,2);
+    k1 = estim_params_.corrn_observable_correspondence(i,1);
+    k2 = estim_params_.corrn_observable_correspondence(i,2);
     name1 = deblank(options_.varobs(k1,:));
     name2 = deblank(options_.varobs(k2,:));
     xparam(m) = eval(['oo_.posterior_' type '.measurement_errors_corr.' name1 '_' name2]);
diff --git a/matlab/get_the_name.m b/matlab/get_the_name.m
index 9455b7181e8a0e008f873732485e8857bb0ac233..bd6172a223e6d3e752d36cc5c26ed34e198bc731 100644
--- a/matlab/get_the_name.m
+++ b/matlab/get_the_name.m
@@ -40,7 +40,7 @@ function [nam,texnam] = get_the_name(k,TeX,M_,estim_params_,options_)
 %! @end deftypefn
 %@eod:
 
-% Copyright (C) 2004-2011 Dynare Team
+% Copyright (C) 2004-2013 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -73,11 +73,11 @@ if k <= nvx
         texnam = ['$ SE_{' tname '} $'];
     end
 elseif  k <= (nvx+nvn)
-    vname = deblank(options_.varobs(estim_params_.var_endo(k-estim_params_.nvx,1),:));
+    vname = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(k-estim_params_.nvx,1),:));
     nam=['SE_EOBS_',vname];
     if TeX
         tname  = deblank(M_.endo_names_tex(estim_params_.var_endo(k-estim_params_.nvx,1),:));
-        texnam = ['$ SE_{' tname '} $'];
+        texnam = ['$ EOBS SE_{' tname '} $'];
     end
 elseif  k <= (nvx+nvn+ncx)
     jj = k - (nvx+nvn);
@@ -97,7 +97,7 @@ elseif  k <= (nvx+nvn+ncx+ncn)
     nam=['CC_EOBS_' vname];
     if TeX
         tname  = [deblank(M_.endo_names_tex(k1,:)) ',' deblank(M_.endo_names_tex(k2,:))];
-        texnam =['$ CC_{' tname '} $'];
+        texnam =['$ EOBS CC_{' tname '} $'];
     end
 else
     jj = k - (nvx+nvn+ncx+ncn);
diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m
index 4d102393433a2357a8704f3ff70d11953a020263..e4de0da74e6ace566bb6b02dd04538305ad5f6ee 100644
--- a/matlab/global_initialization.m
+++ b/matlab/global_initialization.m
@@ -422,6 +422,7 @@ oo_.exo_det_simul = [];
 M_.params = [];
 M_.endo_histval = [];
 M_.Correlation_matrix = [];
+M_.Correlation_matrix_ME = [];
 
 % homotopy
 options_.homotopy_mode = 0;
diff --git a/matlab/prior_posterior_statistics.m b/matlab/prior_posterior_statistics.m
index 3bb87776b93b927d76eb62612b082d0bb7aed854..8eb763508dc2e3ca23cce4f1ab0388f0688fefc2 100644
--- a/matlab/prior_posterior_statistics.m
+++ b/matlab/prior_posterior_statistics.m
@@ -19,7 +19,7 @@ function prior_posterior_statistics(type,dataset)
 % See the comments random_walk_metropolis_hastings.m funtion.
 
 
-% Copyright (C) 2005-2012 Dynare Team
+% Copyright (C) 2005-2013 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -298,20 +298,20 @@ end
 
 if options_.filtered_vars
     pm3(endo_nbr,gend,ifil(1),B,'Updated Variables',...
-        '',varlist,'tit_tex',M_.endo_names,...
+        '',varlist,M_.endo_names_tex,M_.endo_names,...
         varlist,'UpdatedVariables',DirectoryName, ...
         '_update');
     pm3(endo_nbr,gend+1,ifil(4),B,'One step ahead forecast',...
-        '',varlist,'tit_tex',M_.endo_names,...
+        '',varlist,M_.endo_names_tex,M_.endo_names,...
         varlist,'FilteredVariables',DirectoryName,'_filter_step_ahead');
 end
 
 if options_.forecast
     pm3(endo_nbr,horizon+maxlag,ifil(6),B,'Forecasted variables (mean)',...
-        '',varlist,'tit_tex',M_.endo_names,...
+        '',varlist,M_.endo_names_tex,M_.endo_names,...
         varlist,'MeanForecast',DirectoryName,'_forc_mean');
     pm3(endo_nbr,horizon+maxlag,ifil(6),B,'Forecasted variables (point)',...
-        '',varlist,'tit_tex',M_.endo_names,...
+        '',varlist,M_.endo_names_tex,M_.endo_names,...
         varlist,'PointForecast',DirectoryName,'_forc_point');
 end
 
diff --git a/matlab/prior_posterior_statistics_core.m b/matlab/prior_posterior_statistics_core.m
index 8a501d6d13bf8fb9ab1b40203cfbb4cfa20d11b8..f7eaa6f28ee2eb1d1e8cb06ec32d8ec9e6f7e980 100644
--- a/matlab/prior_posterior_statistics_core.m
+++ b/matlab/prior_posterior_statistics_core.m
@@ -140,7 +140,7 @@ if run_smoother
   end
 end
 if nvn
-  stock_error = NaN(endo_nbr,gend,MAX_nerro);
+  stock_error = NaN(size(varobs,1),gend,MAX_nerro);
 end
 if naK
     stock_filter_step_ahead =NaN(length(options_.filter_step_ahead),endo_nbr,gend+max(options_.filter_step_ahead),MAX_naK);
diff --git a/matlab/row_header_width.m b/matlab/row_header_width.m
index 2e07d57f5d2fa0f3e6f6f86f67694b4927eeeab5..92ef63d1e5f68bc573433791e5b53ee2517e1f0e 100644
--- a/matlab/row_header_width.m
+++ b/matlab/row_header_width.m
@@ -13,7 +13,7 @@ function w=row_header_width(M_,estim_params_,bayestopt_)
 % SPECIAL REQUIREMENTS
 %   None.
 
-% Copyright (C) 2006-2009 Dynare Team
+% Copyright (C) 2006-2013 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -64,7 +64,7 @@ if ncx
     end
 end
 if ncn
-    for i=1:nvn
+    for i=1:ncn
         k1 = estim_params_.corrn(i,1);
         k2 = estim_params_.corrn(i,2);
         w = max(w,length(deblank(M_.endo_names(k1,:)))...
diff --git a/matlab/set_all_parameters.m b/matlab/set_all_parameters.m
index a34fbd9fea3548613293ff78e834f76581a5271d..14815a3d9459234952bdb6ddddac13e6c017fa9b 100644
--- a/matlab/set_all_parameters.m
+++ b/matlab/set_all_parameters.m
@@ -71,9 +71,8 @@ offset = nvx;
 
 % setting measument error variance
 if nvn
-    var_endo = estim_params.var_endo;
     for i=1:nvn
-        k = var_endo(i,1);
+        k = estim_params.nvn_observable_correspondence(i,1);
         H(k,k) = xparam1(i+offset)^2;
     end
 end
@@ -83,7 +82,7 @@ offset = nvx+nvn;
 
 % setting shocks covariances
 if ~isempty(M.Correlation_matrix)
-    Sigma_e = diag(sqrt(diag(Sigma_e)))*M.Correlation_matrix*diag(sqrt(diag(Sigma_e)));
+    Sigma_e = diag(sqrt(diag(Sigma_e)))*M.Correlation_matrix*diag(sqrt(diag(Sigma_e))); % use of old correlation matrix is correct due to the diagonal structure and later only using the hence correctly updated diagonal entries of Sigma_e
 end
 if ncx
     corrx = estim_params.corrx;
@@ -100,11 +99,16 @@ end
 % update offset
 offset = nvx+nvn+ncx;
 % setting measurement error covariances
+if ~isempty(M.Correlation_matrix_ME)
+    H = diag(sqrt(diag(H)))*M.Correlation_matrix_ME*diag(sqrt(diag(H)));
+end
 if ncn
-    corrn = estim_params.corrn;
+    corrn_observable_correspondence = estim_params.corrn_observable_correspondence;
     for i=1:ncn
-        k1 = corr(i,1);
-        k2 = corr(i,2);
+        k1 = corrn_observable_correspondence(i,1);
+        k2 = corrn_observable_correspondence(i,2);
+        M.Correlation_matrix_ME(k1,k2) = xparam1(i+offset);
+        M.Correlation_matrix_ME(k2,k1) = M.Correlation_matrix_ME(k1,k2);
         H(k1,k2) = xparam1(i+offset)*sqrt(H(k1,k1)*H(k2,k2));
         H(k2,k1) = H(k1,k2);
     end
@@ -122,6 +126,6 @@ end
 if nvx || ncx
     M.Sigma_e = Sigma_e;
 end
-if nvn
+if nvn || ncn
     M.H = H;
 end
\ No newline at end of file
diff --git a/matlab/set_prior.m b/matlab/set_prior.m
index 841af744238440c3034aea1c7de78e9e6801506f..f82223ec853418e7aafe2e95d3616be6f50fe42d 100644
--- a/matlab/set_prior.m
+++ b/matlab/set_prior.m
@@ -18,7 +18,7 @@ function [xparam1, estim_params_, bayestopt_, lb, ub, M_]=set_prior(estim_params
 % SPECIAL REQUIREMENTS
 %    None
 
-% Copyright (C) 2003-2011 Dynare Team
+% Copyright (C) 2003-2013 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -41,11 +41,11 @@ ncx = size(estim_params_.corrx,1);
 ncn = size(estim_params_.corrn,1);
 np = size(estim_params_.param_vals,1);
 
-estim_params_.nvx = nvx;
-estim_params_.nvn = nvn;
-estim_params_.ncx = ncx;
-estim_params_.ncn = ncn;
-estim_params_.np = np;
+estim_params_.nvx = nvx; %exogenous shock variances
+estim_params_.nvn = nvn; %endogenous variances, i.e. measurement error
+estim_params_.ncx = ncx; %exogenous shock correlations
+estim_params_.ncn = ncn; % correlation between endogenous variables, i.e. measurement error.
+estim_params_.np = np;   % other parameters of the model
 
 xparam1 = [];
 ub = [];
@@ -74,6 +74,7 @@ if nvx
     bayestopt_.name = cellstr(M_.exo_names(estim_params_.var_exo(:,1),:));
 end
 if nvn
+    estim_params_.nvn_observable_correspondence=NaN(nvn,1); % stores number of corresponding observable
     if isequal(M_.H,0)
         nvarobs = size(options_.varobs,1);
         M_.H = zeros(nvarobs,nvarobs);
@@ -83,7 +84,7 @@ if nvn
         if isempty(obsi_)
             error(['The variable ' deblank(M_.endo_names(estim_params_.var_endo(i,1),:)) ' has to be declared as observable since you assume a measurement error on it.'])
         end
-        estim_params_.var_endo(i,1) = obsi_;
+        estim_params_.nvn_observable_correspondence(i,1)=obsi_;
     end
     xparam1 = [xparam1; estim_params_.var_endo(:,2)];
     ub = [ub; estim_params_.var_endo(:,4)]; 
@@ -94,7 +95,7 @@ if nvn
     bayestopt_.p3 = [ bayestopt_.p3; estim_params_.var_endo(:,8)];
     bayestopt_.p4 = [ bayestopt_.p4; estim_params_.var_endo(:,9)];
     bayestopt_.jscale = [ bayestopt_.jscale; estim_params_.var_endo(:,10)];
-    bayestopt_.name = [ bayestopt_.name; cellstr(options_.varobs(estim_params_.var_endo(:,1),:))];
+    bayestopt_.name = [ bayestopt_.name; cellstr(options_.varobs(estim_params_.nvn_observable_correspondence,:))];
 end
 if ncx
     xparam1 = [xparam1; estim_params_.corrx(:,3)];
@@ -111,6 +112,7 @@ if ncx
                         repmat(', ',ncx,1) , deblank(M_.exo_names(estim_params_.corrx(:,2),:))])];
 end
 if ncn
+    estim_params_.corrn_observable_correspondence=NaN(ncn,2);
     if isequal(M_.H,0)
         nvarobs = size(options_.varobs,1);
         M_.H = zeros(nvarobs,nvarobs);
@@ -125,8 +127,15 @@ if ncn
     bayestopt_.p4 = [ bayestopt_.p4; estim_params_.corrn(:,10)];
     bayestopt_.jscale = [ bayestopt_.jscale; estim_params_.corrn(:,11)];
     bayestopt_.name = [bayestopt_.name; cellstr([repmat('corr ',ncn,1) ...
-                        deblank(M_.exo_names(estim_params_.corrn(:,1),:)) ...
-                        repmat(', ',ncn,1) , deblank(M_.exo_names(estim_params_.corrn(:,2),:))])];
+                        deblank(M_.endo_names(estim_params_.corrn(:,1),:)) ...
+                        repmat(', ',ncn,1) , deblank(M_.endo_names(estim_params_.corrn(:,2),:))])];
+    for i=1:ncn
+        k1 = estim_params_.corrn(i,1);
+        k2 = estim_params_.corrn(i,2);
+        obsi1 = strmatch(deblank(M_.endo_names(k1,:)),deblank(options_.varobs),'exact'); %find correspondence to varobs to construct H in set_all_paramters
+        obsi2 = strmatch(deblank(M_.endo_names(k2,:)),deblank(options_.varobs),'exact');
+        estim_params_.corrn_observable_correspondence(i,:)=[obsi1,obsi2]; %save correspondence
+    end
 end
 if np
     xparam1 = [xparam1; estim_params_.param_vals(:,2)];
diff --git a/tests/measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod b/tests/measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod
new file mode 100644
index 0000000000000000000000000000000000000000..70477f2a29aebbab18755333fcd17b9c908d5155
--- /dev/null
+++ b/tests/measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod
@@ -0,0 +1,125 @@
+/*
+ * This file is based on the cash in advance model described
+ * Frank Schorfheide (2000): "Loss function-based evaluation of DSGE models",
+ * Journal of Applied Econometrics, 15(6), 645-670.
+ *
+ * The equations are taken from J. Nason and T. Cogley (1994): "Testing the
+ * implications of long-run neutrality for monetary business cycle models",
+ * Journal of Applied Econometrics, 9, S37-S70.
+ * Note that there is an initial minus sign missing in equation (A1), p. S63.
+ *
+ * This implementation was written by Michel Juillard. Please note that the
+ * following copyright notice only applies to this Dynare implementation of the
+ * model.
+ */
+
+/*
+ * Copyright (C) 2004-2013 Dynare Team
+ *
+ * This file is part of Dynare.
+ *
+ * Dynare is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dynare is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+var m P c e W R k d n l gy_obs gp_obs y dA;
+varexo e_a e_m;
+
+parameters alp bet gam mst rho psi del theta;
+
+alp = 0.33;
+bet = 0.99;
+gam = 0.003;
+mst = 1.011;
+rho = 0.7;
+psi = 0.787;
+del = 0.02;
+theta=0;
+
+model;
+dA = exp(gam+e_a);
+log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m;
+-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0;
+W = l/n;
+-(psi/(1-psi))*(c*P/(1-n))+l/n = 0;
+R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W;
+1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0;
+c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1);
+P*c = m;
+m-1+d = l;
+e = exp(e_a);
+y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a));
+gy_obs = dA*y/y(-1);
+gp_obs = (P/P(-1))*m(-1)/dA;
+end;
+
+initval;
+k = 6;
+m = mst;
+P = 2.25;
+c = 0.45;
+e = 1;
+W = 4;
+R = 1.02;
+d = 0.85;
+n = 0.19;
+l = 0.86;
+y = 0.6;
+gy_obs = exp(gam);
+gp_obs = exp(-gam);
+dA = exp(gam);
+end;
+
+varobs gp_obs gy_obs;
+
+shocks;
+var e_a; stderr 0.014;
+var e_m; stderr 0.005;
+corr gy_obs,gp_obs = 0.5;
+end;
+
+steady;
+
+
+estimated_params;
+alp, 0.356;
+gam,  0.0085;
+del, 0.01;
+stderr e_a, 0.035449;
+stderr e_m, 0.008862;
+corr e_m, e_a, 0;
+stderr gp_obs, 1;
+stderr gy_obs, 1;
+corr gp_obs, gy_obs,0;
+end;
+
+options_.TeX=1;
+estimation(mode_compute=9,order=1,datafile=fsdat_simul,mode_check,smoother,filter_decomposition,forecast = 8,filtered_vars,filter_step_ahead=[1,3],irf=20) m P c e W R k d y gy_obs;
+
+
+
+estimated_params;
+//alp, beta_pdf, 0.356, 0.02;
+gam, normal_pdf, 0.0085, 0.003;
+//del, beta_pdf, 0.01, 0.005;
+stderr e_a, inv_gamma_pdf, 0.035449, inf;
+stderr e_m, inv_gamma_pdf, 0.008862, inf;
+corr e_m, e_a, normal_pdf, 0, 0.2;
+stderr gp_obs, inv_gamma_pdf, 0.001, inf;
+//stderr gy_obs, inv_gamma_pdf, 0.001, inf;
+//corr gp_obs, gy_obs,normal_pdf, 0, 0.2;
+end;
+
+estimation(mode_compute=0,mode_file=fs2000_corr_ME_mh_mode,order=1,datafile=fsdat_simul,mode_check,smoother,filter_decomposition,mh_replic=2000, mh_nblocks=2, mh_jscale=0.8,forecast = 8,bayesian_irf,filtered_vars,filter_step_ahead=[1,3],irf=20) m P c e W R k d y;
+shock_decomposition y W R;
+//identification(advanced=1,max_dim_cova_group=3,prior_mc=250);