diff --git a/matlab/+occbin/squeeze_shock_decomposition.m b/matlab/+occbin/squeeze_shock_decomposition.m
new file mode 100644
index 0000000000000000000000000000000000000000..bbd54f048d3e601b792be5a4bd5a4e91c9ff4180
--- /dev/null
+++ b/matlab/+occbin/squeeze_shock_decomposition.m
@@ -0,0 +1,44 @@
+function [oo_,options_] = squeeze_shock_decomposition(M_,oo_,options_, sd_vlist)
+
+if isstruct(options_.plot_shock_decomp.q2a)
+    
+    avname=char({options_.plot_shock_decomp.q2a.qname});
+    sda = options_.plot_shock_decomp.q2a(ismember(avname,sd_vlist,'rows'));
+    for k=1:length(sda)
+        if isstruct(sda(k).aux)
+             sd_vlist = [sd_vlist; cellstr(sda(k).aux.y)];
+        end
+    end
+end
+i_var = varlist_indices(sd_vlist,M_.endo_names);
+sd_vlist = M_.endo_names(i_var);
+% first we squeeze usual fields 
+oo_ = squeeze_shock_decomposition(M_,oo_,options_,sd_vlist);
+i_var = oo_.shock_decomposition_info.i_var;
+sd_vlist = M_.endo_names(i_var);
+
+% now we check for occbin SDs
+options_.occbin.shock_decomp.i_var = i_var;
+if isfield (oo_.occbin.smoother,'decomp')
+    oo_.occbin.smoother.decomp = oo_.occbin.smoother.decomp(i_var,:,:);
+    oo_.occbin.smoother.wdecomp = oo_.occbin.smoother.wdecomp(i_var,:,:);
+end
+
+if isfield(oo_.occbin,'shock_decomp')
+    fnames = fieldnames(oo_.occbin.shock_decomp);
+    for k=1:length(fnames)
+        nendo = numel(oo_.occbin.shock_decomp.(fnames{k}).vname);
+        tmp_i_var = varlist_indices(sd_vlist,char(oo_.occbin.shock_decomp.(fnames{k}).vname));
+        oo_.occbin.shock_decomp.(fnames{k}).vname = cellstr(sd_vlist);
+        tmpnames = fieldnames(oo_.occbin.shock_decomp.(fnames{k}));
+        for t=1:length(tmpnames)
+            if size(oo_.occbin.shock_decomp.(fnames{k}).(tmpnames{t}),3)==nendo
+                oo_.occbin.shock_decomp.(fnames{k}).(tmpnames{t})= oo_.occbin.shock_decomp.(fnames{k}).(tmpnames{t})(:,:,tmp_i_var);
+            end
+        end
+    end
+end
+
+end
+
+