diff --git a/matlab/expand_group.m b/matlab/expand_group.m
index 4700de889162e3ddfa209217a5c9d89339e9ae6b..8011b471b9572b35e3db3bd2151174cac8f43383 100644
--- a/matlab/expand_group.m
+++ b/matlab/expand_group.m
@@ -51,6 +51,7 @@ for j=1:length(shocks)
     M.shock_groups.(options.plot_shock_decomp.use_shock_groups).(['group' int2str(j)]).label=shocks{j};
     M.shock_groups.(options.plot_shock_decomp.use_shock_groups).(['group' int2str(j)]).shocks=shocks(j);
 end
+M.exo_names = mydata.exo_names;
 
 options.plot_shock_decomp.interactive=0;
 options.plot_shock_decomp.expand=1;
diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m
index 2f24e17c7c07217fc7a04ebfefec20105e6e5d53..b0c865f130065a2c47b98d4c70a95cda13940f18 100644
--- a/matlab/graph_decomp.m
+++ b/matlab/graph_decomp.m
@@ -51,25 +51,6 @@ if ~isempty(opts_decomp.type)
     fig_mode = [fig_mode '_'];
 end
 
-if isfield(opts_decomp,'flip')
-    flip_decomp = opts_decomp.flip ;
-else
-    flip_decomp = 0;
-end
-if flip_decomp
-    fig_mode1 = [fig_mode1 '_flip'];
-    fig_mode = [fig_mode 'flip_'];
-end
-
-if isfield(opts_decomp,'diff')
-    differentiate_decomp = opts_decomp.diff ;
-else
-    differentiate_decomp = 0;
-end
-if differentiate_decomp
-    fig_mode1 = [fig_mode1 '_diff'];
-    fig_mode = [fig_mode 'diff_'];
-end
 if isfield(opts_decomp,'init_cond_decomp')
     init_cond_decomp = opts_decomp.init_cond_decomp ;
 else
@@ -232,8 +213,9 @@ for j=1:nvar
             mydata.first_obs = DynareOptions.first_obs;
             mydata.nobs = DynareOptions.nobs;
             mydata.plot_shock_decomp.zfull = DynareOptions.plot_shock_decomp.zfull(i_var(j),:,:);
-            mydata.endo_names = endo_names{i_var(j)};
-            mydata.endo_names_tex = DynareModel.endo_names_tex{i_var(j)};
+            mydata.endo_names = endo_names(i_var(j));
+            mydata.endo_names_tex = DynareModel.endo_names_tex(i_var(j));
+            mydata.exo_names = DynareModel.exo_names;
             if ~isempty(mydata.shock_group.shocks)
                 c = uicontextmenu;
                 hl.UIContextMenu=c;
@@ -266,8 +248,9 @@ for j=1:nvar
             fprintf(fidTeX,' \n');
         end
     else
-        dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
-        
+        if ~isempty(DynareOptions.plot_shock_decomp.filepath)
+            dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
+        end
     end
 end
 
diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m
index 59e1c45026e59be6108fb82f817ff631c1187422..7ff2be01b165534759cd5c7e21c946481366c90e 100644
--- a/matlab/graph_decomp_detail.m
+++ b/matlab/graph_decomp_detail.m
@@ -53,25 +53,7 @@ if ~isempty(opts_decomp.type)
     fig_mode1 = ['_' fig_mode];
     fig_mode = [fig_mode '_'];
 end
-if isfield(opts_decomp,'flip')
-    flip_decomp = opts_decomp.flip ;
-else
-    flip_decomp = 0;
-end
-if flip_decomp
-    fig_mode1 = [fig_mode1 '_flip'];
-    fig_mode = [fig_mode 'flip_'];
-end
 
-if isfield(opts_decomp,'diff')
-    differentiate_decomp = opts_decomp.diff ;
-else
-    differentiate_decomp = 0;
-end
-if differentiate_decomp
-    fig_mode1 = [fig_mode1 '_diff'];
-    fig_mode = [fig_mode 'diff_'];
-end
 if isfield(opts_decomp,'init_cond_decomp')
     init_cond_decomp = opts_decomp.init_cond_decomp ;
 else
@@ -232,8 +214,9 @@ for j=1:nvar
                 mydata.first_obs = DynareOptions.first_obs;
                 mydata.nobs = DynareOptions.nobs;
                 mydata.plot_shock_decomp.zfull = DynareOptions.plot_shock_decomp.zfull(i_var(j),:,:);
