diff --git a/doc/gsa/gsa.tex b/doc/gsa/gsa.tex
index 3e9bcdbdf30a957000b82836b69736b6662b492f..04eb8f042d09d1d3e7162764594d58e8a862ed2b 100644
--- a/doc/gsa/gsa.tex
+++ b/doc/gsa/gsa.tex
@@ -167,9 +167,9 @@ out-of-sample validation. \vspace{0.5cm}
                             &   & of reduced form coefficients\\
                             &   & [\verb"max" \verb"max"] =  analyse filtered \\
                             &   & entries within the range [\verb"max" \verb"max"] \\
-       \verb"ksstat_redform"& 0.1& critical value for Smirnov statistics $d$ \\
+       \verb"ksstat_redform"& 0.001& p-value for Smirnov statistics $d$ \\
                             &   & when reduced form entries are filtered\\
-       \verb"alpha2_redform"& 0.3& critical value for correlation $\rho$ \\
+       \verb"alpha2_redform"& 0.001& p-value for correlation $\rho$ \\
                             &   & when reduced form entries are filtered\\
               \verb"namendo"& () & list of endogenous variables \\
                             & : & jolly character to indicate ALL endogenous \\
@@ -234,12 +234,11 @@ options of \verb"dynare_estimation". These are:
                             &    & filter the best 10\% for each observed series\\
           \verb"istart_rmse"& 1& start computing RMSE's from \verb"istart_rmse":\\
                             &  & use 2 to avoid big initial error \\
-           \verb"alpha_rmse"& 0.002& critical value for Smirnov statistics $d$:\\
-                            &   & plot parameters with $d>$\verb"alpha_rmse"\\
-          \verb"alpha2_rmse"& 1& critical value for correlation $\rho$\\
+           \verb"alpha_rmse"& 0.001& p-value for Smirnov statistics $d$:\\
+                            &   & plot parameters with $pvalue<$\verb"alpha_rmse"\\
+          \verb"alpha2_rmse"& 0.001& p-value for correlation $\rho$\\
                             &  & plot couples of parameters with
-                            $|\rho|>$\verb"alpha2_rmse"\\
-                 \verb"glue"& 0& prepare for GLUE graphical interface\\\hline
+                            $pvalue<$\verb"alpha2_rmse"\\
 \end{tabular}
 
 \subsection{Screening analysis}
diff --git a/matlab/dynare_sensitivity.m b/matlab/dynare_sensitivity.m
index 2b9542dd3dc1951bf77d1de2c12663acaa3f95f3..7aef12582fe3e1b88f37c24f98c9c652cb8c5223 100644
--- a/matlab/dynare_sensitivity.m
+++ b/matlab/dynare_sensitivity.m
@@ -57,6 +57,9 @@ if ~isempty(options_gsa.datafile) || isempty(bayestopt_),
     if isfield(options_gsa,'loglinear'),
         options_.loglinear=options_gsa.loglinear;
     end
+    if isfield(options_gsa,'lik_init'),
+        options_.lik_init=options_gsa.lik_init;
+    end
     options_.mode_compute = 0;
     options_.filtered_vars = 1;
     options_.plot_priors = 0;
@@ -121,8 +124,24 @@ options_gsa = set_default_option(options_gsa,'ksstat',0.1);
 options_gsa = set_default_option(options_gsa,'pvalue_ks',0.001);
 options_gsa = set_default_option(options_gsa,'pvalue_corr',0.001);
 %options_gsa = set_default_option(options_gsa,'load_mh',0);
+% REDFORM mapping
+options_gsa = set_default_option(options_gsa,'logtrans_redform',0);
+options_gsa = set_default_option(options_gsa,'threshold_redform',[]);
+options_gsa = set_default_option(options_gsa,'ksstat_redform',0.001);
+options_gsa = set_default_option(options_gsa,'alpha2_redform',0.001);
+options_gsa = set_default_option(options_gsa,'namendo',[]);
+options_gsa = set_default_option(options_gsa,'namlagendo',[]);
+options_gsa = set_default_option(options_gsa,'namexo',[]);
+% RMSE mapping
+options_gsa = set_default_option(options_gsa,'rmse',0);
+options_gsa = set_default_option(options_gsa,'lik_only',0);
+options_gsa = set_default_option(options_gsa,'var_rmse',options_.varobs);
+options_gsa = set_default_option(options_gsa,'pfilt_rmse',0.1);
+options_gsa = set_default_option(options_gsa,'istart_rmse',options_.presample+1);
+options_gsa = set_default_option(options_gsa,'alpha_rmse',0.001);
+options_gsa = set_default_option(options_gsa,'alpha2_rmse',0.001);
 
-if options_gsa.redform,
+if options_gsa.redform && options_gsa.neighborhood_width==0 && isempty(options_gsa.threshold_redform),
     options_gsa.pprior=1;
     options_gsa.ppost=0;
 end
@@ -145,6 +164,8 @@ if options_gsa.morris==1,
     options_gsa.load_rmse=0;
     options_gsa.alpha2_stab=1;
     options_gsa.ksstat=1;
+    options_gsa.pvalue_ks=0;
+    options_gsa.pvalue_corr=0;
 %     if options_gsa.morris==3,
 %         options_gsa = set_default_option(options_gsa,'Nsam',256);
 %         OutputDirectoryName = CheckPath('gsa/identif',M_.dname);
