diff --git a/R/shiny-state.R b/R/shiny-state.R
index 78dd2ed9137f701b78f20ad9b46a371d73948565..43c190d578f68f92ea3ad3d0230b1b665885ca7b 100644
--- a/R/shiny-state.R
+++ b/R/shiny-state.R
@@ -263,28 +263,33 @@ unpack_app_state <- function(session,envopts,input,top_data_dir,project_path,pac
 input2conf_setup <- function(input,gui,conf=list()) {
     if (length(conf)==0L) {
         conf$compounds <- list()
-        conf$figures <- list()
-        conf$prescreen <- list()
-        conf$tolerance <- list()
-        conf$extract <- list()
         conf$summary_table <- list()
-        conf$report <- list()
         conf$debug <- F
     }
 
     conf$compounds$lists <- gui$compounds$lists
     conf$compounds$sets <- gui$compounds$sets
     
+
+    conf$paths$data = gui$paths$data
+    conf
+}
+
+input2conf_extract <- function(input,conf) {
+    conf$tolerance = list()
+    conf$extract = list()
     conf$tolerance[["ms1 fine"]] <- paste(input$ms1_fine,input$ms1_fine_unit)
     conf$tolerance[["ms1 coarse"]] <- paste(input$ms1_coarse,input$ms1_coarse_unit)
     conf$tolerance[["eic"]] <- paste(input$ms1_eic,input$ms1_eic_unit)
     conf$tolerance[["rt"]] <- paste(input$ms1_rt_win,input$ms1_rt_win_unit)
     conf$extract$missing_precursor_info <- input$missingprec
     conf
+
 }
 
 
 input2conf_prescreen <- function(input,conf) {
+    conf$prescreen = list()
     conf$prescreen[["ms1_int_thresh"]] <- input$ms1_int_thresh
     conf$prescreen[["ms2_int_thresh"]] <- input$ms2_int_thresh
     conf$prescreen[["s2n"]] <- input$s2n
@@ -293,6 +298,7 @@ input2conf_prescreen <- function(input,conf) {
 }
 
 input2conf_figures <- function(input,conf) {
+    conf$figures = list()
     conf$figures$rt_min <- paste(input$plot_rt_min,input$plot_rt_min_unit)
     conf$figures$rt_max <- paste(input$plot_rt_max,input$plot_rt_max_unit)
     conf$figures$ext <- input$plot_ext
@@ -301,6 +307,7 @@ input2conf_figures <- function(input,conf) {
 }
 
 input2conf_report <- function(input,conf) {
+    conf$report = list()
     conf$report$author <- input$rep_aut
     conf$report$title <- input$rep_tit
     conf
@@ -338,41 +345,59 @@ input2conf_metfrag <- function(input,conf) {
     
 }
 
-input2conf <- function(input,gui,conf=list()) {
-    conf = input2conf_setup(input,gui=gui,conf)
-    conf = input2conf_prescreen(input,conf)
-    conf = input2conf_figures(input,conf)
-    conf = input2conf_report(input,conf)
-    conf = input2conf_metfrag(input,conf)
-    conf
+app_update_conf <- function(input,gui,envopts,fconf,m) {
+    for (fstrp in fconf) {
+        fstr = paste0("input2conf_",fstrp)
+        m$conf = do.call(fstr,list(input,conf=m$conf))
+    }
+    m$run <- new_runtime_state(project=gui$paths$project,
+                               envopts = envopts,
+                               conf=m$conf)
+    m
 }
 
 app_state2state <- function(input,gui,envopts,m=NULL) {
-    if (is.null(m)) m <- new_project(project = gui$paths$project,
-                                     envopts = envopts)
-    ## m$run$paths <- shiny::reactiveValuesToList(gui$paths)
-    m$conf = input2conf_setup(input,gui=gui)
-    m$conf = input2conf_prescreen(input=input,conf=m$conf)
-    m$conf = input2conf_figures(input,conf=m$conf)
-    m$conf = input2conf_report(input,conf=m$conf)
-    m$conf = input2conf_metfrag(input,conf=m$conf) 
-    m$conf$paths$data <- gui$paths$data
+    if (is.null(m)) m = new_project(project = gui$paths$project,
+                                    envopts = envopts)
+    m$conf = input2conf_setup(input=input,
+                              gui=gui)
+
+
+    m = app_update_conf(input=input,
+                        gui=gui,
+                        envopts=envopts,
+                        fconf = c("extract",
+                                  "prescreen",
+                                  "figures",
+                                  "report",
+                                  "metfrag"),
+                        m=m)
+                        
+    ## m$conf = input2conf_setup(input,gui=gui)
+    ## m$conf = input2conf_prescreen(input=input,conf=m$conf)
+    ## m$conf = input2conf_figures(input,conf=m$conf)
+    ## m$conf = input2conf_report(input,conf=m$conf)
+    ## m$conf = input2conf_metfrag(input,conf=m$conf) 
+    
 
 
-    m$run <- new_runtime_state(project=gui$paths$project,
-                               envopts = envopts,
-                               conf=m$conf)
+    ## m$run <- new_runtime_state(project=gui$paths$project,
+    ##                            envopts = envopts,
+    ##                            conf=m$conf)
 
 
     m$input$tab$mzml <- gui2datatab(gui)
-
+    
     m
 }
 
 
+
+
 gen_comp_state <- function(input,gui) {
     m <- app_state2state(input,gui)
     run(m=m,phases=c("setup","mk_comp_tab"))
+    
 }
 
     
diff --git a/R/shiny-ui-base.R b/R/shiny-ui-base.R
index d547df90fdc4efcf5be7944202a46587e6f2765d..8ea32ec5cf4632cb02933ed8962e7317ea59da25 100644
--- a/R/shiny-ui-base.R
+++ b/R/shiny-ui-base.R
@@ -1131,6 +1131,8 @@ mk_shinyscreen_server <- function(projects,init) {
         
         observeEvent(input$extract_b,{
             rvs$m = app_state2state(input,rvs$gui,envopts = init$envopts, m=rvs$m) # Update params from GUI.
+            ## Clear out prescreen data if any.
+            rvs$m$out$tab$summ=EMPTY_SUMM
             m = rvs$m
             shinymsg("Extraction has started. This may take a while.")
             rvs$status$ms1_coarse_stat = m$conf$tolerance[["ms1 coarse"]]
@@ -1138,9 +1140,8 @@ mk_shinyscreen_server <- function(projects,init) {
             rvs$status$ms1_eic_stat = m$conf$tolerance[["eic"]]
             rvs$status$rt_stat = m$conf$tolerance[["rt"]]
             rvs$status$is_extracted_stat = "In progress."
+            rvs$status$is_qa_stat = "No."
             rv_extr_flag(T)
-            rv_presc_flag(F)
-    
         })
 
         observe({
@@ -1168,7 +1169,14 @@ mk_shinyscreen_server <- function(projects,init) {
 
         observeEvent(input$presc_b,{
             if (NROW(rvs$m$extr$ms1)>0L) {
-                rvs$m = app_state2state(input,rvs$gui,envopts = init$envopts, m=rvs$m) # Update params from GUI.
+                ## Update just prescreening conf.
+                rvs$m = app_update_conf(input=input,
+                                        gui=rvs$gui,
+                                        envopts=init$envopts,
+                                        fconf="prescreen",
+                                        m=rvs$m)
+
+                ## rvs$m = app_state2state(input,rvs$gui,envopts = init$envopts, m=rvs$m) # Update params from GUI.
                 rvs$status$ms1_int_thresh_stat = rvs$m$conf$prescreen[["ms1_int_thresh"]]
                 rvs$status$ms2_int_thresh_stat = rvs$m$conf$prescreen[["ms2_int_thresh"]]
                 rvs$status$s2n_stat = rvs$m$conf$prescreen[["s2n"]]
@@ -1191,7 +1199,8 @@ mk_shinyscreen_server <- function(projects,init) {
                 if (rv_presc_flag()) {
                     shinymsg("Prescreening started. Please wait.")
                     rv_presc_flag(F)
-                    m = run(m=rvs$m,phases="prescreen")
+                    ## If user changed prescreening params.
+                    rvs$m = run(m=rvs$m,phases="prescreen")
                     rvs$status$is_qa_stat = "Yes."
                     shinymsg("Prescreening has been completed.")
                 }
@@ -1634,7 +1643,7 @@ mk_shinyscreen_server <- function(projects,init) {
             req(rvs$status$s2n_stat)
         })
 
-        output$ret_time_shift_tol = renderText({
+        output$ret_time_shift_tol_stat = renderText({
             req(rvs$status$ret_time_shift_tol_stat)
         })