diff --git a/license.txt b/license.txt
index 278cce8d45d6ecd931673ba0bac18b1fcea64278..c16b157650f55ec7910f36a0f878dce88466355e 100644
--- a/license.txt
+++ b/license.txt
@@ -123,6 +123,11 @@ Copyright: 2010-2015 Alexander Meyer-Gohde
            2015-2017 Dynare Team
 License: GPL-3+
 
+Files: matlab/collapse_figures_in_tabgroup.m
+Copyright: 2023 Eduard Benet Cerda
+           2024 Dynare Team
+License: GPL-3+
+
 Files: matlab/convergence_diagnostics/raftery_lewis.m
 Copyright: 2016 Benjamin Born and Johannes Pfeifer
            2016-2017 Dynare Team
diff --git a/matlab/collapse_figures_in_tabgroup.m b/matlab/collapse_figures_in_tabgroup.m
new file mode 100644
index 0000000000000000000000000000000000000000..bacb3d690314ab6400f9da325a78cfd25d50e9dc
--- /dev/null
+++ b/matlab/collapse_figures_in_tabgroup.m
@@ -0,0 +1,42 @@
+function collapse_figures_in_tabgroup
+
+% Copyright © 2023 Eduard Benet Cerda
+% Copyright © 2024 Dynare Team
+%
+% This file is part of Dynare.
+%
+% Dynare is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% Dynare is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with Dynare.  If not, see <https://www.gnu.org/licenses/>.
+
+% Create a new figure with results
+fig = uifigure(Name = 'Dynare Results');
+
+% Add a grid layout to make sure it spans the entire width
+g = uigridlayout(fig, [1,1], Padding = 0);
+
+% Add a tabgroup
+tg = uitabgroup(g);
+
+% Find all figures with Dynare Tag 
+f = findobj('-regexp','tag','dynare-figure');
+
+% Loop over all figures and reparent them to a tab. Avoid legends, they are
+% automatically tied.
+for j = 1 : numel(f)
+    t = uitab(tg);
+    types = arrayfun(@class, f(j).Children, 'UniformOutput', false);
+    idx = ismember(types, 'matlab.graphics.illustration.Legend'); % no need to reparent legends
+    set(f(j).Children(~idx),'Parent',t)
+    t.Title = f(j).Name;
+    delete(f(j))
+end
\ No newline at end of file
diff --git a/matlab/dyn_figure.m b/matlab/dyn_figure.m
index 6de9474281d963c1fabd7519b8d15bde9c44bf54..ccf678855a84e15049d679326efa648c7709fce3 100644
--- a/matlab/dyn_figure.m
+++ b/matlab/dyn_figure.m
@@ -12,7 +12,7 @@ function h = dyn_figure(nodisplay, varargin)
 % SPECIAL REQUIREMENTS
 %    none
 
-% Copyright © 2012-2017 Dynare Team
+% Copyright © 2012-2024 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -30,7 +30,7 @@ function h = dyn_figure(nodisplay, varargin)
 % along with Dynare.  If not, see <https://www.gnu.org/licenses/>.
 
 if nodisplay
-    h = figure(varargin{:},'visible','off');
+    h = figure(varargin{:},'visible','off','tag','dynare-figure');
 else
-    h = figure(varargin{:});
+    h = figure(varargin{:},'tag','dynare-figure');
 end