@@ -155,7 +176,7 @@ else
     OutputDirectoryName = CheckPath('gsa',M_.dname);
 end
 
-options_.opt_gsa = options_gsa;
+% options_.opt_gsa = options_gsa;
 
 if (options_gsa.load_stab || options_gsa.load_rmse || options_gsa.load_redform) ...
         && options_gsa.pprior,
@@ -187,22 +208,15 @@ if (options_gsa.load_stab || options_gsa.load_rmse || options_gsa.load_redform)
 end
 
 if options_gsa.stab && ~options_gsa.ppost,
-    x0 = stab_map_(OutputDirectoryName);
+    x0 = stab_map_(OutputDirectoryName,options_gsa);
 end
 
 % reduced form
 % redform_map(namendo, namlagendo, namexo, icomp, pprior, ilog, threshold)
-options_gsa = set_default_option(options_gsa,'logtrans_redform',0);
-options_gsa = set_default_option(options_gsa,'threshold_redform',[]);
-options_gsa = set_default_option(options_gsa,'ksstat_redform',0.1);
-options_gsa = set_default_option(options_gsa,'alpha2_redform',0.3);
-options_gsa = set_default_option(options_gsa,'namendo',[]);
-options_gsa = set_default_option(options_gsa,'namlagendo',[]);
-options_gsa = set_default_option(options_gsa,'namexo',[]);
 
 options_.opt_gsa = options_gsa;
 if options_gsa.identification,
-    map_ident_(OutputDirectoryName);
+    map_ident_(OutputDirectoryName,options_gsa);
 end
 
 if options_gsa.redform && ~isempty(options_gsa.namendo) ...
@@ -216,30 +230,24 @@ if options_gsa.redform && ~isempty(options_gsa.namendo) ...
     if strmatch(':',options_gsa.namlagendo,'exact'),
         options_gsa.namlagendo=M_.endo_names;
     end
-    options_.opt_gsa = options_gsa;
+%     options_.opt_gsa = options_gsa;
     if options_gsa.morris==1,
-        redform_screen(OutputDirectoryName);
+        redform_screen(OutputDirectoryName,options_gsa);
     else
         % check existence of the SS_ANOVA toolbox
-        if ~(exist('gsa_sdp','file')==6 || exist('gsa_sdp','file')==2),
+        if isempty(options_gsa.threshold_redform) && ...
+         ~(exist('gsa_sdp','file')==6 || exist('gsa_sdp','file')==2),
             disp('Download Mapping routines at:')
             disp('http://eemc.jrc.ec.europa.eu/softwareDYNARE-Dowload.htm')
             disp(' ' )
             error('Mapping routines missing!')
         end
 
-        redform_map(OutputDirectoryName);
+        redform_map(OutputDirectoryName,options_gsa);
     end
 end
 % RMSE mapping
 % function [rmse_MC, ixx] = filt_mc_(vvarvecm, loadSA, pfilt, alpha, alpha2)
-options_gsa = set_default_option(options_gsa,'rmse',0);
-options_gsa = set_default_option(options_gsa,'lik_only',0);
-options_gsa = set_default_option(options_gsa,'var_rmse',options_.varobs);
-options_gsa = set_default_option(options_gsa,'pfilt_rmse',0.1);
-options_gsa = set_default_option(options_gsa,'istart_rmse',options_.presample+1);
-options_gsa = set_default_option(options_gsa,'alpha_rmse',0.002);
-options_gsa = set_default_option(options_gsa,'alpha2_rmse',1);
 options_.opt_gsa = options_gsa;
 if options_gsa.rmse,
     if ~options_gsa.ppost
@@ -260,6 +268,12 @@ if options_gsa.rmse,
             end
         end
         if isempty(a),
+           if options_gsa.lik_only,
+               options_.smoother=0;
+               options_.filter_step_ahead=[];
+               options_.forecast=0;
+               options_.filtered_vars=0;               
+           end
 %             dynare_MC([],OutputDirectoryName,data,rawdata,data_info);
             prior_posterior_statistics('gsa',dataset_);
             if options_.bayesian_irf
@@ -284,8 +298,9 @@ if options_gsa.rmse,
     end
     clear a;
 %     filt_mc_(OutputDirectoryName,data_info);
-    filt_mc_(OutputDirectoryName);
+    filt_mc_(OutputDirectoryName,options_gsa);
 end
+options_.opt_gsa = options_gsa;
 
 
 if options_gsa.glue,
diff --git a/matlab/gsa/filt_mc_.m b/matlab/gsa/filt_mc_.m
index 82ecebb3be08632bb3698cfaf3fa5e7d464cc8ac..6cc14ce896d79c007ec753fe5fb93daaf3275905 100644
--- a/matlab/gsa/filt_mc_.m
+++ b/matlab/gsa/filt_mc_.m
@@ -1,4 +1,4 @@
-function [rmse_MC, ixx] = filt_mc_(OutDir,data_info)
+function [rmse_MC, ixx] = filt_mc_(OutDir,options_gsa_)
 % function [rmse_MC, ixx] = filt_mc_(OutDir)
 % inputs (from opt_gsa structure)
 % vvarvecm = options_gsa_.var_rmse;
