diff --git a/DESCRIPTION b/DESCRIPTION
index 1bf5e4cb53056a6bce9b0775e70ee8541f8e4233..5e10d69353ddfcbf2087494543de7eab89c0901b 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -50,6 +50,7 @@ Collate:
     'plotting.R'
     'extraction.R'
     'api.R'
+    'shiny-state.R'
     'shiny-ui-base.R'
 Depends:
     RMassBank,
diff --git a/NAMESPACE b/NAMESPACE
index 7032fc1755be9359d29e65ff7adc443d47d24d33..b57cbd2925fbdd77df54773bbade1de32b72f121 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -41,6 +41,11 @@ export(setup_phase)
 export(sort_spectra)
 export(subset_summary)
 export(tk_save_file)
+export(which_gui_inputs)
+export(which_gui_numeric_inputs)
+export(which_gui_radio_inputs)
+export(which_gui_select_inputs)
+export(which_gui_text_inputs)
 import(data.table)
 importFrom(MSnbase,filterMz)
 importFrom(MSnbase,readMSData)
diff --git a/R/shiny-state.R b/R/shiny-state.R
new file mode 100644
index 0000000000000000000000000000000000000000..c0160e5d0b23c411c79cb455b8ac466f7ee04c59
--- /dev/null
+++ b/R/shiny-state.R
@@ -0,0 +1,58 @@
+## Managing the state of shiny application.
+
+
+GUI_SELECT_INPUTS <- c("proj_list",
+                  "indir_list",
+                  "ms1_coarse_unit",
+                  "ms1_fine_unit",
+                  "ms1_rt_win_unit",
+                  "ret_time_shift_tol")
+                  
+GUI_NUMERIC_INPUTS <- c("ms1_coarse",
+                   "ms1_fine",
+                   "ms1_eic",
+                   "ms1_rt_win",
+                   "ms1_int_thresh",
+                   "ms2_int_thresh",
+                   "s2n",
+                   "ret_time_shift_tol")
+
+GUI_TEXT_INPUTS <- c("rep_aut",
+                     "rep_tit")
+
+GUI_RADIO_INPUTS <- c("missingprec")
+
+GUI_ALL_INPUTS <- c(GUI_SELECT_INPUTS,
+                      GUI_NUMERIC_INPUTS,
+                      GUI_TEXT_INPUTS,
+                      GUI_RADIO_INPUTS)
+
+
+
+
+#' @export
+which_gui_inputs <- function() {
+    GUI_ALL_INPUTS
+}
+
+
+#' @export
+which_gui_select_inputs <- function() {
+    GUI_SELECT_INPUTS
+    }
+
+#' @export
+which_gui_numeric_inputs <- function() {
+    GUI_NUMERIC_INPUTS
+    }
+
+#' @export
+which_gui_text_inputs <- function() {
+    GUI_TEXT_INPUTS
+}
+
+#' @export
+which_gui_radio_inputs <- function() {
+    GUI_RADIO_INPUTS
+}
+
diff --git a/R/shiny-ui-base.R b/R/shiny-ui-base.R
index 5255bb2b6cfaf9a0c99192369d0393fcb18b5ef0..96a9cdf9a1f3943ba89c1cc7fc825d484454143e 100644
--- a/R/shiny-ui-base.R
+++ b/R/shiny-ui-base.R
@@ -1133,21 +1133,21 @@ mk_shinyscreen_server <- function(projects,init) {
             ## If a saved state exists, load it.
             fn_state <- file.path(fullwd,FN_STATE)
             if (file.exists(fn_state)) {
-                reset_gui_and_state(session=session,
-                                    init = init,
-                                    wd = wd,
-                                    rv_dfile = rv_dfile,
-                                    rv_datatab = rv_datatab,
-                                    rv_flag_datatab = rv_flag_datatab,
-                                    rvs = rvs,
-                                    rv_projects = rv_projects)
-                rvs$m <- list2rev(readRDS(fn_state))
-                rvs$m$conf$project <- input$proj_list
-                rvs$m$conf$paths$project <- fullwd
-                update_gui(session = session,
-                           rv_dfile = rv_dfile,
-                           rv_datatab = rv_datatab,
-                           rv_flag_datatab = rv_flag_datatab)
+                ## reset_gui_and_state(session=session,
+                ##                     init = init,
+                ##                     wd = wd,
+                ##                     rv_dfile = rv_dfile,
+                ##                     rv_datatab = rv_datatab,
+                ##                     rv_flag_datatab = rv_flag_datatab,
+                ##                     rvs = rvs,
+                ##                     rv_projects = rv_projects)
+                ## rvs$m <- list2rev(readRDS(fn_state))
+                ## rvs$m$conf$project <- input$proj_list
+                ## rvs$m$conf$paths$project <- fullwd
+                ## update_gui(session = session,
+                ##            rv_dfile = rv_dfile,
+                ##            rv_datatab = rv_datatab,
+                ##            rv_flag_datatab = rv_flag_datatab)
             } else {
                 message("No saved state found. Creating an empty project.")
                 m <- new_empty_project(fullwd)
@@ -1183,6 +1183,11 @@ mk_shinyscreen_server <- function(projects,init) {
                                  file = fconf)
                 shinyscreen:::tab2file(tab=m$input$tab$mzml,file=ftab)
                 m$conf$paths$datatab <- ftab
+                gui_inputs <- list()
+                gui_input_names <- which_gui_inputs()
+                gui_inputs <- shiny::reactiveValuesToList(input)[gui_input_names]
+                fn_gui <- file.path(m$conf$paths$project,"gui.rds")
+                saveRDS(object=gui_inputs,file=fn_gui)
                 saveRDS(object=m,file=fn)
             }
             shinymsg("Saving state completed.")