-                mydata.endo_names = endo_names{i_var(j)};
-                mydata.endo_names_tex = DynareModel.endo_names_tex{i_var(j)};
+                mydata.endo_names = endo_names(i_var(j));
+                mydata.endo_names_tex = DynareModel.endo_names_tex(i_var(j));
+                mydata.exo_names = DynareModel.exo_names;
                 if ~isempty(mydata.shock_group.shocks)
                     c = uicontextmenu;
                     hax.UIContextMenu=c;
@@ -289,8 +272,9 @@ for j=1:nvar
                 fprintf(fidTeX,' \n');
             end
         else
-            dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
-            
+            if ~isempty(DynareOptions.plot_shock_decomp.filepath)
+                dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
+            end    
         end
     end
 end
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..3033b2e229832d2d0845030cc30ef85f07c670a1 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,24 @@ switch realtime_
         end
 end
 
+
+if ~isempty(init2shocks) && ~expand
+    n=size(init2shocks,1);
+    M_.exo_names_init=M_.exo_names;
+    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');
+            M_.exo_names_init{jj}=[M_.exo_names_init{jj} ' + ' M_.endo_names{j}];
+            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
@@ -208,6 +236,7 @@ end
 if ~expand
     fig_name = fig_name1;
 end
+
 if options_.plot_shock_decomp.use_shock_groups
     fig_name=[fig_name ' group ' options_.plot_shock_decomp.use_shock_groups];
     if expand
@@ -228,10 +257,28 @@ if options_.plot_shock_decomp.use_shock_groups
         zfull = z;
         [z, shock_names, M_] = make_the_groups(z,gend,endo_nbr,nshocks,M_,options_);
     end
+    if ~isempty(init2shocks) && ~expand
+        M_.exo_names=M_.exo_names_init;
+    end
 else
+    if ~isempty(init2shocks) && ~expand
+        M_.exo_names=M_.exo_names_init;
+    end
     shock_names = M_.exo_names;
 end
 
+if ~expand
+    if flip_decomp
+        fig_name=[fig_name ' flip'];
+    end
+    if differentiate_decomp
+        fig_name=[fig_name ' diff'];
+    end
+    if ~isempty(init2shocks)
+        fig_name=[fig_name ' init2shocks'];
+    end
+end
+
 func = @(x) colorspace('RGB->Lab',x);
 MAP = distinguishable_colors(size(z,2)-1,'w',func);
 %         MAP = [MAP; MAP(end,:)];
@@ -390,6 +437,7 @@ options_.plot_shock_decomp.orig_varlist = varlist;
 if options_.plot_shock_decomp.interactive && ~isempty(options_.plot_shock_decomp.use_shock_groups)
     options_.plot_shock_decomp.zfull = zfull;
 end
+
 if detail_plot
     graph_decomp_detail(z, shock_names, M_.endo_names, i_var, my_initial_date, M_, options_)
 else
@@ -408,18 +456,30 @@ shock_groups = M_.shock_groups.(options_.plot_shock_decomp.use_shock_groups);
 shock_ind = fieldnames(shock_groups);
 ngroups = length(shock_ind);
 shock_names = shock_ind;
+shock_varexo = shock_ind;
 for i=1:ngroups
     shock_names{i} = (shock_groups.(shock_ind{i}).label);
+    if isfield(M_,'exo_names_init')
+        shock_varexo{i} = (shock_groups.(shock_ind{i}).shocks);
+    end
 end
 zz = zeros(endo_nbr,ngroups+2,gend);
 kcum=[];
 for i=1:ngroups
+    indx=0;
     for j = shock_groups.(shock_ind{i}).shocks
         k = find(strcmp(j,cellstr(M_.exo_names)));
+        if isfield(M_,'exo_names_init')
+            indx=indx+1;
+            shock_varexo{i}{indx} = M_.exo_names_init{k};
+        end
         zz(:,i,:) = zz(:,i,:) + z(:,k,:);
         z(:,k,:) = 0;
         kcum = [kcum k];
     end
+    if isfield(M_,'exo_names_init')
+        shock_groups.(shock_ind{i}).shocks = shock_varexo{i};
+    end
 end
 zothers = sum(z(:,1:nshocks,:),2);
 shock_groups.(['group' int2str(ngroups+1)]).label =  'Others';
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;
diff --git a/tests/shock_decomposition/ls2003_plot.mod b/tests/shock_decomposition/ls2003_plot.mod
index 895de40e9fd4bb9ab699a6f0e4ad214eccbec876..e07876b203fcfc0f16517928b9705008cdef03e5 100644
--- a/tests/shock_decomposition/ls2003_plot.mod
+++ b/tests/shock_decomposition/ls2003_plot.mod
@@ -76,46 +76,59 @@ supply = e_A ;
 'RoW shocks' = e_q e_ys e_pies  ;
 monetary = e_R ;
 end;