@@ -35,13 +35,14 @@ function [rmse_MC, ixx] = filt_mc_(OutDir,data_info)
 
 global bayestopt_ estim_params_ M_ options_ oo_
 
-options_gsa_=options_.opt_gsa;
+% options_gsa_=options_.opt_gsa;
 vvarvecm = options_gsa_.var_rmse;
 loadSA   = options_gsa_.load_rmse;
 pfilt    = options_gsa_.pfilt_rmse;
 alpha    = options_gsa_.alpha_rmse;
-alpha2   = options_gsa_.alpha2_rmse;
-pvalue   = options_gsa_.pvalue_corr;
+% alpha2   = options_gsa_.alpha2_rmse;
+alpha2 = 0;
+pvalue   = options_gsa_.alpha2_rmse;
 istart   = options_gsa_.istart_rmse;
 alphaPC  = 0.5;
 
@@ -210,9 +211,9 @@ if ~loadSA,
         save([OutDir,filesep,fnamtmp,'.mat'], 'x', 'logpo2', 'likelihood', 'rmse_MC', 'rmse_mode','rmse_pmean')
     else
         if options_.opt_gsa.lik_only
-            save([OutDir,filesep,fnamtmp, '.mat'], 'likelihood', '-append')
+            save([OutDir,filesep,fnamtmp, '.mat'], 'x', 'logpo2','likelihood', '-append')
         else
-            save([OutDir,filesep,fnamtmp, '.mat'], 'likelihood', 'rmse_MC','-append')
+            save([OutDir,filesep,fnamtmp, '.mat'], 'x', 'logpo2','likelihood', 'rmse_MC','-append')
             if exist('xparam1_mean','var')
                 save([OutDir,filesep,fnamtmp, '.mat'], 'rmse_pmean','-append')
             end
@@ -222,7 +223,7 @@ if ~loadSA,
         end
     end
 else
-    if options_.opt_gsa.lik_only & options_.opt_gsa.ppost==0
+    if options_.opt_gsa.lik_only && options_.opt_gsa.ppost==0
         load([OutDir,filesep,fnamtmp, '.mat'],'x','logpo2','likelihood');
     else
         load([OutDir,filesep,fnamtmp, '.mat'],'x','logpo2','likelihood','rmse_MC','rmse_mode','rmse_pmean');
@@ -238,21 +239,21 @@ if ~options_.opt_gsa.ppost
     [dum, ipost]=sort(-logpo2);
     [dum, ilik]=sort(-likelihood);
 end
-if ~options_.opt_gsa.ppost & options_.opt_gsa.lik_only
+if ~options_.opt_gsa.ppost && options_.opt_gsa.lik_only
     if options_.opt_gsa.pprior
         anam='rmse_prior_post';
     else
         anam='rmse_mc_post';
     end
     stab_map_1(x, ipost(1:nfilt), ipost(nfilt+1:end), anam, 1,[],OutDir);
-    stab_map_2(x(ipost(1:nfilt),:),alpha2,anam, OutDir);
+    stab_map_2(x(ipost(1:nfilt),:),alpha2,pvalue,anam, OutDir);
     if options_.opt_gsa.pprior
         anam='rmse_prior_lik';
     else
         anam='rmse_mc_lik';
     end
     stab_map_1(x, ilik(1:nfilt), ilik(nfilt+1:end), anam, 1,[],OutDir);
-    stab_map_2(x(ilik(1:nfilt),:),alpha2,anam, OutDir);
+    stab_map_2(x(ilik(1:nfilt),:),alpha2,pvalue,anam, OutDir);
 else
     for i=1:size(vvarvecm,1),
         [dum, ixx(:,i)]=sort(rmse_MC(:,i));
@@ -260,7 +261,7 @@ else
             %nfilt0(i)=length(find(rmse_MC(:,i)<rmse_pmean(i)));
             rmse_txt=rmse_pmean;
         else
-            if options_.opt_gsa.pprior | ~exist('rmse_pmean'),
+            if options_.opt_gsa.pprior || ~exist('rmse_pmean'),
                 if exist('rmse_mode'),
                     rmse_txt=rmse_mode;
                 else
@@ -298,7 +299,7 @@ else
         h=cumplot(lnprior(ixx(nfilt0(i)+1:end,i)));
         set(h,'color','green')
         title(vvarvecm(i,:),'interpreter','none')
-        if mod(i,9)==0 | i==size(vvarvecm,1)
+        if mod(i,9)==0 || i==size(vvarvecm,1)
             if options_.opt_gsa.ppost
                 dyn_saveas(hh,[OutDir '/' fname_ '_rmse_post_lnprior',int2str(ifig)],options_);
             else
@@ -329,7 +330,7 @@ else
         if options_.opt_gsa.ppost==0,
             set(gca,'xlim',[min( likelihood(ixx(1:nfilt0(i),i)) ) max( likelihood(ixx(1:nfilt0(i),i)) )])
         end
-        if mod(i,9)==0 | i==size(vvarvecm,1)
+        if mod(i,9)==0 || i==size(vvarvecm,1)
             if options_.opt_gsa.ppost
                 dyn_saveas(hh,[OutDir '/' fname_ '_rmse_post_lnlik',int2str(ifig) ],options_);
             else
