diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m
index c9572a0363e2cbb0631932747708d93b3750daaf..97d3b245c8688851a8168c9ddc125812ce211243 100644
--- a/matlab/graph_decomp.m
+++ b/matlab/graph_decomp.m
@@ -1,4 +1,4 @@
-function []=graph_decomp(z,shock_names,endo_names,i_var,initial_date)
+function []=graph_decomp(z,shock_names,endo_names,i_var,initial_date,DynareModel,DynareOptions)
 %function []=graph_decomp(z,varlist,initial_period,freq)
 
 % Copyright (C) 2010-2011 Dynare Team
@@ -39,7 +39,7 @@ for j=1:nvar
     if ymax-ymin < 1e-6
         continue
     end
-    figure('Name',endo_names(i_var(j),:));
+    fhandle = dyn_figure(DynareOptions,'Name',endo_names(i_var(j),:));
     ax=axes('Position',[0.1 0.1 0.6 0.8]);
     axis(ax,[xmin xmax ymin ymax]);
     plot(ax,x(2:end),z1(end,:),'k-','LineWidth',2)
@@ -48,7 +48,7 @@ for j=1:nvar
         i_1 = i-1;
         yp = 0;
         ym = 0;
-        for k = 1:comp_nbr 
+        for k = 1:comp_nbr
             zz = z1(k,i);
             if zz > 0
                 fill([x(i) x(i) x(i+1) x(i+1)],[yp yp+zz yp+zz yp],k);
@@ -70,7 +70,7 @@ for j=1:nvar
     y1 = 0;
     height = 1/comp_nbr;
     labels = char(shock_names,'Initial values');
-    
+
     for i=1:comp_nbr
         fill([0 0 0.2 0.2],[y1 y1+0.7*height y1+0.7*height y1],i);
         hold on
@@ -78,5 +78,7 @@ for j=1:nvar
         hold on
         y1 = y1 + height;
     end
+
+    dyn_saveas(fhandle,[DynareModel.fname '_shock_decomposition_' endo_names(i_var(j),:)],DynareOptions);
     hold off
 end
\ No newline at end of file
diff --git a/matlab/shock_decomposition.m b/matlab/shock_decomposition.m
index 2b78c064896383e4ff4b115c054cd1d1cfe0c06d..5ec9389783af5b6aa957eb623ae37c7a97207e67 100644
--- a/matlab/shock_decomposition.m
+++ b/matlab/shock_decomposition.m
@@ -107,4 +107,4 @@ end
 
 oo_.shock_decomposition = z;
 
-graph_decomp(z,M_.exo_names,M_.endo_names,i_var,options_.initial_date)
+graph_decomp(z,M_.exo_names,M_.endo_names,i_var,options_.initial_date,M_,options_)