+
+init2shocks;
+dq e_q;
+A e_A;
+end;
+
 options_.initial_date=dates('1989Q4'); % date arbitrarily set for testing purposes
 shock_decomposition(use_shock_groups=trade) y_obs R_obs pie_obs dq de;
 
-// various tests for plot_shock_decompositions
-// standard plot [using trade group defined before]
-plot_shock_decomposition;
+// standard plot
+plot_shock_decomposition y_obs R_obs pie_obs dq de;
 
 // test datailed, custom name and yoy plots
-plot_shock_decomposition(detail_plot, fig_name = MR, type = yoy);
+plot_shock_decomposition(detail_plot, fig_name = MR, type = yoy) y_obs R_obs pie_obs dq de;
+
+// testing init2shocks
+initial_condition_decomposition(detail_plot, type=aoa, steadystate, write_xls, plot_init_date=1991Q1, plot_end_date=1995Q4, graph_format=fig) R_obs;
+plot_shock_decomposition(init2shocks) y_obs R_obs pie_obs dq de;
+plot_shock_decomposition(init2shocks,use_shock_groups=trade) y_obs R_obs pie_obs dq de;
 
+// testing flip and diff
+plot_shock_decomposition(diff, use_shock_groups=trade) y_obs;
+plot_shock_decomposition(flip, use_shock_groups=trade) de;
 
 close all,
 
 
 // testing realtime decomposition
 // first compute realtime decompositions [pre-processor not yet available]
-realtime_shock_decomposition(forecast=8, save_realtime=[5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77]);
+realtime_shock_decomposition(forecast=8, save_realtime=[5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77]) y_obs R_obs pie_obs dq de;
 
 //realtime pooled
-plot_shock_decomposition(realtime = 1);
+plot_shock_decomposition(realtime = 1) y_obs R_obs pie_obs dq de;
 
 //conditional pooled
-plot_shock_decomposition(realtime = 2);
+plot_shock_decomposition(realtime = 2) y_obs R_obs pie_obs dq de;
 
 // conditional 8-step ahead decomposition, given 1989q4
-plot_shock_decomposition(detail_plot, realtime = 2, vintage = 29);
+plot_shock_decomposition(detail_plot, realtime = 2, vintage = 29) y_obs R_obs pie_obs dq de;
 
 close all,
 
 //forecast pooled
-plot_shock_decomposition(realtime = 3);
+plot_shock_decomposition(realtime = 3) y_obs R_obs pie_obs dq de;
 
 // forecast 8-step ahead decomposition, given 1989q4
-plot_shock_decomposition(detail_plot, realtime = 3, vintage = 29);
+plot_shock_decomposition(detail_plot, realtime = 3, vintage = 29) y_obs R_obs pie_obs dq de;
 
 close all,
 
 // now I test annualized variables
-options_.plot_shock_decomp.q2a=1;
-options_.plot_shock_decomp.islog=1;
+// options_.plot_shock_decomp.q2a=1;
+// options_.plot_shock_decomp.islog=1;
 plot_shock_decomposition(detail_plot, type = aoa) y;
 
 plot_shock_decomposition(realtime = 1) y;
@@ -126,14 +139,14 @@ plot_shock_decomposition(realtime = 3, vintage = 29) y;
 close all
 
 //test uimenu for groups
-plot_shock_decomposition(detail_plot, interactive, use_shock_groups = row, type = qoq);
-plot_shock_decomposition(detail_plot, interactive, realtime = 3, vintage = 29);
+plot_shock_decomposition(detail_plot, interactive, use_shock_groups = row, type = qoq, plot_init_date=2004Q1) y_obs R_obs pie_obs dq de;
+plot_shock_decomposition(detail_plot, interactive, realtime = 3, vintage = 29) y_obs R_obs pie_obs dq de;
 
 close all,
 
 
 // testing realtime decomposition with fast_realtime option
-realtime_shock_decomposition(fast_realtime=75);
+realtime_shock_decomposition(fast_realtime=75) y_obs R_obs pie_obs dq de;
 
 collect_latex_files;
 if system(['pdflatex -halt-on-error -interaction=batchmode ' M_.fname '_TeX_binder.tex'])