@@ -360,7 +361,7 @@ else
         if options_.opt_gsa.ppost==0,
             set(gca,'xlim',[min( logpo2(ixx(1:nfilt0(i),i)) ) max( logpo2(ixx(1:nfilt0(i),i)) )])
         end
-        if mod(i,9)==0 | i==size(vvarvecm,1)
+        if mod(i,9)==0 || i==size(vvarvecm,1)
             if options_.opt_gsa.ppost
                 dyn_saveas(hh,[OutDir '/' fname_ '_rmse_post_lnpost',int2str(ifig) ],options_);
             else
@@ -402,7 +403,7 @@ else
     rmse_MC=rmse_MC(:,ivar);
     
     disp(' ')
-    % if options_.opt_gsa.ppost==0 & options_.opt_gsa.pprior,
+    % if options_.opt_gsa.ppost==0 && options_.opt_gsa.pprior,
     disp(['Sample filtered the ',num2str(pfilt*100),'% best RMSE''s for each observed series ...' ])
     % else
     %   disp(['Sample filtered the best RMSE''s smaller than RMSE at the posterior mean ...' ])
@@ -414,7 +415,7 @@ else
     disp(' ')
     disp(' ')
     disp('RMSE ranges after filtering:')
-    if options_.opt_gsa.ppost==0 & options_.opt_gsa.pprior,
+    if options_.opt_gsa.ppost==0 && options_.opt_gsa.pprior,
         disp(['             best ',num2str(pfilt*100),'% filtered             remaining 90%'])
         disp(['             min            max            min            max            posterior mode'])
     else
@@ -478,13 +479,18 @@ else
             h0=cumplot(x(:,nsnam(j)));
             set(h0,'color',[0 0 0])
             hold on,
-            np=find(SP(nsnam(j),:));
+            npx=find(SP(nsnam(j),:)==0);
             %a0=jet(nsp(nsnam(j)));
-            a0=a00(np,:);
-            for i=1:nsp(nsnam(j)), %size(vvarvecm,1),
+%             a0=a00(np,:);
+            for i=1:size(vvarvecm,1),
                 %h0=cumplot(x(ixx(1:nfilt,np(i)),nsnam(j)+nshock));
-                h0=cumplot(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)));
-                set(h0,'color',a0(i,:))
+%                 h0=cumplot(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)));
+                if any(npx==i),
+                    h0=cumplot(x(ixx(1:nfilt0(i),i),nsnam(j))*NaN);
+                else
+                    h0=cumplot(x(ixx(1:nfilt0(i),i),nsnam(j)));
+            end
+                set(h0,'color',a00(i,:))
             end
             ydum=get(gca,'ylim');
             %xdum=xparam1(nshock+nsnam(j));
@@ -498,9 +504,9 @@ else
         end
         %subplot(3,2,6)
         if exist('OCTAVE_VERSION'),
-            legend(char('base',vvarvecm(np,:)),'location','eastoutside');
+            legend(char('base',vvarvecm),'location','eastoutside');
         else
