diff --git a/server.R b/server.R
index 1ffc68e129b8b05d080d653930016dcda443034a..c0f43f60bb469766508c639c8811eb426872f103 100644
--- a/server.R
+++ b/server.R
@@ -17,7 +17,7 @@ shinyServer
       return(x)
     }
   }
-
+  
   beautifulTable <- function(data)  {
     DT::datatable(
       data = data,
@@ -44,32 +44,31 @@ shinyServer
       height = "auto"
     )
   }
-
+  
   source({
     "https://raw.githubusercontent.com/mahendra-mariadassou/phyloseq-extended/master/R/load-extra-functions.R"
   })
-
+  
   source("internals.R")
-
+  
   data16S <- reactive({
-
     ## BIOM input
     if (input$dataset == "input")
     {
       ## Unhappy path
       if (is.null(input$fileBiom))
         return()
-
+      
       ## Happy path
       ## Import biom
       d <- .import_biom(input)
-
+      
       ## Format tax table
       tax_table(d) <- .format_tax_table(tax_table(d))
-
+      
       ## import metadata and store it in phyloseq object
       sample_data(d) <- .import_sample_data(input, d)
-
+      
       ## Rarefy data
       if (input$rareData) {
         d <- rarefy_even_depth(
@@ -81,29 +80,30 @@ shinyServer
       }
       return(d)
     }
-
+    
     ## Rdata input
     if (input$dataset == "rdata")
     {
       ## .import_from_rdata(input) ## does not work as a function for some reason
-
+      
       ## Happy path
-      ne <- new.env() ## new env to store RData content and avoid border effects
+      ne <-
+        new.env() ## new env to store RData content and avoid border effects
       if (!is.null(input$fileRData))
         load(input$fileRData$datapath, envir = ne)
       if (class(ne$data) == "phyloseq")
         return(ne$data)
-
+      
       ## Unhappy paths: everything else
       return()
     }
-
+    
     ## Default case
     load("demo/demo.RData")
     return(get(input$dataset))
-
+    
   })
-
+  
   data <- reactiveValues()
   {
     observe({
@@ -111,7 +111,7 @@ shinyServer
         isolate(data <<- data16S())
     })
   }
-
+  
   output$downloadData <- {
     downloadHandler(
       filename = function() {
@@ -122,7 +122,7 @@ shinyServer
       }
     )
   }
-
+  
   output$downloadUI <- renderUI({
     validate(need(data16S(), ""))
     tags$div(
@@ -131,15 +131,15 @@ shinyServer
       downloadButton("downloadData", "Download", style = "color: black; background-color: gray90")
     )
   })
-
+  
   output$rarefactionMin <- renderText({
     validate(need(input$fileBiom, ""),
              need(input$dataset == "input", ""))
     paste("(min sample =", format(min(sample_sums(data16S(
-
+      
     ))), big.mark = " "), "reads)")
   })
-
+  
   output$phyloseqPrint <- renderPrint({
     validate(
       need(
@@ -149,7 +149,12 @@ shinyServer
     )
     data16S()
   })
-
+  
+  output$sampledataTable <- renderTable({
+    validate(need(sample_data(data16S(), errorIfNULL = FALSE), ""))
+    sapply(sample_data(data16S()), class)
+  }, rownames = TRUE, colnames = FALSE, caption = "Class of sample_data", caption.placement = "top")
+  
   output$summaryTable <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -173,7 +178,7 @@ shinyServer
       )
     )
   })
-
+  
   output$histUI <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -202,7 +207,7 @@ shinyServer
       )
     )
   })
-
+  
   output$histo <- renderPlot({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -218,7 +223,7 @@ shinyServer
     }
     return(p)
   })
-
+  
   output$histFocusUIfocusRank <- renderUI({
     validate(need(data16S(), ""))
     radioButtons(
@@ -228,19 +233,19 @@ shinyServer
       inline = TRUE
     )
   })
-
+  
   output$histFocusUIfocusTaxa <- renderUI({
     validate(need(data16S(), ""))
     selectInput(
       "focusTaxa",
       label = "Selected taxa : ",
       choices = unique(as.vector(tax_table(data16S(
-
+        
       ))[, input$focusRank])),
       selected = TRUE
     )
   })
-
+  
   output$histFocusUIfocusNbTaxa <- renderUI({
     validate(need(data16S(), ""))
     sliderInput(
@@ -252,21 +257,21 @@ shinyServer
       value = 10
     )
   })
-
+  
   output$histFocusUIfocusGrid <- renderUI({
     validate(need(data16S(), ""))
     selectInput("focusGrid",
                 label = "Subplot : ",
                 choices = c("..." = 0, sample_variables(data16S())))
   })
