diff --git a/src/+gui_tools/menu_options.m b/src/+gui_tools/menu_options.m
index b26b282771574b000cfbf8f3bb21d8a07c1d6391..f76c216760d09dd32b001ad06ad929365db7e92b 100644
--- a/src/+gui_tools/menu_options.m
+++ b/src/+gui_tools/menu_options.m
@@ -29,7 +29,7 @@ function menu_options(oid, status)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global M_ oo_
+global M_ oo_ project_info
 
 handles = guihandles(getappdata(0,'main_figure'));
 
@@ -70,14 +70,30 @@ switch oid
         handles.sensitivity_analysis.Enable = status;
 
     case 'output'
-        handles.output_shocks_dec.Enable = status;
-        handles.output_shocks_decomposition.Enable = status;
-        handles.output_realtime_shocks_decomposition.Enable = status;
-        if (isfield(oo_, 'dr') && isfield(oo_.dr, 'ghu')) || isfield(oo_, 'SmoothedShocks')
+        if strcmpi(status, 'off')
+            handles.output_shocks_dec.Enable = status;
+            handles.output_shocks_decomposition.Enable = status;
+            handles.output_realtime_shocks_decomposition.Enable = status;
             handles.output_conditional_forecast.Enable = status;
-        end
-        if isfield(M_, 'histval_dseries') || isfield(oo_, 'SmoothedVariables')
             handles.output_forecast.Enable = status;
+        else
+            if project_info.estimation_run
+                handles.output_shocks_dec.Enable = status;
+                handles.output_shocks_decomposition.Enable = status;
+                handles.output_realtime_shocks_decomposition.Enable = status;
+                if (isfield(oo_, 'dr') && isfield(oo_.dr, 'ghu')) || isfield(oo_, 'SmoothedShocks')
+                    handles.output_conditional_forecast.Enable = status;
+                end
+                if isfield(M_, 'histval_dseries') || isfield(oo_, 'SmoothedVariables')
+                    handles.output_forecast.Enable = status;
+                end
+            end
+            if project_info.stochastic_simulation_run && project_info.observed_variables_set
+                handles.output_shocks_dec.Enable = status;
+                handles.output_shocks_decomposition.Enable = status;
+                handles.output_realtime_shocks_decomposition.Enable = status;
+                handles.output_conditional_forecast.Enable = status;
+            end
         end
 
     otherwise
diff --git a/src/gui_estimation.m b/src/gui_estimation.m
index b80fff5c805878b74a58c62ac911f6085f59c40a..0a481310b460d47f6f0a15923a981dd316f46d4a 100644
--- a/src/gui_estimation.m
+++ b/src/gui_estimation.m
@@ -376,7 +376,6 @@ handles.pushbuttonCommandDefinition = uicontrol( ...
             jObj.stop;
             jObj.setBusyText('All done!');
 
-            gui_tools.menu_options('output','On');
             handles.pushbuttonResults.Enable = 'on';
             project_info.modified = true;
             project_info.estimation_run = true;
diff --git a/src/gui_load_mod_file.m b/src/gui_load_mod_file.m
index 126ce985acdeca76c9330de990994dc3b3d62ba2..02fc8f45482cd0b12e03b6537a0794a700398a8b 100644
--- a/src/gui_load_mod_file.m
+++ b/src/gui_load_mod_file.m
@@ -204,9 +204,7 @@ end
             gui_create_model_settings();
 
             %enable menu options
-            gui_tools.menu_options('model', 'On');
             gui_set_menus(true);
-
             gui_tools.project_log_entry('Running .mod/.dyn file', ['mod_file=' project_info.mod_file]);
         catch ME
             %restore globals
diff --git a/src/gui_observed_vars.m b/src/gui_observed_vars.m
index a3039a0b0f7dd16adabb8222f27765e12ec094fa..881ca0bfb5aab6be41d74f5c7fa1bae64d79533a 100644
--- a/src/gui_observed_vars.m
+++ b/src/gui_observed_vars.m
@@ -106,6 +106,7 @@ uicontrol(tabId, 'Style','pushbutton','String','Close this tab','Units','normali
                     options_.varobs = varobs(:, 1);
                 end
                 project_info.observed_variables_set = true;
+                gui_set_menus(true);
             end
         catch ME
             gui_tools.show_error('Error saving observed variables and data file information', ME, 'extended');
diff --git a/src/gui_open_project.m b/src/gui_open_project.m
index 7f75bc997a7336b68fa85b20afd1b3e9474e3eae..3090a392db7d730946b116c7a295d6f672be675d 100644
--- a/src/gui_open_project.m
+++ b/src/gui_open_project.m
@@ -28,7 +28,7 @@ function gui_open_project(hObject)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global project_info model_settings
+global project_info
 
 [fileName, pathName] = uigetfile('*.dproj', 'Select Dynare GUI project file:');
 if fileName == 0
@@ -65,14 +65,8 @@ try
         cd(project_info.project_folder);
 
         %enable menu options
-        gui_tools.menu_options('project','On');
+        gui_set_menus(true);
 
-        if ~isempty(project_info) && isfield(project_info, 'model_name')
-            gui_tools.menu_options('model','On');
-            if ~isempty(model_settings) && ~isempty(fieldnames(model_settings))
-                gui_set_menus(true);
-            end
-        end
         project_info.modified = false;
         gui_tools.project_log_entry('Project Open', ...
             ['project_name=' project_info.project_name '; project_folder=' project_info.project_folder]);
diff --git a/src/gui_set_menus.m b/src/gui_set_menus.m
index b180be0e86159bf22d1db3f631d62f200f3ecfa2..4fd9b4b5dbbf481bf71839e0fe0cb1e97690e688 100644
--- a/src/gui_set_menus.m
+++ b/src/gui_set_menus.m
@@ -28,9 +28,17 @@ function gui_set_menus(enable)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-global project_info
+global project_info model_settings
 
 if enable
+    gui_tools.menu_options('project', 'On');
+    if isempty(model_settings) || isempty(fieldnames(model_settings))
+        return
+    end
+    gui_tools.menu_options('model', 'On');
+    if isempty(project_info)
+        return
+    end
     if project_info.project_model_stochastic
         gui_tools.menu_options('estimation', 'On');
         gui_tools.menu_options('stochastic', 'On');
@@ -47,6 +55,7 @@ if enable
         gui_tools.menu_options('output', 'On');
     end
 else
+    gui_tools.menu_options('model', 'Off');
     gui_tools.menu_options('model_special','Off');
     gui_tools.menu_options('output','Off');
     gui_tools.menu_options('estimation','Off');
diff --git a/src/gui_stoch_simulation.m b/src/gui_stoch_simulation.m
index e12eedd396f8c7c2c002ce2052e526c011bff809..67793766e4ec1cd32bec972e916d853696f354fb 100644
--- a/src/gui_stoch_simulation.m
+++ b/src/gui_stoch_simulation.m
@@ -197,11 +197,10 @@ handles.pushbuttonCommandDefinition = uicontrol( ...
             end
             jObj.stop;
             jObj.setBusyText('Done');
-            %enable menu options
-            gui_tools.menu_options('output','On');
-            set(handles.pushbuttonResults, 'Enable', 'on');
+            handles.pushbuttonResults.Enable = 'on';
             project_info.modified = true;
             project_info.stochastic_simulation_run = true;
+            gui_set_menus(true);
         catch ME
             jObj.stop;
             jObj.setBusyText('Done with errors');