-            h0=legend(char('base',vvarvecm(np,:)),0);
+            h0=legend(char('base',vvarvecm),0);
             set(h0,'fontsize',6,'position',[0.7 0.1 0.2 0.3],'interpreter','none');
         end
         %h0=legend({'base',vnam{np}}',0);
@@ -521,104 +527,6 @@ else
         nsx(j)=length(find(SP(:,j)));
     end
     
-    number_of_grid_points = 2^9;      % 2^9 = 512 !... Must be a power of two.
-    bandwidth = 0;                    % Rule of thumb optimal bandwidth parameter.
-    kernel_function = 'gaussian';     % Gaussian kernel for Fast Fourrier Transform approximaton.
-    %kernel_function = 'uniform';     % Gaussian kernel for Fast Fourrier Transform approximaton.
-    
-    for ix=1:ceil(length(nsnam)/5),
-        hh = dyn_figure(options_);
-        for j=1+5*(ix-1):min(size(snam2,1),5*ix),
-            subplot(2,3,j-5*(ix-1))
-            optimal_bandwidth = mh_optimal_bandwidth(x(:,nsnam(j)),size(x,1),bandwidth,kernel_function);
-            [x1,f1] = kernel_density_estimate(x(:,nsnam(j)),number_of_grid_points,...
-                size(x,1),optimal_bandwidth,kernel_function);
-            h0 = plot(x1, f1,'k');
-            hold on,
-            np=find(SP(nsnam(j),:));
-            %a0=jet(nsp(nsnam(j)));
-            a0=a00(np,:);
-            for i=1:nsp(nsnam(j)), %size(vvarvecm,1),
-                optimal_bandwidth = mh_optimal_bandwidth(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)),nfilt,bandwidth,kernel_function);
-                [x1,f1] = kernel_density_estimate(x(ixx(1:nfilt0(np(i)),np(i)),nsnam(j)),number_of_grid_points,...
-                    nfilt, optimal_bandwidth,kernel_function);
-                h0 = plot(x1, f1);
-                set(h0,'color',a0(i,:))
-            end
-            ydum=get(gca,'ylim');
-            set(gca,'ylim',[0 ydum(2)]);
-            if exist('xparam1')
-                %xdum=xparam1(nshock+nsnam(j));
-                xdum=xparam1(nsnam(j));
-                h1=plot([xdum xdum],[0 ydum(2)]);
-                set(h1,'color',[0.85 0.85 0.85],'linewidth',2)
-            end
-            xlabel('')
-            title([pnam{nsnam(j)}],'interpreter','none')
-        end
-        if exist('OCTAVE_VERSION'),
-            legend(char('base',vvarvecm(np,:)),'location','eastoutside');
-        else
-            h0=legend(char('base',vvarvecm(np,:)),0);
-            set(h0,'fontsize',6,'position',[0.7 0.1 0.2 0.3],'interpreter','none')
-        end
-        %h0=legend({'base',vnam{np}}',0);
-        %set(findobj(get(h0,'children'),'type','text'),'interpreter','none')
-        if options_.opt_gsa.ppost
-            dyn_saveas(hh,[ OutDir '/' fname_ '_rmse_post_dens_' int2str(ix) ],options_);
-        else
-            if options_.opt_gsa.pprior
-                dyn_saveas(hh,[OutDir '/' fname_ '_rmse_prior_dens_' int2str(ix)],options_);
-            else
-                dyn_saveas(hh,[OutDir '/' fname_ '_rmse_mc_dens_' int2str(ix) ],options_);
-            end
-        end
-    end
-    close all
-    % for j=1:size(SP,2),
-    %     nfig=0;
-    %     np=find(SP(:,j));
-    %     for i=1:nsx(j), %size(vvarvecm,1),
-    %         if mod(i,12)==1,
-    %             nfig=nfig+1;
-    %             %figure('name',['Sensitivity of fit of ',vnam{j}]),
-    %             figure('name',['Sensitivity of fit of ',deblank(vvarvecm(j,:)),' ',num2str(nfig)]),
-    %         end
-    %
-    %         subplot(3,4,i-12*(nfig-1))
-    %         optimal_bandwidth = mh_optimal_bandwidth(x(ixx(1:nfilt,j),np(i)),nfilt,bandwidth,kernel_function);
-    %         [x1,f1] = kernel_density_estimate(x(ixx(1:nfilt,j),np(i)),number_of_grid_points,...
-    %             nfilt, optimal_bandwidth,kernel_function);
-    %         plot(x1, f1,':k','linewidth',2)
-    %         optimal_bandwidth = mh_optimal_bandwidth(x(ixx(nfilt+1:end,j),np(i)),nruns-nfilt,bandwidth,kernel_function);
-    %         [x1,f1] = kernel_density_estimate(x(ixx(nfilt+1:end,j),np(i)),number_of_grid_points,...
-    %             nruns-nfilt,optimal_bandwidth,kernel_function);
-    %         hold on, plot(x1, f1,'k','linewidth',2)
-    %         ydum=get(gca,'ylim');
-    %         %xdum=xparam1(nshock+np(i));
-    %         xdum=xparam1(np(i));
-    %         h1=plot([xdum xdum],ydum);
-    %         set(h1,'color',[0.85 0.85 0.85],'linewidth',2)
-    %         %xdum1=mean(x(ixx(1:nfilt,j),np(i)+nshock));
-    %         xdum1=mean(x(ixx(1:nfilt,j),np(i)));
-    %         h2=plot([xdum1 xdum1],ydum);
-    %         set(h2,'color',[0 1 0],'linewidth',2)
-    %         %         h0=cumplot(x(nfilt+1:end,np(i)+nshock));
-    %         %         set(h0,'color',[1 1 1])
-    %         %         hold on,
-    %         %         h0=cumplot(x(ixx(1:nfilt,j),np(i)+nshock));
-    %         %         set(h0,'linestyle',':','color',[1 1 1])
-    %         %title([pnam{np(i)}])
-    %         title([pnam{np(i)},'. K-S prob ', num2str(PP(np(i),j))],'interpreter','none')
-    %         xlabel('')
-    %         if mod(i,12)==0 | i==nsx(j),
-    %             saveas(gcf,[fname_,'_rmse_',deblank(vvarvecm(j,:)),'_',int2str(nfig)])
-    %             close(gcf)
-    %         end
-    %     end
-    % end
-    
-    
     disp(' ')
     disp(' ')
     disp('Sensitivity table (significance and direction):')
diff --git a/matlab/gsa/map_ident_.m b/matlab/gsa/map_ident_.m
index e3e6b25d7ce787eaf7ab6657fc9a1262733a09d5..452d091d7e8f67c508b72e0306d7792aae6aa2bd 100644
--- a/matlab/gsa/map_ident_.m
+++ b/matlab/gsa/map_ident_.m
@@ -1,4 +1,4 @@
-function map_ident_(OutputDirectoryName)
+function map_ident_(OutputDirectoryName,opt_gsa)
 
 % Copyright (C) 2012 Dynare Team
 %
@@ -19,7 +19,7 @@ function map_ident_(OutputDirectoryName)
 
 global bayestopt_ M_ options_ estim_params_ oo_
 
-opt_gsa = options_.opt_gsa;
+% opt_gsa = options_.opt_gsa;
 fname_ = M_.fname;
 nliv   = opt_gsa.morris_nliv;
 ntra   = opt_gsa.morris_ntra;
diff --git a/matlab/gsa/redform_map.m b/matlab/gsa/redform_map.m
index 2c49e940f2e0206e611f1fb6d358c4c2ca95ea53..8fed92d98f312bc84792d51f86628607c3249d4f 100644
--- a/matlab/gsa/redform_map.m
+++ b/matlab/gsa/redform_map.m
@@ -1,4 +1,4 @@
-function redform_map(dirname)
+function redform_map(dirname,options_gsa_)
 %function redform_map(dirname)
 % inputs (from opt_gsa structure
 % anamendo    = options_gsa_.namendo;
@@ -39,7 +39,7 @@ function redform_map(dirname)
 
 global M_ oo_ estim_params_ options_ bayestopt_
 
-options_gsa_ = options_.opt_gsa;
+% options_gsa_ = options_.opt_gsa;
 
 anamendo = options_gsa_.namendo;
 anamlagendo = options_gsa_.namlagendo;
@@ -48,8 +48,11 @@ iload = options_gsa_.load_redform;
 pprior = options_gsa_.pprior;
 ilog = options_gsa_.logtrans_redform;
 threshold = options_gsa_.threshold_redform;
-ksstat = options_gsa_.ksstat_redform;
+% ksstat = options_gsa_.ksstat_redform;
 alpha2 = options_gsa_.alpha2_redform;
+alpha2=0;
+pvalue_ks = options_gsa_.ksstat_redform;
+pvalue_corr = options_gsa_.alpha2_redform;
 
 pnames = M_.param_names(estim_params_.param_vals(:,1),:);
 if nargin==0,
@@ -57,14 +60,14 @@ if nargin==0,
 end
 
 if pprior
-  load([dirname,'/',M_.fname,'_prior']);
+  load([dirname,'/',M_.fname,'_prior'],'lpmat', 'lpmat0', 'istable','T');
   adir=[dirname '/redform_stab'];
 else
-  load([dirname,'/',M_.fname,'_mc']);
+  load([dirname,'/',M_.fname,'_mc'],'lpmat', 'lpmat0', 'istable','T');
   adir=[dirname '/redform_mc'];
 end
 if ~exist('T')
-  stab_map_(dirname);
+  stab_map_(dirname,options_gsa_);
 if pprior
   load([dirname,'/',M_.fname,'_prior'],'T');
 else
@@ -79,6 +82,7 @@ adir0=pwd;
 
 nspred=size(T,2)-M_.exo_nbr;
 x0=lpmat(istable,:);
+xx0=lpmat0(istable,:);
 [kn, np]=size(x0);
 offset = length(bayestopt_.pshape)-np;
 if options_gsa_.prior_range,
@@ -90,7 +94,7 @@ else
 end
 
 nsok = length(find(M_.lead_lag_incidence(M_.maximum_lag,:)));
-clear lpmat lpmat0 egg iunstable yys
+clear lpmat lpmat0 
 js=0;
 for j=1:size(anamendo,1)
   namendo=deblank(anamendo(j,:));
@@ -105,7 +109,7 @@ for j=1:size(anamendo,1)
       %y0=squeeze(T(iendo,iexo+nspred,istable));
       y0=squeeze(T(iendo,iexo+nspred,:));
       if (max(y0)-min(y0))>1.e-10,
-        if mod(iplo,9)==0,
+        if mod(iplo,9)==0 && isempty(threshold),
           ifig=ifig+1;
           hfig = dyn_figure(options_,'name',[namendo,' vs. shocks ',int2str(ifig)]);
           iplo=0;
@@ -115,28 +119,46 @@ for j=1:size(anamendo,1)
         xdir0 = [adir,'/',namendo,'_vs_', namexo];
         if ilog==0,
           if isempty(threshold)
-            si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namexo, xdir0);
+            if isempty(dir(xdir0))
+                mkdir(xdir0)
+            end
+            si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namexo, xdir0, options_gsa_);
           else
             iy=find( (y0>threshold(1)) & (y0<threshold(2)));
             iyc=find( (y0<=threshold(1)) | (y0>=threshold(2)));
             xdir = [xdir0,'_cut'];
