diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m
index f6164cab23a328a0034b2784d6f1d08661c4b025..091ba2019e2cee73abdf5ad24c622a6704eaf42d 100644
--- a/matlab/initial_condition_decomposition.m
+++ b/matlab/initial_condition_decomposition.m
@@ -62,8 +62,10 @@ if isempty(varlist)
     varlist = M_.endo_names(1:M_.orig_endo_nbr);
 end
 
-[i_var, nvar, index_uniques] = varlist_indices(varlist, M_.endo_names);
-varlist = varlist(index_uniques);
+if ~isequal(varlist,0)
+    [i_var, nvar, index_uniques] = varlist_indices(varlist, M_.endo_names);
+    varlist = varlist(index_uniques);
+end
 
 % number of variables
 endo_nbr = M_.endo_nbr;
@@ -83,7 +85,7 @@ if isempty(parameter_set)
     end
 end
 
-if ~isfield(oo_,'initval_decomposition')
+if ~isfield(oo_,'initval_decomposition') || isequal(varlist,0)
     options_.selected_variables_only = 0; %make sure all variables are stored
     options_.plot_priors=0;
     [oo,M,~,~,Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
@@ -129,27 +131,30 @@ if ~isfield(oo_,'initval_decomposition')
 
     end
 
-
     oo_.initval_decomposition = z;
 end
-% if ~options_.no_graph.shock_decomposition
-oo=oo_;
-oo.shock_decomposition = oo_.initval_decomposition;
-if ~isempty(init2shocks)
-    init2shocks = M_.init2shocks.(init2shocks);
-    n=size(init2shocks,1);
-    for i=1:n
-        j=strmatch(init2shocks{i}{1},M_.endo_names,'exact');
-        oo.shock_decomposition(:,end-1,:)=oo.shock_decomposition(:,j,:)+oo.shock_decomposition(:,end-1,:);
-        oo.shock_decomposition(:,j,:)=0;
-    end    
-end    
-M_.exo_names = M_.endo_names;
-M_.exo_nbr = M_.endo_nbr;
-options_.plot_shock_decomp.realtime=0;
-options_.plot_shock_decomp.screen_shocks=1;
-options_.plot_shock_decomp.use_shock_groups = '';
-options_.plot_shock_decomp.init_cond_decomp = 1; % private flag to plotting utilities
-
-plot_shock_decomposition(M_,oo,options_,varlist);
-% end
+
+% when varlist==0, we only store results in oo_ and do not make any plot
+if ~isequal(varlist,0)
+    
+    % if ~options_.no_graph.shock_decomposition
+    oo=oo_;
+    oo.shock_decomposition = oo_.initval_decomposition;
+    if ~isempty(init2shocks)
+        init2shocks = M_.init2shocks.(init2shocks);
+        n=size(init2shocks,1);
+        for i=1:n
+            j=strmatch(init2shocks{i}{1},M_.endo_names,'exact');
+            oo.shock_decomposition(:,end-1,:)=oo.shock_decomposition(:,j,:)+oo.shock_decomposition(:,end-1,:);
+            oo.shock_decomposition(:,j,:)=0;
+        end
+    end
+    M_.exo_names = M_.endo_names;
+    M_.exo_nbr = M_.endo_nbr;
+    options_.plot_shock_decomp.realtime=0;
+    options_.plot_shock_decomp.screen_shocks=1;
+    options_.plot_shock_decomp.use_shock_groups = '';
+    options_.plot_shock_decomp.init_cond_decomp = 1; % private flag to plotting utilities
+    
+    plot_shock_decomposition(M_,oo,options_,varlist);
+end