diff --git a/doc/manual/source/the-model-file.rst b/doc/manual/source/the-model-file.rst
index dedafd797f292db54b5963e358eec04c59ebc66a..6ed77ce8de920a3a70e52e8974a34f6e16058b0f 100644
--- a/doc/manual/source/the-model-file.rst
+++ b/doc/manual/source/the-model-file.rst
@@ -7373,6 +7373,11 @@ Shock Decomposition
         If used in combination with :opt:`diff`, the ``diff`` operator is first applied. 
         Default: not activated
 
+    .. option:: max_nrows
+
+        Maximum number of rows in the subplot layout of detailed shock
+        decomposition graphs. Note that columns are always 3. Default: 6
+
 .. command:: initial_condition_decomposition [VARIABLE_NAME]...;
              initial_condition_decomposition (OPTIONS...) [VARIABLE_NAME]...;
 
@@ -7459,6 +7464,22 @@ Shock Decomposition
         If used in combination with :opt:`diff`, the ``diff`` operator is first applied. 
         Default: not activated
 
+.. command:: squeeze_shock_decomposition [VARIABLE_NAME]...;
+
+    |br| For large models, the size of the information stored by shock
+    decompositions (especially various settings of realtime decompositions) may
+    become huge. This command allows to squeeze this information in two
+    possible ways:
+
+        * Automatic (default): only the variables for which plotting has been
+          explicitly required with `plot_shock_decomposition` will have their
+          decomposition left in `oo_` after this command is run;
+
+        * If a list of variables is passed to the command, then only those
+          variables will have their decomposition left in `oo_` after this
+          command is run.
+
+
 Calibrated Smoother
 ===================
 
diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m
index 448abae6c7f1b67f7d94cd205f6e1ac051c8ae08..a928a1657e68ab05b069dacd96cdf7bce32f9947 100644
--- a/matlab/graph_decomp_detail.m
+++ b/matlab/graph_decomp_detail.m
@@ -60,11 +60,7 @@ if isfield(opts_decomp,'init_cond_decomp')
 else
     init_cond_decomp = 0;
 end
-if isfield(opts_decomp,'min_nrows')
-    min_nrows = opts_decomp.min_nrows ;
-else
-    max_nrows = 6;
-end
+max_nrows = opts_decomp.max_nrows;
 screen_shocks = opts_decomp.screen_shocks;
 if ~isempty(DynareOptions.plot_shock_decomp.use_shock_groups) || comp_nbr<=18
     screen_shocks=0;
diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m
index 12e39691a2e3f47e2a3e06d2706a8e544385b978..db35777ae18d7460fe5171dcfdf12f82a5eff3ac 100644
--- a/matlab/initial_condition_decomposition.m
+++ b/matlab/initial_condition_decomposition.m
@@ -51,6 +51,7 @@ options_.plot_shock_decomp.plot_init_date = options_.initial_condition_decomp.pl
 options_.plot_shock_decomp.plot_end_date = options_.initial_condition_decomp.plot_end_date;
 options_.plot_shock_decomp.diff = options_.initial_condition_decomp.diff;
 options_.plot_shock_decomp.flip = options_.initial_condition_decomp.flip;
+options_.plot_shock_decomp.max_nrows = options_.initial_condition_decomp.max_nrows;
 
 if isfield(options_.initial_condition_decomp,'init2shocks') % private trap for uimenu calls
     init2shocks=options_.initial_condition_decomp.init2shocks;
diff --git a/matlab/set_default_initial_condition_decomposition_options.m b/matlab/set_default_initial_condition_decomposition_options.m
index 58ecfff142d2f6c6d613d667964f0f5931b7a0b4..167addad5a5c3bbad37484a6ba0e3f7ecdc9da2a 100644
--- a/matlab/set_default_initial_condition_decomposition_options.m
+++ b/matlab/set_default_initial_condition_decomposition_options.m
@@ -41,4 +41,5 @@ options.initial_condition_decomp.plot_init_date = [];
 options.initial_condition_decomp.plot_end_date = [];
 options.initial_condition_decomp.diff = false;
 options.initial_condition_decomp.flip = false;
+options.initial_condition_decomp.max_nrows = 6;
 end