-            if ~isempty(iy),
-              si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namexo, xdir);
+            if isempty(dir(xdir))
+                mkdir(xdir)
             end
-            if ~isempty(iy) & ~isempty(iyc)
+%             if ~isempty(iy),
+%               si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namexo, xdir, options_gsa_);
+%             else
+              si(:,js) = NaN(np,1);
+%             end
+            if ~isempty(iy) && ~isempty(iyc)
             delete([xdir, '/*cut*.*'])
             [proba, dproba] = stab_map_1(x0, iy, iyc, 'cut',0);
-            indsmirnov = find(dproba>ksstat);
+%             indsmirnov = find(dproba>ksstat);
+            indsmirnov = find(proba<pvalue_ks);
             stab_map_1(x0, iy, iyc, 'cut',1,indsmirnov,xdir);
-            stab_map_2(x0(iy,:),alpha2,'cut',xdir)
-            stab_map_2(x0(iyc,:),alpha2,'trim',xdir)
+            stab_map_2(x0(iy,:),alpha2,pvalue_corr,'cut',xdir)
+            stab_map_2(x0(iyc,:),alpha2,pvalue_corr,'trim',xdir)
+            lpmat=x0(iy,:);
+            lpmat0=xx0(iy,:);
+            istable=[1:length(iy)];
+            save([xdir,filesep,'threshold.mat'],'lpmat','lpmat0','istable')
+            clear lpmat lpmat0 istable
             end
           end
         else
           [yy, xdir] = log_trans_(y0,xdir0);
