diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m
index e8a2b72d9fcb1de9b56e280e8c7ba01861f4c536..f6164cab23a328a0034b2784d6f1d08661c4b025 100644
--- a/matlab/initial_condition_decomposition.m
+++ b/matlab/initial_condition_decomposition.m
@@ -43,6 +43,7 @@ options_.plot_shock_decomp.nodisplay = options_.initial_condition_decomp.nodispl
 options_.plot_shock_decomp.graph_format = options_.initial_condition_decomp.graph_format;
 options_.plot_shock_decomp.fig_name = options_.initial_condition_decomp.fig_name;
 options_.plot_shock_decomp.detail_plot = options_.initial_condition_decomp.detail_plot;
+options_.plot_shock_decomp.init2shocks = options_.initial_condition_decomp.init2shocks;
 options_.plot_shock_decomp.steadystate = options_.initial_condition_decomp.steadystate;
 options_.plot_shock_decomp.write_xls = options_.initial_condition_decomp.write_xls;
 options_.plot_shock_decomp.type = options_.initial_condition_decomp.type;
@@ -51,6 +52,11 @@ options_.plot_shock_decomp.plot_end_date = options_.initial_condition_decomp.plo
 options_.plot_shock_decomp.diff = options_.initial_condition_decomp.diff;
 options_.plot_shock_decomp.flip = options_.initial_condition_decomp.flip;
 
+if isfield(options_.initial_condition_decomp,'init2shocks') % private trap for uimenu calls
+    init2shocks=options_.initial_condition_decomp.init2shocks;
+else
+    init2shocks=[];
+end
 % indices of endogenous variables
 if isempty(varlist)
     varlist = M_.endo_names(1:M_.orig_endo_nbr);
@@ -129,6 +135,15 @@ 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;
@@ -137,4 +152,4 @@ 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
\ No newline at end of file
+% end
diff --git a/matlab/plot_shock_decomposition.m b/matlab/plot_shock_decomposition.m
index d649fc0615fc6ecfde4e425030ada53edc59869d..ce21cc61077275f75cfee962549dc0c11a52129f 100644
--- a/matlab/plot_shock_decomposition.m
+++ b/matlab/plot_shock_decomposition.m
@@ -36,6 +36,16 @@ if isempty(varlist)
     varlist = M_.endo_names(1:M_.orig_endo_nbr);
 end
 
+if isfield(options_.plot_shock_decomp,'init2shocks') % private trap for uimenu calls
+    init2shocks=options_.plot_shock_decomp.init2shocks;
+else
+    init2shocks=[];
+end
+if ~isempty(init2shocks)
+    init2shocks=M_.init2shocks.(init2shocks);
+end
+
+
 [i_var, ~, index_uniques] = varlist_indices(varlist, M_.endo_names);
 varlist = varlist(index_uniques);
 
@@ -151,6 +161,23 @@ switch realtime_
         end
 end
 
+
+if ~isempty(init2shocks) && ~expand
+    n=size(init2shocks,1);
+    for i=1:n
+        j=strmatch(init2shocks{i}{1},M_.endo_names,'exact');
+        if ~isempty(init2shocks{i}{2})
+            jj=strmatch(init2shocks{i}{2},M_.exo_names,'exact');
+            z(:,jj,:)= z(:,jj,:) + oo_.initval_decomposition (:,j,:);
+        else
+            z(:,end,:)= z(:,end,:) - oo_.initval_decomposition (:,j,:);
+        end
+        z(:,end-1,:)= z(:,end-1,:) - oo_.initval_decomposition (:,j,:);
+        
+    end    
+end    
+
+
 if isfield(oo_.dr,'ys')
     steady_state = oo_.dr.ys;
 else
diff --git a/matlab/set_default_initial_condition_decomposition_options.m b/matlab/set_default_initial_condition_decomposition_options.m
index 3294d969b41d4d4631814940c5cf9fe4efb793d5..58ecfff142d2f6c6d613d667964f0f5931b7a0b4 100644
--- a/matlab/set_default_initial_condition_decomposition_options.m
+++ b/matlab/set_default_initial_condition_decomposition_options.m
@@ -33,6 +33,7 @@ options.initial_condition_decomp.nodisplay = false;
 options.initial_condition_decomp.graph_format = 'eps';
 options.initial_condition_decomp.fig_name = '';
 options.initial_condition_decomp.detail_plot = false;
+options.initial_condition_decomp.init2shocks = [];
 options.initial_condition_decomp.steadystate = false;
 options.initial_condition_decomp.write_xls = false;
 options.initial_condition_decomp.type = '';
diff --git a/matlab/set_default_plot_shock_decomposition_options.m b/matlab/set_default_plot_shock_decomposition_options.m
index 5ffd23cb51668144e17c240de81d25e8fb5e1099..ecef090bf7a648d659cf505b3af32725291f29fd 100644
--- a/matlab/set_default_plot_shock_decomposition_options.m
+++ b/matlab/set_default_plot_shock_decomposition_options.m
@@ -33,6 +33,7 @@ options.plot_shock_decomp.colormap = '';
 options.plot_shock_decomp.nodisplay = false;
 options.plot_shock_decomp.graph_format = 'eps';
 options.plot_shock_decomp.detail_plot = false;
+options.plot_shock_decomp.init2shocks = [];
 options.plot_shock_decomp.interactive = false;
 options.plot_shock_decomp.screen_shocks = false;
 options.plot_shock_decomp.steadystate = false;