diff --git a/matlab/set_default_plot_shock_decomposition_options.m b/matlab/set_default_plot_shock_decomposition_options.m
index ecef090bf7a648d659cf505b3af32725291f29fd..385884e970d80d8e7ee311084bb4b223eb4b52a1 100644
--- a/matlab/set_default_plot_shock_decomposition_options.m
+++ b/matlab/set_default_plot_shock_decomposition_options.m
@@ -51,4 +51,5 @@ options.plot_shock_decomp.plot_init_date = [];
 options.plot_shock_decomp.plot_end_date = [];
 options.plot_shock_decomp.diff = false;
 options.plot_shock_decomp.flip = false;
+options.plot_shock_decomp.max_nrows = 6;
 end
diff --git a/matlab/squeeze_shock_decomp.m b/matlab/squeeze_shock_decomposition.m
similarity index 96%
rename from matlab/squeeze_shock_decomp.m
rename to matlab/squeeze_shock_decomposition.m
index 49073ee08287cdf9ddd10da660f2c7cd72ca5d6a..3fbfa13617c6b4fadd55bb776bed339472ba367d 100644
--- a/matlab/squeeze_shock_decomp.m
+++ b/matlab/squeeze_shock_decomposition.m
@@ -1,4 +1,4 @@
-function oo_ = squeeze_shock_decomp(M_,oo_,options_,var_list_)
+function oo_ = squeeze_shock_decomposition(M_,oo_,options_,var_list_)
 
 if isfield(oo_,'plot_shock_decomposition_info') && isfield(oo_.plot_shock_decomposition_info','i_var')
     my_vars = oo_.plot_shock_decomposition_info.i_var;
diff --git a/preprocessor b/preprocessor
index 031c0cff5fca274ea1e75c70623a8e8be93269bb..c2461981d2917c69c3decfc55bf2aaf006057c52 160000
--- a/preprocessor
+++ b/preprocessor
@@ -1 +1 @@
-Subproject commit 031c0cff5fca274ea1e75c70623a8e8be93269bb
+Subproject commit c2461981d2917c69c3decfc55bf2aaf006057c52
diff --git a/scripts/dynare.el b/scripts/dynare.el
index 3be0998a858518379d28b23ac95ca15e60b40ec5..debcafaea12a96412feec958e1081fcd9582f6d6 100644
--- a/scripts/dynare.el
+++ b/scripts/dynare.el
@@ -68,7 +68,8 @@
     "discretionary_policy" "identification" "bvar_density" "bvar_forecast"
     "dynare_sensitivity" "initval_file" "histval_file" "forecast"
     "shock_decomposition" "realtime_shock_decomposition"
-    "plot_shock_decomposition" "initial_condition_decomposition" "sbvar"
+    "plot_shock_decomposition" "initial_condition_decomposition"
+    "squeeze_shock_decomposition" "sbvar"
     "ms_estimation" "ms_simulation" "ms_compute_mdd" "ms_compute_probabilities"
     "ms_forecast" "ms_irf" "ms_variance_decomposition" "conditional_forecast"
     "plot_conditional_forecast" "gmm_estimation" "smm_estimation"
diff --git a/tests/shock_decomposition/ls2003_plot.mod b/tests/shock_decomposition/ls2003_plot.mod
index 3ef63d277ec3130dd4aa3f1abda1ec2d05eefbee..a3134d2faad37e8e9ac4e2d3ceac2aaa1cd121a0 100644
--- a/tests/shock_decomposition/ls2003_plot.mod
+++ b/tests/shock_decomposition/ls2003_plot.mod
@@ -85,7 +85,7 @@ end;
 options_.initial_date=dates('1989Q4'); % date arbitrarily set for testing purposes
 shock_decomposition(nograph);
 // test for nothing to squeeze
-oo_ = squeeze_shock_decomp(M_,oo_,options_);
+squeeze_shock_decomposition;
 
 // standard plot
 plot_shock_decomposition y_obs R_obs pie_obs dq de;
@@ -112,7 +112,7 @@ close all,
 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;
 
 // test squeeze
-oo_ = squeeze_shock_decomp(M_,oo_,options_);
+squeeze_shock_decomposition;
 
 //realtime pooled
 plot_shock_decomposition(realtime = 1) y_obs R_obs pie_obs dq de;
@@ -157,7 +157,7 @@ close all,
 realtime_shock_decomposition(fast_realtime=75) y_obs R_obs pie_obs dq de;
 
 // re-test squeeze
-oo_ = squeeze_shock_decomp(M_,oo_,options_);
+squeeze_shock_decomposition;
 
 collect_latex_files;
 if system(['pdflatex -halt-on-error -interaction=batchmode ' M_.fname '_TeX_binder.tex'])