-          silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namexo, xdir);
+          if isempty(dir(xdir))
+              mkdir(xdir)
+          end
+          silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namexo, xdir, options_gsa_);
         end
 
+        if isempty(threshold)
         figure(hfig)
         subplot(3,3,iplo),
         if ilog,
@@ -161,11 +183,12 @@ for j=1:size(anamendo,1)
             close(hfig);
           end
         end
+        end
       
       end
     end
   end
-  if iplo<9 & iplo>0 & ifig,
+  if iplo<9 && iplo>0 && ifig,
     dyn_saveas(hfig,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],options_);
     if ~options_.nodisplay
         close(hfig);
@@ -181,7 +204,7 @@ for j=1:size(anamendo,1)
       %y0=squeeze(T(iendo,ilagendo,istable));
       y0=squeeze(T(iendo,ilagendo,:));
       if (max(y0)-min(y0))>1.e-10,
-        if mod(iplo,9)==0,
+        if mod(iplo,9)==0 && isempty(threshold),
           ifig=ifig+1;
           hfig = dyn_figure(options_,'name',[namendo,' vs. lags ',int2str(ifig)]);
           iplo=0;
@@ -191,28 +214,45 @@ for j=1:size(anamendo,1)
         xdir0 = [adir,'/',namendo,'_vs_', namlagendo];
         if ilog==0,
         if isempty(threshold)
-          si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namlagendo, xdir0);
+          if isempty(dir(xdir0))
+              mkdir(xdir0)
+          end
+          si(:,js) = redform_private(x0, y0, pshape, pd, iload, pnames, namendo, namlagendo, xdir0, options_gsa_);
         else
           iy=find( (y0>threshold(1)) & (y0<threshold(2)));
           iyc=find( (y0<=threshold(1)) | (y0>=threshold(2)));
           xdir = [xdir0,'_cut'];
-          if ~isempty(iy)
-          si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namlagendo, xdir);
+          if isempty(dir(xdir))
+              mkdir(xdir)
           end
-          if ~isempty(iy) & ~isempty(iyc),
+%           if ~isempty(iy)
+%           si(:,js) = redform_private(x0(iy,:), y0(iy), pshape, pd, iload, pnames, namendo, namlagendo, xdir, options_gsa_);
+%           end
+          if ~isempty(iy) && ~isempty(iyc),
           delete([xdir, '/*cut*.*'])
           [proba, dproba] = stab_map_1(x0, iy, iyc, 'cut',0);
-          indsmirnov = find(dproba>ksstat);
+%           indsmirnov = find(dproba>ksstat);
+          indsmirnov = find(proba<pvalue_ks);
           stab_map_1(x0, iy, iyc, 'cut',1,indsmirnov,xdir);
-          stab_map_2(x0(iy,:),alpha2,'cut',xdir)
-          stab_map_2(x0(iyc,:),alpha2,'trim',xdir)
+          stab_map_2(x0(iy,:),alpha2,pvalue_corr,'cut',xdir)
+          stab_map_2(x0(iyc,:),alpha2,pvalue_corr,'trim',xdir)
+          lpmat=x0(iy,:);
+          lpmat0=xx0(iy,:);
+          istable=[1:length(iy)];
+          save([xdir,filesep,'threshold.mat'],'lpmat','lpmat0','istable')
+          clear lpmat lpmat0 istable
+
           end
         end
         else
           [yy, xdir] = log_trans_(y0,xdir0);
-          silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namlagendo, xdir);
+          if isempty(dir(xdir))
+              mkdir(xdir)
+          end
+          silog(:,js) = redform_private(x0, yy, pshape, pd, iload, pnames, namendo, namlagendo, xdir, options_gsa_);
         end
 
+        if isempty(threshold)
         figure(hfig),
         subplot(3,3,iplo),
         if ilog,
@@ -237,11 +277,12 @@ for j=1:size(anamendo,1)
                 close(hfig);
             end
         end
+        end
       
       end
     end
   end
-  if iplo<9 & iplo>0 & ifig,
+  if iplo<9 && iplo>0 && ifig,
     dyn_saveas(hfig,[dirname,'/',M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)],options_);  
     if ~options_.nodisplay
       close(hfig);
@@ -249,6 +290,7 @@ for j=1:size(anamendo,1)
   end
 end
 
