diff --git a/R/plotting.R b/R/plotting.R
index b86898fcb8b854f46391b32ce33bd61b4f8be3eb..1fb7a4fbea133fdfb426d975ea241f46dcdf1e3f 100644
--- a/R/plotting.R
+++ b/R/plotting.R
@@ -413,28 +413,27 @@ make_line_label <- function(...) {
 }
 
 ## Prepare MS1 eic data: rt and intensity of a subset of extracted
-## data defined by the key named list.
-get_data_4_eic_ms1 <- function(extr_ms1,key) {
+## data defined by the key named list. Argument `labs' is a vector of
+## names that will be used to construct the legend labels.
+get_data_4_eic_ms1 <- function(extr_ms1,kvals,labs) {
 
     ## Which of the selected keys are in the extr_ms1? This can be
-    ## made more obvious to the user, but not necessary atm.
-    actual_key <- key[intersect(names(key),names(extr_ms1))]
-
-    ## Which of CINDEX categories exist among extr_ms1 categories?
-    label_group <- intersect(get_label_group(names(key)),names(extr_ms1))
+    ## made more obvious to the user, but note necessary atm.
+    keys <- names(kvals)
+    actual_key <- intersect(keys,names(extr_ms1))
+    actual_kvals <- kvals[actual_key]
 
     ## Subset extr_ms1 by the actual key.
-    tab <-get_data_from_key(tab=extr_ms1,key=actual_key)
+    tab <-get_data_from_key(tab=extr_ms1,key=actual_kvals)
 
     ## Group the plot data per label group (ie tags, or adducts, or
     ## both).
-    label_group <- as.list(label_group)
-    names(label_group) <- NULL
-    pdata <- tab[,.(rt,intensity),by=label_group]
-
+    xlxx <- intersect(labs,names(extr_ms1))
+    xlxx <- as.character(xlxx)
+    pdata <- tab[,.(rt,intensity),by=xlxx]
     ## Create labels.
-    pdata <- eval(bquote(pdata[,label:=make_line_label(..(lapply(label_group,as.symbol))),by=(label_group)],splice=T))
-    setkeyv(pdata,cols=unique(c("ID",as.character(label_group),"rt")))
+    pdata <- eval(bquote(pdata[,label:=make_line_label(..(lapply(xlxx,as.symbol))),by=xlxx],splice=T))
+    setkeyv(pdata,cols=unique(as.character(xlxx),"rt"))
     pdata
 }
 
@@ -450,15 +449,14 @@ get_data_4_eic_ms2 <- function(summ,adduct,id,splitby) {
 
 
 
-make_eic_ms1_plot <- function(extr_ms1,summ,key,axis="linear",rt_range=NULL) {
+make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NULL) {
 
    
     ## Get the table with ms1 data.
-    pdata <- get_data_4_eic_ms1(extr_ms1, key)
-
+    pdata <- get_data_4_eic_ms1(extr_ms1, kvals, labs)
     ## Get metadata.
-    summ_row  <- get_data_from_key(summ,key=key)
-
+    summ_row  <- get_data_from_key(summ,key=kvals)
+    key <- names(kvals)
     ## Deal with retention time range.
     rt_lim <- if (is.null(rt_range)) NULL else ggplot2::xlim(rt_range)
     xrng <- if (!is.null(rt_range)) rt_range else range(pdata$rt)
@@ -470,14 +468,15 @@ make_eic_ms1_plot <- function(extr_ms1,summ,key,axis="linear",rt_range=NULL) {
     aspr <- if (dx < .Machine$double.eps) 1 else 0.5*as.numeric(dx)/as.numeric(dy)
 
 
-    tag_txt = paste0("Set: ", set, " ID: ",id)
+    tag_txt = paste0(sapply(names(kvals),function (nx) paste0(nx,": ", kvals[[nx]])),
+                     collapse='; ') ## paste0("Set: ", set, " ID: ",id)
     title_txt = paste0("MS1 EIC for ion m/z = ",paste0(signif(unique(summ_row$mz),digits=7L),collapse=", "))
     nm <- paste(unique(summ_row$Name),collapse="; ")
     subt_txt = if (!length(nm)==0L && !is.na(nm) && nchar(nm)>0L) nm else NULL
     p <- ggplot2::ggplot(pdata,aes(x=rt,y=intensity,colour=label))+ggplot2::labs(caption=tag_txt,title=title_txt,subtitle=subt_txt)+ggplot2::xlab("retention time")+ggplot2::geom_line()+scale_y(axis=axis,labels=sci10)+rt_lim
     ## +ggplot2::coord_fixed(ratio=aspr)
     annt_dx <- 5*dx/100.
-    annt <- summ[summ_row,on=names(key),nomatch=NULL][,.(x=..annt_dx+ms1_rt,y=ms1_int,txt=signif(ms1_rt,5))]
+    annt <- summ[summ_row,on=key,nomatch=NULL][,.(x=..annt_dx+ms1_rt,y=ms1_int,txt=signif(ms1_rt,5))]
 
     ## Annotate.
     p <- p + annotate("text",x=annt$x,y=annt$y,label=annt$txt,size=4,check_overlap=T)
@@ -488,6 +487,9 @@ make_eic_ms1_plot <- function(extr_ms1,summ,key,axis="linear",rt_range=NULL) {
 
 
 make_eic_ms2_plot <- function(summ,key,splitby,axis="linear",rt_range=NULL) {
+    set <- key[['set']]
+    id <- key[['id']]
+    adduct <- key[['adduct']]
     key <- list(set=set,
                 adduct=adduct,
                 ID=id)
diff --git a/R/resources.R b/R/resources.R
index 35f348127fb95859604ab2ec1345f15215de5933..8ff85ef27c9e6658aed1bee12bc15203ab0ba91f 100644
--- a/R/resources.R
+++ b/R/resources.R
@@ -283,7 +283,7 @@ CMPD_LIST_PATT <- "((*.csv)|(*.csv.gz))$"
 SET_LIST_PATT <- CMPD_LIST_PATT
 DFILES_LIST_PATT <- ".*\\.mz[Mm][Ll]$"
 
-CINDEX_BY <- c("set","ID","tag","adduct")
+CINDEX_BY <- c("set","ID","adduct","tag")
 CINDEX_COLS <- c("mz", "ms1_rt","Name","qa_ms1","qa_ms2")
 ARRANGE_CHOICES <- c(nothing="nothing",
                      quality="quality",
diff --git a/R/shiny-ui-base.R b/R/shiny-ui-base.R
index c491a2095de343b19ca16d4d530e8827f57403dc..9ae0b4f566ee168486e2a34ffd06c0011f21c24e 100644
--- a/R/shiny-ui-base.R
+++ b/R/shiny-ui-base.R
@@ -727,32 +727,47 @@ mk_shinyscreen_server <- function(projects,init) {
             }
             })
         })
+        
+        ## Get current grouping categories (`cindex key').
+        rf_get_cindex_key <- reactive({
+
+            cind <- rf_get_cindex()
+            req(NROW(cind)>0L)
+            
+            ## Select only valid category names.
+            x <- which(CINDEX_BY %in% names(cind))
+            CINDEX_BY[x]
+        })
+
+        ## Get currently selected cindex values as a list.
+        rf_get_cindex_kval <- reactive({
+            cind <- rf_get_cindex()
+            key <- rf_get_cindex_key()
+            req(NROW(cind)>0L)
+            row <- req(input$cindex_row_last_clicked)
+            rowtab <- cind[row][,..key]
+            res <- lapply(rowtab,function (x) x[[1]])
+            names(res) <- key
+            res
+        })
+
+        ## Get the labels which will define plot curves in EIC MS1.
+        rf_get_cindex_labs <- reactive({
+            key <- rf_get_cindex_key()
+            res <- setdiff(CINDEX_BY,key)
+            if (length(res)!=0L) res else CINDEX_BY
+        })
 
         ## REACTIVE FUNCTIONS: PLOTS
         rf_plot_eic_ms1 <- reactive({
             isolate({
                 ms1 <- rvs$m$extr$ms1
                 summ <- rvs$m$out$tab$summ
-                cind <- rf_get_cindex()
+
             })
             req(NROW(summ)>0L)
             req(NROW(ms1)>0L)
-            req(NROW(cind)>0L)
-            row <- input$cindex_row_last_clicked
-            req(row)
-            snms <- names(cind)
-            sel <- cind[row]
-            wh <- which(snms %in% CINDEX_BY)
-            req(wh)
-            sel2 <- lapply(wh,function(n) sel[[n]][[1]])
-            names(sel2) <- snms[wh]
-            message('sel2:')
-            print(sel2)
-            message('---')
-            make_eic_ms1_plot(ms1,summ,key=sel2)
-            
-            
-            
+            make_eic_ms1_plot(ms1,summ,kvals=req(rf_get_cindex_kval()),labs=req(rf_get_cindex_labs()))
         })
 
         rf_plot_eic_ms2 <- reactive({
@@ -769,9 +784,7 @@ mk_shinyscreen_server <- function(projects,init) {
             gg <- rf_plot_eic_ms1()
             rt_rng <- range(gg$data$rt)
             make_eic_ms2_plot(summ,
-                              set=sel$set,
-                              adduct=sel$adduct,
-                              id=sel$ID,
+                              key=rf_get_cindex_kval(),
                               splitby=c("tag"),
                               rt_range = rt_rng)
             
@@ -1214,7 +1227,7 @@ mk_shinyscreen_server <- function(projects,init) {
 
         output$plot_eic_combined <- renderPlot({
             p1 <- rf_plot_eic_ms1()
-            p2 <- rf_plot_eic_ms2()
+            p2 <- NULL#rf_plot_eic_ms2()
             combine_plots(p1,p2)
         })
         ## output$plot_eic_ms1 <- renderPlot({