-
+  
   output$histFocusUIfocusX <- renderUI({
     validate(need(data16S(), ""))
     selectInput("focusX",
                 label = "X : ",
                 choices = c("..." = 0, sample_variables(data16S())))
   })
-
+  
   output$histoFocus <- renderPlot({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -285,7 +290,7 @@ shinyServer
     }
     return(p)
   })
-
+  
   output$clustUI <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -326,7 +331,7 @@ shinyServer
       )
     )
   })
-
+  
   output$clust <- renderPlot({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -337,7 +342,7 @@ shinyServer
       color = checkNull(input$clustCol)
     )
   })
-
+  
   output$richnessAUI <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -398,7 +403,7 @@ shinyServer
       )
     )
   })
-
+  
   output$richnessA <- renderPlot({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -420,7 +425,7 @@ shinyServer
     }
     return(p)
   })
-
+  
   output$richnessATable <- renderUI({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -428,7 +433,7 @@ shinyServer
       SAMPLE = sample_names(data16S()), round(estimate_richness(data16S()), digits = 2)
     )))
   })
-
+  
   output$richnessBUI <- renderUI({
     box(
       title = "Setting : " ,
@@ -444,7 +449,7 @@ shinyServer
                 value = "Beta diversity heatmap")
     )
   })
-
+  
   output$richnessB <- renderPlot({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -477,7 +482,7 @@ shinyServer
     )
     return(p + scale_fill_gradient2())
   })
-
+  
   output$networkBUI <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -518,7 +523,7 @@ shinyServer
       )
     )
   })
-
+  
   output$networkB <- renderPlot({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -539,7 +544,7 @@ shinyServer
     )
     return(p)
   })
-
+  
   output$richnessBTable <- renderUI({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -549,7 +554,7 @@ shinyServer
       ), digits = 2)
     )))
   })
-
+  
   output$rarefactionCurve <- renderPlot({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -564,16 +569,16 @@ shinyServer
     if (!is.null(checkNull(input$rarefactionGrid))) {
       p <- p + facet_grid(paste(".", "~", input$rarefactionGrid))
     }
-
+    
     if (input$rarefactionMin) {
       p <-
         p + geom_vline(xintercept = min(sample_sums(data16S())),
                        color = "gray60")
     }
     return(p + ggtitle(input$rarefactionTitle))
-
+    
   })
-
+  
   output$rarefactionCurveUI <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -608,7 +613,7 @@ shinyServer
       )
     )
   })
-
+  
   output$HeatmapUI <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -667,7 +672,7 @@ shinyServer
       )
     )
   })
-
+  
   output$Heatmap <- renderPlot({
     validate(need(data16S(),
                   "Requires an abundance dataset"))
@@ -689,7 +694,7 @@ shinyServer
     }
     return(p)
   })
-
+  
   output$treeUI <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -728,7 +733,7 @@ shinyServer
       )
     )
   })
-
+  
   output$tree <- renderPlot({
     validate(
       need(data16S(), "Requires an abundance dataset"),
@@ -757,7 +762,7 @@ shinyServer
       return(p)
     }
   })
-
+  
   output$acpUI <- renderUI({
     validate(need(data16S(), ""))
     box(
@@ -821,7 +826,7 @@ shinyServer
       )
     )
   })
-
+  
   output$acp <- renderPlot({
     validate(
       need(data16S(), "Requires an abundance dataset"),
diff --git a/ui.R b/ui.R
index 6d405dec8f10939f4cce4efb43d3ae65a97831b0..42a3edaf38079b0ccb12f0fe303415cd74a22095 100644
--- a/ui.R
+++ b/ui.R
@@ -83,6 +83,7 @@ shinyUI(dashboardPage(
       tabPanel(
         "Summary",
         verbatimTextOutput("phyloseqPrint"),
+        tableOutput("sampledataTable"),
         withLoader(uiOutput("summaryTable")),
         tags$footer(
           "Questions, problems or comments regarding this application should be sent to ",
@@ -181,12 +182,12 @@ shinyUI(dashboardPage(
                    Questions, problems or comments regarding this application should be sent to
                    <a href = \"mailto:cedric.midoux@irstea.fr?subject=[Easy16S]\">cedric.midoux@irstea.fr</a>
                    </p>
-
+                   
                    <p>
                    For more information about this tool, you can refer to
                    <a href = \"http://migale.jouy.inra.fr/sites/migale.jouy.inra.fr.drupal7.migale.jouy.inra.fr/files/JOBIM2018_poster.pdf\">this poster</a>.
                    </p>
-
+                   
                    <p>
                    <u>The demo dataset :</u> Chaillou, S., et al. \"
                    <a href = \"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4409155/\">