+if isempty(threshold),
 if ilog==0,
 hfig=dyn_figure(options_); %bar(si)
 % boxplot(si','whis',10,'symbol','r.')
@@ -280,10 +322,12 @@ title('Reduced form GSA - Log-transformed elements')
 dyn_saveas(hfig,[dirname,'/',M_.fname,'_redform_gsa_log'],options_);
 
 end
-function si  = redform_private(x0, y0, pshape, pd, iload, pnames, namy, namx, xdir)
+end
+
+function si  = redform_private(x0, y0, pshape, pd, iload, pnames, namy, namx, xdir, opt_gsa)
 global bayestopt_ options_
 
-opt_gsa=options_.opt_gsa;
+% opt_gsa=options_.opt_gsa;
 np=size(x0,2);
 x00=x0;
   if opt_gsa.prior_range,
@@ -319,9 +363,6 @@ if iload==0,
   hfig=gsa_sdp_plot(gsa_,fname,pnames,iii(1:min(12,np)));
   close(hfig);
   gsa_.x0=x0(1:nfit,:);
-  if ~options_.nodisplay
-    close(hfig);
-  end
 %   copyfile([fname,'_est.mat'],[fname,'.mat'])
   hfig=dyn_figure(options_); 
   plot(y0(1:nfit),[gsa_.fit y0(1:nfit)],'.'), 
diff --git a/matlab/gsa/redform_screen.m b/matlab/gsa/redform_screen.m
index 5be8a871eb70bc97140364f03c413c5bbe3dec45..0df22054621fc71dced1a8a37195fe1db3680eb3 100644
--- a/matlab/gsa/redform_screen.m
+++ b/matlab/gsa/redform_screen.m
@@ -1,5 +1,5 @@
-function redform_screen(dirname)
-%function redform_map(dirname)
+function redform_screen(dirname, options_gsa_)
+%function redform_map(dirname, options_gsa_)
 % inputs (from opt_gsa structure
 % anamendo    = options_gsa_.namendo;
 % anamlagendo = options_gsa_.namlagendo;
@@ -33,7 +33,7 @@ function redform_screen(dirname)
 
 global M_ oo_ estim_params_ options_ bayestopt_
 
-options_gsa_ = options_.opt_gsa;
+% options_gsa_ = options_.opt_gsa;
 
 anamendo = options_gsa_.namendo;
 anamlagendo = options_gsa_.namlagendo;
diff --git a/matlab/gsa/stab_map_.m b/matlab/gsa/stab_map_.m
index d042127c59672a0ac6f3f48ef4ad16f666fa6603..dc0f369ee5c64c0b807bbec49afff5c72ec94ba5 100644
--- a/matlab/gsa/stab_map_.m
+++ b/matlab/gsa/stab_map_.m
@@ -1,4 +1,4 @@
-function x0 = stab_map_(OutputDirectoryName)
+function x0 = stab_map_(OutputDirectoryName,opt_gsa)
 %
 % function x0 = stab_map_(OutputDirectoryName)
 %
@@ -58,7 +58,7 @@ function x0 = stab_map_(OutputDirectoryName)
 %global bayestopt_ estim_params_ dr_ options_ ys_ fname_
 global bayestopt_ estim_params_ options_ oo_ M_
 
-opt_gsa=options_.opt_gsa;
+% opt_gsa=options_.opt_gsa;
 
 Nsam   = opt_gsa.Nsam;
 fload  = opt_gsa.load_stab;
@@ -568,6 +568,8 @@ else
 
 end
 
+xparam1=x0;
+save prior_ok xparam1;
 
 options_.periods=opt.periods;
 if isfield(opt,'nomoments'),
diff --git a/matlab/gsa/stab_map_2.m b/matlab/gsa/stab_map_2.m
index a1a72c790760bb06dd6f3551bac32010faf26eef..aecfabf81e00c5daea1dd25b85f70a770e5c5426 100644
--- a/matlab/gsa/stab_map_2.m
+++ b/matlab/gsa/stab_map_2.m
@@ -1,5 +1,5 @@
 function stab_map_2(x,alpha2, pvalue, fnam, dirname,xparam1)
-% function stab_map_2(x, alpha2, pvalue, fnam, dirname)
+% function stab_map_2(x, alpha2, pvalue, fnam, dirname,xparam1)
 %
 % Written by Marco Ratto
 % Joint Research Centre, The European Commission,
@@ -108,10 +108,13 @@ for j=1:npar,
   end
   if (j==(npar)) && j2>0,
     dyn_saveas(hh,[dirname,'/',fig_nam_,int2str(ifig)],options_);
+    if ~options_.nodisplay
+        close(hh);
+    end
   end
   
 end
 if ifig==0,
-  disp(['No correlation term >', num2str(alpha2),' found for ',fnam])
+    disp(['No correlation term with pvalue <', num2str(pvalue),' found for ',fnam])
 end
 %close all
diff --git a/matlab/gsa/tcrit.m b/matlab/gsa/tcrit.m
index f401ecabe60d47bc0900f0c733efc322ab703a07..2efd947e646d58c355952ba05f46dc9bfd8c33f5 100644
--- a/matlab/gsa/tcrit.m
+++ b/matlab/gsa/tcrit.m
@@ -30,6 +30,14 @@ function t_crit = tcrit(n,pval0)
 if nargin==1 || isempty(pval0),
     pval0=0.05;
 end
+if pval0==1,
+    t_crit=0;
+    return,
+end
+if pval0==0,
+    t_crit=inf;
+    return,
+end
 pval = [  0.10    0.05   0.025    0.01   0.005   0.001];
 pval0=max(pval0,min(pval));
 ncol=min(find(pval<=pval0))+1;